| //go:build ignore |
| // +build ignore |
| |
| // This file is a helper for those doing _manual_ testing of "terraform login" |
| // and/or "terraform logout" and want to start up a test OAuth server in a |
| // separate process for convenience: |
| // |
| // go run ./command/testdata/login-oauth-server/main.go :8080 |
| // |
| // This is _not_ the main way to use this oauthserver package. For automated |
| // test code, import it as a normal Go package instead: |
| // |
| // import oauthserver "github.com/hashicorp/terraform/internal/command/testdata/login-oauth-server" |
| |
| package main |
| |
| import ( |
| "fmt" |
| "net" |
| "net/http" |
| "os" |
| |
| oauthserver "github.com/hashicorp/terraform/internal/command/testdata/login-oauth-server" |
| ) |
| |
| func main() { |
| if len(os.Args) < 2 { |
| fmt.Fprintln(os.Stderr, "Usage: go run ./command/testdata/login-oauth-server/main.go <listen-address>") |
| os.Exit(1) |
| } |
| |
| host, port, err := net.SplitHostPort(os.Args[1]) |
| if err != nil { |
| fmt.Fprintln(os.Stderr, "Invalid address: %s", err) |
| os.Exit(1) |
| } |
| |
| if host == "" { |
| host = "127.0.0.1" |
| } |
| addr := fmt.Sprintf("%s:%s", host, port) |
| |
| fmt.Printf("Will listen on %s...\n", addr) |
| fmt.Printf( |
| configExampleFmt, |
| fmt.Sprintf("http://%s:%s/authz", host, port), |
| fmt.Sprintf("http://%s:%s/token", host, port), |
| fmt.Sprintf("http://%s:%s/revoke", host, port), |
| ) |
| |
| server := &http.Server{ |
| Addr: addr, |
| Handler: oauthserver.Handler, |
| } |
| err = server.ListenAndServe() |
| fmt.Fprintln(os.Stderr, err.Error()) |
| } |
| |
| const configExampleFmt = ` |
| host "login-test.example.com" { |
| services = { |
| "login.v1" = { |
| authz = %q |
| token = %q |
| client = "placeholder" |
| grant_types = ["code", "password"] |
| } |
| "logout.v1" = %q |
| } |
| } |
| |
| ` |