From 2216dc634e4b34dc04de820f86da13c283b0fa88 Mon Sep 17 00:00:00 2001 From: Juhani Atula Date: Thu, 1 Oct 2020 13:33:55 +0300 Subject: [PATCH 1/3] Add support for fetcing private key from a environment variable --- appsTransport.go | 7 +++++++ appsTransport_test.go | 11 +++++++++++ transport.go | 7 +++++++ transport_test.go | 11 +++++++++++ 4 files changed, 36 insertions(+) diff --git a/appsTransport.go b/appsTransport.go index 4848760..aafa9f2 100644 --- a/appsTransport.go +++ b/appsTransport.go @@ -5,6 +5,7 @@ import ( "fmt" "io/ioutil" "net/http" + "os" "strconv" "time" @@ -36,6 +37,12 @@ func NewAppsTransportKeyFromFile(tr http.RoundTripper, appID int64, privateKeyFi return NewAppsTransport(tr, appID, privateKey) } +// NewAppsTransportKeyFromEnv returns a AppsTransport using a private key from environment variable. +func NewAppsTransportKeyFromEnv(tr http.RoundTripper, appID int64, privateKeyEnv string) (*AppsTransport, error) { + privateKey := os.Getenv(privateKeyEnv) + return NewAppsTransport(tr, appID, []byte(privateKey)) +} + // NewAppsTransport returns a AppsTransport using private key. The key is parsed // and if any errors occur the error is non-nil. // diff --git a/appsTransport_test.go b/appsTransport_test.go index 61d17c4..c7ea2c9 100644 --- a/appsTransport_test.go +++ b/appsTransport_test.go @@ -31,6 +31,17 @@ func TestNewAppsTransportKeyFromFile(t *testing.T) { } } +func TestNewAppsTransportKeyFromEnv(t *testing.T) { + if err := os.Setenv("KEY", string(key)); err != nil { + t.Fatal("unexpected error:", err) + } + + _, err := NewAppsTransportKeyFromEnv(&http.Transport{}, appID, "KEY") + if err != nil { + t.Fatal("unexpected error:", err) + } +} + type RoundTrip struct { rt func(*http.Request) (*http.Response, error) } diff --git a/transport.go b/transport.go index c37d09e..050b130 100644 --- a/transport.go +++ b/transport.go @@ -8,6 +8,7 @@ import ( "io" "io/ioutil" "net/http" + "os" "sync" "time" @@ -60,6 +61,12 @@ func NewKeyFromFile(tr http.RoundTripper, appID, installationID int64, privateKe return New(tr, appID, installationID, privateKey) } +// NewKeyFromFile returns a Transport using a private key from environment variable. +func NewKeyFromEnv(tr http.RoundTripper, appID, installationID int64, privateKeyEnv string) (*Transport, error) { + privateKey := os.Getenv(privateKeyEnv) + return New(tr, appID, installationID, []byte(privateKey)) +} + // Client is a HTTP client which sends a http.Request and returns a http.Response // or an error. type Client interface { diff --git a/transport_test.go b/transport_test.go index 138b907..8e14b64 100644 --- a/transport_test.go +++ b/transport_test.go @@ -136,6 +136,17 @@ func TestNewKeyFromFile(t *testing.T) { } } +func TestNewKeyFromENV(t *testing.T) { + if err := os.Setenv("KEY", string(key)); err != nil { + t.Fatal("unexpected error:", err) + } + + _, err := NewKeyFromEnv(&http.Transport{}, appID, installationID, "KEY") + if err != nil { + t.Fatal("unexpected error:", err) + } +} + func TestNew_appendHeader(t *testing.T) { var headers http.Header ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { From a57e1949dfb8403aea53ef8145c6070cac67a576 Mon Sep 17 00:00:00 2001 From: Juhani Atula Date: Fri, 2 Oct 2020 11:43:30 +0300 Subject: [PATCH 2/3] refactor to use lookup instead of get --- appsTransport.go | 5 ++++- transport.go | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/appsTransport.go b/appsTransport.go index aafa9f2..b72ccec 100644 --- a/appsTransport.go +++ b/appsTransport.go @@ -39,7 +39,10 @@ func NewAppsTransportKeyFromFile(tr http.RoundTripper, appID int64, privateKeyFi // NewAppsTransportKeyFromEnv returns a AppsTransport using a private key from environment variable. func NewAppsTransportKeyFromEnv(tr http.RoundTripper, appID int64, privateKeyEnv string) (*AppsTransport, error) { - privateKey := os.Getenv(privateKeyEnv) + privateKey, ok := os.LookupEnv(privateKeyEnv) + if ok != true { + return nil, fmt.Errorf("private key environment variable %s empty", privateKeyEnv) + } return NewAppsTransport(tr, appID, []byte(privateKey)) } diff --git a/transport.go b/transport.go index 050b130..af61448 100644 --- a/transport.go +++ b/transport.go @@ -63,7 +63,10 @@ func NewKeyFromFile(tr http.RoundTripper, appID, installationID int64, privateKe // NewKeyFromFile returns a Transport using a private key from environment variable. func NewKeyFromEnv(tr http.RoundTripper, appID, installationID int64, privateKeyEnv string) (*Transport, error) { - privateKey := os.Getenv(privateKeyEnv) + privateKey, ok := os.LookupEnv(privateKeyEnv) + if ok != true { + return nil, fmt.Errorf("private key environment variable %s empty", privateKeyEnv) + } return New(tr, appID, installationID, []byte(privateKey)) } From c76a85f44c1566d220f07da29c7aa11e167fa587 Mon Sep 17 00:00:00 2001 From: Juhani Atula Date: Tue, 6 Oct 2020 16:20:34 +0300 Subject: [PATCH 3/3] cleaner if tests --- appsTransport.go | 2 +- transport.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/appsTransport.go b/appsTransport.go index b72ccec..f9d4829 100644 --- a/appsTransport.go +++ b/appsTransport.go @@ -40,7 +40,7 @@ func NewAppsTransportKeyFromFile(tr http.RoundTripper, appID int64, privateKeyFi // NewAppsTransportKeyFromEnv returns a AppsTransport using a private key from environment variable. func NewAppsTransportKeyFromEnv(tr http.RoundTripper, appID int64, privateKeyEnv string) (*AppsTransport, error) { privateKey, ok := os.LookupEnv(privateKeyEnv) - if ok != true { + if !ok { return nil, fmt.Errorf("private key environment variable %s empty", privateKeyEnv) } return NewAppsTransport(tr, appID, []byte(privateKey)) diff --git a/transport.go b/transport.go index af61448..1c73400 100644 --- a/transport.go +++ b/transport.go @@ -64,7 +64,7 @@ func NewKeyFromFile(tr http.RoundTripper, appID, installationID int64, privateKe // NewKeyFromFile returns a Transport using a private key from environment variable. func NewKeyFromEnv(tr http.RoundTripper, appID, installationID int64, privateKeyEnv string) (*Transport, error) { privateKey, ok := os.LookupEnv(privateKeyEnv) - if ok != true { + if !ok { return nil, fmt.Errorf("private key environment variable %s empty", privateKeyEnv) } return New(tr, appID, installationID, []byte(privateKey))