Skip to content

Commit d1bf1b9

Browse files
AlexTugarevroboquat
authored andcommitted
[iam] select config by ID on /start
1 parent 5f507e7 commit d1bf1b9

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

components/iam/pkg/oidc/service.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,17 +159,27 @@ func randString(size int) (string, error) {
159159

160160
func (s *Service) GetClientConfigFromStartRequest(r *http.Request) (*ClientConfig, error) {
161161
issuerParam := r.URL.Query().Get("issuer")
162-
if issuerParam == "" {
163-
return nil, fmt.Errorf("missing issuer parameter")
162+
idParam := r.URL.Query().Get("id")
163+
if issuerParam == "" && idParam == "" {
164+
return nil, fmt.Errorf("missing parameters")
164165
}
165166

166-
for _, value := range s.configsById {
167-
if value.Issuer == issuerParam {
168-
return value, nil
167+
if idParam != "" {
168+
config := s.configsById[idParam]
169+
if config != nil {
170+
return config, nil
171+
}
172+
return nil, fmt.Errorf("failed to find OIDC config by ID")
173+
}
174+
if issuerParam != "" {
175+
for _, value := range s.configsById {
176+
if value.Issuer == issuerParam {
177+
return value, nil
178+
}
169179
}
170180
}
171181

172-
return nil, fmt.Errorf("failed to find OIDC config for start request")
182+
return nil, fmt.Errorf("failed to find OIDC config")
173183
}
174184

175185
func (s *Service) GetClientConfigFromCallbackRequest(r *http.Request) (*ClientConfig, error) {
@@ -187,7 +197,7 @@ func (s *Service) GetClientConfigFromCallbackRequest(r *http.Request) (*ClientCo
187197
return config, nil
188198
}
189199

190-
return nil, fmt.Errorf("failed to find OIDC config for request")
200+
return nil, fmt.Errorf("failed to find OIDC config on callback")
191201
}
192202

193203
type AuthenticateParams struct {

components/iam/pkg/oidc/service_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ func TestGetClientConfigFromStartRequest(t *testing.T) {
8585
ExpectedError: true,
8686
ExpectedId: "",
8787
},
88+
{
89+
Location: "/start?id=UNKNOWN",
90+
ExpectedError: true,
91+
ExpectedId: "",
92+
},
93+
{
94+
Location: "/start?id=" + clientID,
95+
ExpectedError: false,
96+
ExpectedId: clientID,
97+
},
8898
}
8999

90100
sessionServerAddress := newFakeSessionServer(t)

0 commit comments

Comments
 (0)