in controllers/keycloakclient/chain/process_scope.go [25:68]
func (h *ProcessScope) Serve(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
log := ctrl.LoggerFrom(ctx)
if keycloakClient.Spec.Authorization == nil {
log.Info("Authorization settings are not specified")
return nil
}
clientID, err := h.keycloakApiClient.GetClientID(keycloakClient.Spec.ClientId, realmName)
if err != nil {
return fmt.Errorf("failed to get client id: %w", err)
}
existingScopes, err := h.keycloakApiClient.GetScopes(ctx, realmName, clientID)
if err != nil {
return fmt.Errorf("failed to get scopes: %w", err)
}
for _, scope := range keycloakClient.Spec.Authorization.Scopes {
log.Info("Processing scope", scopeLogKey, scope)
_, ok := existingScopes[scope]
if ok {
log.Info("Scope already exists")
delete(existingScopes, scope)
continue
}
if _, err = h.keycloakApiClient.CreateScope(ctx, realmName, clientID, scope); err != nil {
return fmt.Errorf("failed to create scope: %w", err)
}
log.Info("Scope created", scopeLogKey, scope)
delete(existingScopes, scope)
}
if err = h.deleteScopes(ctx, existingScopes, realmName, clientID); err != nil {
return err
}
return nil
}