From 713a082da1c9df6e61ef54e32ac33ec99f86c57b Mon Sep 17 00:00:00 2001 From: ydris Date: Wed, 16 Feb 2022 08:50:05 +0100 Subject: [PATCH] Remove the custom constrtouctor and replace with an optional argument to override the discovery endpoit --- pkg/client/client.go | 7 ++++- pkg/client/rp/relaying_party.go | 56 +++++++++------------------------ 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/pkg/client/client.go b/pkg/client/client.go index 1828d1d..ac6cd56 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -26,8 +26,13 @@ var ( ) //Discover calls the discovery endpoint of the provided issuer and returns its configuration -func Discover(issuer string, httpClient *http.Client) (*oidc.DiscoveryConfiguration, error) { +//It accepts an optional argument "wellknownUrl" which can be used to overide the dicovery endpoint url +func Discover(issuer string, httpClient *http.Client, wellKnownUrl ...string) (*oidc.DiscoveryConfiguration, error) { + wellKnown := strings.TrimSuffix(issuer, "/") + oidc.DiscoveryEndpoint + if len(wellKnownUrl) == 1 && wellKnownUrl[0] != "" { + wellKnown = wellKnownUrl[0] + } req, err := http.NewRequest("GET", wellKnown, nil) if err != nil { return nil, err diff --git a/pkg/client/rp/relaying_party.go b/pkg/client/rp/relaying_party.go index 4ed5eef..98ab354 100644 --- a/pkg/client/rp/relaying_party.go +++ b/pkg/client/rp/relaying_party.go @@ -69,11 +69,12 @@ var ( ) type relyingParty struct { - issuer string - endpoints Endpoints - oauthConfig *oauth2.Config - oauth2Only bool - pkce bool + issuer string + DiscoveryEndpoint string + endpoints Endpoints + oauthConfig *oauth2.Config + oauth2Only bool + pkce bool httpClient *http.Client cookieHandler *httphelper.CookieHandler @@ -170,7 +171,7 @@ func NewRelyingPartyOIDC(issuer, clientID, clientSecret, redirectURI string, sco return nil, err } } - discoveryConfiguration, err := client.Discover(rp.issuer, rp.httpClient) + discoveryConfiguration, err := client.Discover(rp.issuer, rp.httpClient, rp.DiscoveryEndpoint) if err != nil { return nil, err } @@ -181,45 +182,16 @@ func NewRelyingPartyOIDC(issuer, clientID, clientSecret, redirectURI string, sco return rp, nil } -//NewRelyingPartyOIDCWithCustomEndpoints creates an (OIDC) RelyingParty with the given -//discoveryConfiguration, clientID, clientSecret, redirectURI, scopes and other possible configOptions -//it will use the provided end points -//This is usefull when the server does not use standard endpoint paths -func NewRelyingPartyOIDCWithCustomEndpoints( - discoveryConfiguration *oidc.DiscoveryConfiguration, - clientID, - clientSecret, - redirectURI string, - scopes []string, - options ...Option) (RelyingParty, error) { - - rp := &relyingParty{ - issuer: discoveryConfiguration.Issuer, - oauthConfig: &oauth2.Config{ - ClientID: clientID, - ClientSecret: clientSecret, - RedirectURL: redirectURI, - Scopes: scopes, - }, - httpClient: httphelper.DefaultHTTPClient, - oauth2Only: false, - } - - for _, optFunc := range options { - if err := optFunc(rp); err != nil { - return nil, err - } - } - endpoints := GetEndpoints(discoveryConfiguration) - rp.oauthConfig.Endpoint = endpoints.Endpoint - rp.endpoints = endpoints - - return rp, nil -} - //Option is the type for providing dynamic options to the relyingParty type Option func(*relyingParty) error +func WithCustomDiscoveryUrl(url string) Option { + return func(rp *relyingParty) error { + rp.DiscoveryEndpoint = url + return nil + } +} + //WithCookieHandler set a `CookieHandler` for securing the various redirects func WithCookieHandler(cookieHandler *httphelper.CookieHandler) Option { return func(rp *relyingParty) error {