diff --git a/connector/oidc/oidc.go b/connector/oidc/oidc.go index e948635442d3c8f9e4e7a0a899a6d19268ad6df5..c2918006c8ea38058c6d0ac71185fe13d256b5b1 100644 --- a/connector/oidc/oidc.go +++ b/connector/oidc/oidc.go @@ -76,7 +76,7 @@ type Config struct { UserNameKey string `json:"userNameKey"` // PromptType will be used fot the prompt parameter (when offline_access, by default prompt=consent) - PromptType string `json:"promptType"` + PromptType *string `json:"promptType"` // OverrideClaimMapping will be used to override the options defined in claimMappings. // i.e. if there are 'email' and `preferred_email` claims available, by default Dex will always use the `email` claim independent of the ClaimMapping.EmailKey. @@ -242,8 +242,9 @@ func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, e } // PromptType should be "consent" by default, if not set - if c.PromptType == "" { - c.PromptType = "consent" + promptType := "consent" + if c.PromptType != nil { + promptType = *c.PromptType } clientID := c.ClientID @@ -268,7 +269,7 @@ func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, e allowedGroups: c.AllowedGroups, acrValues: c.AcrValues, getUserInfo: c.GetUserInfo, - promptType: c.PromptType, + promptType: promptType, userIDKey: c.UserIDKey, userNameKey: c.UserNameKey, overrideClaimMapping: c.OverrideClaimMapping, diff --git a/connector/oidc/oidc_test.go b/connector/oidc/oidc_test.go index fef2a1a5521e8809986ec03df62aba7cef4468d9..e621a55ffb0a54be3bf139ed9b9b69a558e0c9b9 100644 --- a/connector/oidc/oidc_test.go +++ b/connector/oidc/oidc_test.go @@ -19,6 +19,7 @@ import ( "github.com/go-jose/go-jose/v4" "github.com/sirupsen/logrus" + "github.com/stretchr/testify/require" "github.com/dexidp/dex/connector" ) @@ -584,6 +585,40 @@ func TestTokenIdentity(t *testing.T) { } } +func TestPromptType(t *testing.T) { + pointer := func(s string) *string { + return &s + } + + tests := []struct { + name string + promptType *string + res string + }{ + {name: "none", promptType: pointer("none"), res: "none"}, + {name: "provided empty string", promptType: pointer(""), res: ""}, + {name: "login", promptType: pointer("login"), res: "login"}, + {name: "consent", promptType: pointer("consent"), res: "consent"}, + {name: "default value", promptType: nil, res: "consent"}, + } + + testServer, err := setupServer(nil, true) + require.NoError(t, err) + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + conn, err := newConnector(Config{ + Issuer: testServer.URL, + Scopes: []string{"openid", "groups"}, + PromptType: tc.promptType, + }) + require.NoError(t, err) + + require.Equal(t, tc.res, conn.promptType) + }) + } +} + func TestProviderOverride(t *testing.T) { testServer, err := setupServer(map[string]any{ "sub": "subvalue",