controllers/keycloakclient/chain/put_client_scope.go (59 lines of code) (raw):
package chain
import (
"context"
"fmt"
"github.com/pkg/errors"
keycloakApi "github.com/epam/edp-keycloak-operator/api/v1"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak"
)
type PutClientScope struct {
keycloakApiClient keycloak.Client
}
func NewPutClientScope(keycloakApiClient keycloak.Client) *PutClientScope {
return &PutClientScope{keycloakApiClient: keycloakApiClient}
}
func (el *PutClientScope) Serve(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
if err := el.putClientScope(ctx, keycloakClient, realmName); err != nil {
return errors.Wrap(err, "error during putClientScope")
}
return nil
}
func (el *PutClientScope) putClientScope(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
if err := el.putDefaultClientScope(ctx, keycloakClient, realmName); err != nil {
return err
}
if err := el.putOptionalClientScope(ctx, keycloakClient, realmName); err != nil {
return err
}
return nil
}
func (el *PutClientScope) putDefaultClientScope(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
kCloakSpec := keycloakClient.Spec
if len(kCloakSpec.DefaultClientScopes) == 0 {
return nil
}
defaultScopes, err := el.keycloakApiClient.GetClientScopesByNames(ctx, realmName, kCloakSpec.DefaultClientScopes)
if err != nil {
return errors.Wrap(err, "error during GetClientScope")
}
err = el.keycloakApiClient.AddDefaultScopeToClient(ctx, realmName, kCloakSpec.ClientId, defaultScopes)
if err != nil {
return fmt.Errorf("failed to add default scope to client %s: %w", keycloakClient.Name, err)
}
return nil
}
func (el *PutClientScope) putOptionalClientScope(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
kCloakSpec := keycloakClient.Spec
if len(kCloakSpec.OptionalClientScopes) == 0 {
return nil
}
optionalScopes, err := el.keycloakApiClient.GetClientScopesByNames(ctx, realmName, kCloakSpec.OptionalClientScopes)
if err != nil {
return errors.Wrap(err, "error during GetClientScope")
}
err = el.keycloakApiClient.AddOptionalScopeToClient(ctx, realmName, kCloakSpec.ClientId, optionalScopes)
if err != nil {
return fmt.Errorf("failed to add default scope to client %s: %w", keycloakClient.Name, err)
}
return nil
}