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  }