From d9fffef6cb22aaa16a0de6cf288e93fd4784eb65 Mon Sep 17 00:00:00 2001 From: rajkong Date: Mon, 3 Jan 2022 12:10:17 -0800 Subject: [PATCH 1/5] Initial commit for headers support for Konnect http client --- cmd/root.go | 1 + konnect/client.go | 6 +++++- utils/types.go | 8 +++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 241dda600..f444ce223 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -247,5 +247,6 @@ func initKonnectConfig() error { konnectConfig.Password = password konnectConfig.Debug = (viper.GetInt("verbose") >= 1) konnectConfig.Address = viper.GetString("konnect-addr") + konnectConfig.Headers = viper.GetStringSlice("headers") return nil } diff --git a/konnect/client.go b/konnect/client.go index 274baff7d..03188f713 100644 --- a/konnect/client.go +++ b/konnect/client.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/kong/go-kong/kong" "io" "net/http" "net/http/httputil" @@ -39,10 +40,13 @@ type ClientOpts struct { } // NewClient returns a Client which talks to Konnect's API. -func NewClient(httpClient *http.Client, opts ClientOpts) (*Client, error) { +func NewClient(httpClient *http.Client, opts ClientOpts, headers http.Header) (*Client, error) { if httpClient == nil { + defaultTransport := http.DefaultTransport.(*http.Transport) httpClient = http.DefaultClient + httpClient.Transport = defaultTransport } + httpClient = kong.HTTPClientWithHeaders(httpClient, headers) client := new(Client) client.client = httpClient url, err := url.ParseRequestURI(opts.BaseURL) diff --git a/utils/types.go b/utils/types.go index a1ab9088a..2dec53b71 100644 --- a/utils/types.go +++ b/utils/types.go @@ -105,6 +105,8 @@ type KonnectConfig struct { Debug bool Address string + + Headers []string } // ForWorkspace returns a copy of KongClientConfig that produces a KongClient for the workspace specified by argument. @@ -193,9 +195,13 @@ func parseHeaders(headers []string) (http.Header, error) { func GetKonnectClient(httpClient *http.Client, config KonnectConfig) (*konnect.Client, error) { address := CleanAddress(config.Address) + headers, err := parseHeaders(config.Headers) + if err != nil { + return nil, fmt.Errorf("parsing headers: %w", err) + } client, err := konnect.NewClient(httpClient, konnect.ClientOpts{ BaseURL: address, - }) + }, headers) if err != nil { return nil, err } From ce9c43a1bc31fc19cf822f16df7679443ccf21aa Mon Sep 17 00:00:00 2001 From: rajkong Date: Mon, 3 Jan 2022 13:36:26 -0800 Subject: [PATCH 2/5] gci on imports --- konnect/client.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/konnect/client.go b/konnect/client.go index 03188f713..ccd608609 100644 --- a/konnect/client.go +++ b/konnect/client.go @@ -4,12 +4,13 @@ import ( "context" "encoding/json" "fmt" - "github.com/kong/go-kong/kong" "io" "net/http" "net/http/httputil" "net/url" "os" + + "github.com/kong/go-kong/kong" ) var defaultCtx = context.Background() From 11dee03becb9f121c3266ccc05a27b468c5d4b7d Mon Sep 17 00:00:00 2001 From: rajkong Date: Tue, 4 Jan 2022 08:07:15 -0800 Subject: [PATCH 3/5] Addressing code review comments --- konnect/client.go | 9 ++------- utils/types.go | 6 +++++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/konnect/client.go b/konnect/client.go index ccd608609..a5a589751 100644 --- a/konnect/client.go +++ b/konnect/client.go @@ -9,8 +9,6 @@ import ( "net/http/httputil" "net/url" "os" - - "github.com/kong/go-kong/kong" ) var defaultCtx = context.Background() @@ -41,13 +39,10 @@ type ClientOpts struct { } // NewClient returns a Client which talks to Konnect's API. -func NewClient(httpClient *http.Client, opts ClientOpts, headers http.Header) (*Client, error) { +func NewClient(httpClient *http.Client, opts ClientOpts) (*Client, error) { if httpClient == nil { - defaultTransport := http.DefaultTransport.(*http.Transport) - httpClient = http.DefaultClient - httpClient.Transport = defaultTransport + return nil, fmt.Errorf("nil httpClient passed") } - httpClient = kong.HTTPClientWithHeaders(httpClient, headers) client := new(Client) client.client = httpClient url, err := url.ParseRequestURI(opts.BaseURL) diff --git a/utils/types.go b/utils/types.go index 2dec53b71..ddb04c215 100644 --- a/utils/types.go +++ b/utils/types.go @@ -199,9 +199,13 @@ func GetKonnectClient(httpClient *http.Client, config KonnectConfig) (*konnect.C if err != nil { return nil, fmt.Errorf("parsing headers: %w", err) } + defaultTransport := http.DefaultTransport.(*http.Transport) + httpClient = http.DefaultClient + httpClient.Transport = defaultTransport + httpClient = kong.HTTPClientWithHeaders(httpClient, headers) client, err := konnect.NewClient(httpClient, konnect.ClientOpts{ BaseURL: address, - }, headers) + }) if err != nil { return nil, err } From 01fb1270f394cafd09a7385f10529cd9827d3827 Mon Sep 17 00:00:00 2001 From: rajkong Date: Tue, 4 Jan 2022 08:15:53 -0800 Subject: [PATCH 4/5] Added nil check and allow handling of existing httpClient --- utils/types.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/utils/types.go b/utils/types.go index ddb04c215..2e5490db1 100644 --- a/utils/types.go +++ b/utils/types.go @@ -195,13 +195,16 @@ func parseHeaders(headers []string) (http.Header, error) { func GetKonnectClient(httpClient *http.Client, config KonnectConfig) (*konnect.Client, error) { address := CleanAddress(config.Address) + + if httpClient == nil { + defaultTransport := http.DefaultTransport.(*http.Transport) + httpClient = http.DefaultClient + httpClient.Transport = defaultTransport + } headers, err := parseHeaders(config.Headers) if err != nil { return nil, fmt.Errorf("parsing headers: %w", err) } - defaultTransport := http.DefaultTransport.(*http.Transport) - httpClient = http.DefaultClient - httpClient.Transport = defaultTransport httpClient = kong.HTTPClientWithHeaders(httpClient, headers) client, err := konnect.NewClient(httpClient, konnect.ClientOpts{ BaseURL: address, From 8d30706c0fc5b8b9f62c8faa61f378657b425a1a Mon Sep 17 00:00:00 2001 From: rajkong Date: Tue, 4 Jan 2022 09:23:35 -0800 Subject: [PATCH 5/5] Reverting change to client.go --- konnect/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/konnect/client.go b/konnect/client.go index a5a589751..274baff7d 100644 --- a/konnect/client.go +++ b/konnect/client.go @@ -41,7 +41,7 @@ type ClientOpts struct { // NewClient returns a Client which talks to Konnect's API. func NewClient(httpClient *http.Client, opts ClientOpts) (*Client, error) { if httpClient == nil { - return nil, fmt.Errorf("nil httpClient passed") + httpClient = http.DefaultClient } client := new(Client) client.client = httpClient