From 9a64e67d5bacf69ee8ec363842aa652260ff3fa4 Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Mon, 14 Sep 2020 13:55:47 +0200 Subject: [PATCH] De-duplicate code in GetLoginURL of in logingov provider Also add unit test to ensure logingov specific logic is applied. --- providers/logingov.go | 16 ++++------------ providers/logingov_test.go | 7 +++++++ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/providers/logingov.go b/providers/logingov.go index c524741f..e631237c 100644 --- a/providers/logingov.go +++ b/providers/logingov.go @@ -225,19 +225,11 @@ func (p *LoginGovProvider) Redeem(ctx context.Context, redirectURL, code string) // GetLoginURL overrides GetLoginURL to add login.gov parameters func (p *LoginGovProvider) GetLoginURL(redirectURI, state string) string { - a := *p.LoginURL - params, _ := url.ParseQuery(a.RawQuery) - params.Set("redirect_uri", redirectURI) - params.Set("approval_prompt", p.ApprovalPrompt) - params.Add("scope", p.Scope) - params.Set("client_id", p.ClientID) - params.Set("response_type", "code") - params.Add("state", state) - acr := p.AcrValues - if acr == "" { - acr = "http://idmanagement.gov/ns/assurance/loa/1" + a, params := DefaultGetLoginURL(p.ProviderData, redirectURI, state) + if p.AcrValues == "" { + acr := "http://idmanagement.gov/ns/assurance/loa/1" + params.Add("acr_values", acr) } - params.Add("acr_values", acr) params.Add("nonce", p.Nonce) a.RawQuery = params.Encode() return a.String() diff --git a/providers/logingov_test.go b/providers/logingov_test.go index 2c0f8357..0b70190b 100644 --- a/providers/logingov_test.go +++ b/providers/logingov_test.go @@ -289,3 +289,10 @@ func TestLoginGovProviderBadNonce(t *testing.T) { // The "badfakenonce" in the idtoken above should cause this to error out assert.Error(t, err) } + +func TestLoginGovProviderGetLoginURL(t *testing.T) { + p, _, _ := newLoginGovProvider() + result := p.GetLoginURL("http://redirect/", "") + assert.Contains(t, result, "acr_values="+url.QueryEscape("http://idmanagement.gov/ns/assurance/loa/1")) + assert.Contains(t, result, "nonce=fakenonce") +}