diff --git a/internal/pkg/client/client.go b/internal/pkg/client/client.go index b0ddb59..dd1662a 100644 --- a/internal/pkg/client/client.go +++ b/internal/pkg/client/client.go @@ -29,6 +29,8 @@ var ( ErrInvalidBasicAuth = errors.New("invalid basic auth params provided") // ErrInvalidTokenAuth returns if the provided token is empty. ErrInvalidTokenAuth = errors.New("invalid token auth params provided") + // ErrOauth2Callback returns if the Oauth2 provider returned an error. + ErrOauth2Callback = errors.New("the Oauth2 callback returned with error") ) // BaseClientOpts specifies the common options the clients are using. @@ -85,19 +87,26 @@ func NewBasicAuth(username string, password string) (Authenticator, error) { }, nil } -// TokenAuth represents the required parameters for token based authentication. +// TokenAuth represents the required parameters for token based authentication. type TokenAuth struct { - Header string - Token string + Header string + TokenName string + Token string } func (a *TokenAuth) SetAuthHeader(req *http.Request) { - req.Header.Set(a.Header, a.Token) + token := a.Token + + if a.TokenName != "" { + token = a.TokenName + " " + token + } + + req.Header.Set(a.Header, token) } // NewTokenAuth returns a new TokenAuth that implements Authenticator. If the // header name is not set, the standard "Authorization" header will be used. -func NewTokenAuth(header string, token string) (Authenticator, error) { +func NewTokenAuth(header string, tokenName string, token string) (Authenticator, error) { if token == "" { return nil, ErrInvalidTokenAuth } @@ -108,6 +117,7 @@ func NewTokenAuth(header string, token string) (Authenticator, error) { return &TokenAuth{ Header: header, + TokenName: tokenName, Token: token, }, nil } diff --git a/internal/pkg/client/client_test.go b/internal/pkg/client/client_test.go index 6c323aa..9832da7 100644 --- a/internal/pkg/client/client_test.go +++ b/internal/pkg/client/client_test.go @@ -152,7 +152,7 @@ func TestTokenAuth(t *testing.T) { require.Nil(t, err) require.Equal(t, req.Header.Get(header), "") - auth, err := client.NewTokenAuth(header, "the-strongest-avenger") + auth, err := client.NewTokenAuth(header, "", "the-strongest-avenger") require.Nil(t, err) auth.SetAuthHeader(req) @@ -166,7 +166,7 @@ func TestTokenAuth_FallbackHeader(t *testing.T) { require.Nil(t, err) require.Equal(t, req.Header.Get(header), "") - auth, err := client.NewTokenAuth("", "the-strongest-avenger") + auth, err := client.NewTokenAuth("", "", "the-strongest-avenger") require.Nil(t, err) auth.SetAuthHeader(req) @@ -176,7 +176,7 @@ func TestTokenAuth_FallbackHeader(t *testing.T) { func TestTokenAuth_Invalid(t *testing.T) { var err error - _, err = client.NewTokenAuth("", "") + _, err = client.NewTokenAuth("", "", "") require.ErrorIs(t, err, client.ErrInvalidTokenAuth) } diff --git a/internal/pkg/client/clockify/clockify.go b/internal/pkg/client/clockify/clockify.go index ae6a504..2adb45b 100644 --- a/internal/pkg/client/clockify/clockify.go +++ b/internal/pkg/client/clockify/clockify.go @@ -188,7 +188,7 @@ func NewFetcher(opts *ClientOpts) (client.Fetcher, error) { return nil, err } - authenticator, err := client.NewTokenAuth(opts.Header, opts.Token) + authenticator, err := client.NewTokenAuth(opts.Header, "", opts.Token) if err != nil { return nil, err }