github.com/snowflakedb/gosnowflake@v1.9.0/cmd/oauth/oauth.go (about) 1 // Example: Authenticate with OAuth. In order for this to work, one should 2 // complete the OAuth flow to get an access token, which is beyond (for now!) 3 // the scope of this example. 4 package main 5 6 import ( 7 "database/sql" 8 "flag" 9 "fmt" 10 "log" 11 "net/url" 12 "os" 13 14 _ "github.com/snowflakedb/gosnowflake" 15 ) 16 17 func main() { 18 if !flag.Parsed() { 19 flag.Parse() 20 } 21 22 // get environment variables 23 env := func(k string) string { 24 if value := os.Getenv(k); value != "" { 25 return value 26 } 27 log.Fatalf("%v environment variable is not set.", k) 28 return "" 29 } 30 31 account := env("SNOWFLAKE_TEST_ACCOUNT") 32 token := env("SNOWFLAKE_TEST_OAUTH_TOKEN") 33 34 // Tokens must be escaped before being used in the DSN! 35 escapedToken := url.QueryEscape(token) 36 37 dsn := fmt.Sprintf("%v?authenticator=OAUTH&token=%v", account, escapedToken) 38 db, err := sql.Open("snowflake", dsn) 39 if err != nil { 40 log.Fatalf("failed to connect. %v, err: %v", dsn, err) 41 } 42 defer db.Close() 43 query := "SELECT 1" 44 rows, err := db.Query(query) // no cancel is allowed 45 if err != nil { 46 log.Fatalf("failed to run a query. %v, err: %v", query, err) 47 } 48 defer rows.Close() 49 var v int 50 for rows.Next() { 51 err := rows.Scan(&v) 52 if err != nil { 53 log.Fatalf("failed to get result. err: %v", err) 54 } 55 if v != 1 { 56 log.Fatalf("failed to get 1. got: %v", v) 57 } 58 } 59 if rows.Err() != nil { 60 fmt.Printf("ERROR: %v\n", rows.Err()) 61 return 62 } 63 fmt.Printf("Congrats! You have successfully run %v with Snowflake DB!\n", query) 64 }