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 }