func()

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
}