Skip to content

Commit 12c1a4b

Browse files
authored
fix: verify client at the right time (#145)
1 parent 04d032d commit 12c1a4b

File tree

1 file changed

+27
-27
lines changed

1 file changed

+27
-27
lines changed

internal/subroutine/invite/subroutine.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,33 @@ func (s *subroutine) Process(ctx context.Context, instance runtimeobject.Runtime
144144

145145
log.Info().Str("email", invite.Spec.Email).Msg("User does not exist, creating user and sending invite")
146146

147+
clientQueryParams := url.Values{
148+
"clientId": {realm},
149+
}
150+
151+
res, err = s.keycloak.Get(fmt.Sprintf("%s/admin/realms/%s/clients?%s", s.keycloakBaseURL, realm, clientQueryParams.Encode()))
152+
if err != nil {
153+
log.Err(err).Msg("Failed to verify client exists")
154+
return ctrl.Result{}, errors.NewOperatorError(err, true, false)
155+
}
156+
defer res.Body.Close() //nolint:errcheck
157+
158+
if res.StatusCode != http.StatusOK {
159+
return ctrl.Result{}, errors.NewOperatorError(fmt.Errorf("failed to verify client exists: %s", res.Status), true, false)
160+
}
161+
162+
var clients []keycloakClient
163+
if err = json.NewDecoder(res.Body).Decode(&clients); err != nil {
164+
return ctrl.Result{}, errors.NewOperatorError(err, true, false)
165+
}
166+
167+
if len(clients) == 0 {
168+
log.Info().Str("clientId", realm).Msg("Client does not exist yet, requeuing")
169+
return ctrl.Result{}, errors.NewOperatorError(fmt.Errorf("client %s does not exist yet", realm), true, false)
170+
}
171+
172+
log.Debug().Str("clientId", realm).Msg("Client verified")
173+
147174
// Create user
148175
newUser := keycloakUser{
149176
Email: invite.Spec.Email,
@@ -186,33 +213,6 @@ func (s *subroutine) Process(ctx context.Context, instance runtimeobject.Runtime
186213

187214
log.Debug().Str("email", invite.Spec.Email).Str("id", newUser.ID).Msg("User created")
188215

189-
clientQueryParams := url.Values{
190-
"clientId": {realm},
191-
}
192-
193-
res, err = s.keycloak.Get(fmt.Sprintf("%s/admin/realms/%s/clients?%s", s.keycloakBaseURL, realm, clientQueryParams.Encode()))
194-
if err != nil {
195-
log.Err(err).Msg("Failed to verify client exists")
196-
return ctrl.Result{}, errors.NewOperatorError(err, true, false)
197-
}
198-
defer res.Body.Close() //nolint:errcheck
199-
200-
if res.StatusCode != http.StatusOK {
201-
return ctrl.Result{}, errors.NewOperatorError(fmt.Errorf("failed to verify client exists: %s", res.Status), true, false)
202-
}
203-
204-
var clients []keycloakClient
205-
if err = json.NewDecoder(res.Body).Decode(&clients); err != nil {
206-
return ctrl.Result{}, errors.NewOperatorError(err, true, false)
207-
}
208-
209-
if len(clients) == 0 {
210-
log.Info().Str("clientId", realm).Msg("Client does not exist yet, requeuing")
211-
return ctrl.Result{}, errors.NewOperatorError(fmt.Errorf("client %s does not exist yet", realm), true, false)
212-
}
213-
214-
log.Debug().Str("clientId", realm).Msg("Client verified")
215-
216216
queryParams := url.Values{
217217
"redirect_uri": {fmt.Sprintf("https://%s.%s/", realm, s.baseDomain)},
218218
"client_id": {realm},

0 commit comments

Comments
 (0)