github.com/snowflakedb/gosnowflake@v1.9.0/cmd/externalbrowser/externalbrowser.go (about)

     1  package main
     2  
     3  import (
     4  	"database/sql"
     5  	"flag"
     6  	"fmt"
     7  	"log"
     8  
     9  	sf "github.com/snowflakedb/gosnowflake"
    10  )
    11  
    12  // A simple test program for authenticating with an external browser.
    13  // In order for this to work, SSO needs to be set up on Snowflake as per:
    14  // https://docs.snowflake.net/manuals/user-guide/admin-security-fed-auth-configure-snowflake.html
    15  func main() {
    16  	if !flag.Parsed() {
    17  		flag.Parse()
    18  	}
    19  	cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{
    20  		{Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true},
    21  		{Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true},
    22  		{Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false},
    23  		{Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false},
    24  		{Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false},
    25  	})
    26  	if err != nil {
    27  		log.Fatalf("failed to create Config, err: %v", err)
    28  	}
    29  	cfg.Authenticator = sf.AuthTypeExternalBrowser
    30  	dsn, err := sf.DSN(cfg)
    31  	if err != nil {
    32  		log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err)
    33  	}
    34  
    35  	// The external browser flow should start with the call to Open
    36  	db, err := sql.Open("snowflake", dsn)
    37  	if err != nil {
    38  		log.Fatalf("failed to connect. %v, err: %v", dsn, err)
    39  	}
    40  	defer db.Close()
    41  	query := "SELECT 1"
    42  	rows, err := db.Query(query)
    43  	if err != nil {
    44  		log.Fatalf("failed to run a query. %v, err: %v", query, err)
    45  	}
    46  	defer rows.Close()
    47  	var v int
    48  	for rows.Next() {
    49  		err := rows.Scan(&v)
    50  		if err != nil {
    51  			log.Fatalf("failed to get result. err: %v", err)
    52  		}
    53  		if v != 1 {
    54  			log.Fatalf("failed to get 1. got: %v", v)
    55  		}
    56  		fmt.Printf("Congrats! You have successfully run %v with Snowflake DB!", query)
    57  	}
    58  }