controllers/keycloakclient/chain/put_client_role.go (41 lines of code) (raw):
package chain
import (
"context"
"github.com/pkg/errors"
ctrl "sigs.k8s.io/controller-runtime"
keycloakApi "github.com/epam/edp-keycloak-operator/api/v1"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak/dto"
)
type PutClientRole struct {
keycloakApiClient keycloak.Client
}
func NewPutClientRole(keycloakApiClient keycloak.Client) *PutClientRole {
return &PutClientRole{keycloakApiClient: keycloakApiClient}
}
func (el *PutClientRole) Serve(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
if err := el.putKeycloakClientRole(ctx, keycloakClient, realmName); err != nil {
return errors.Wrap(err, "unable to put keycloak client role")
}
return nil
}
func (el *PutClientRole) putKeycloakClientRole(ctx context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error {
reqLog := ctrl.LoggerFrom(ctx)
reqLog.Info("Start put keycloak client role")
clientDto := dto.ConvertSpecToClient(&keycloakClient.Spec, "", realmName, nil)
for _, role := range clientDto.Roles {
exist, err := el.keycloakApiClient.ExistClientRole(clientDto, role)
if err != nil {
return errors.Wrap(err, "error during ExistClientRole")
}
if exist {
reqLog.Info("Client role already exists", "role", role)
continue
}
if err := el.keycloakApiClient.CreateClientRole(clientDto, role); err != nil {
return errors.Wrap(err, "unable to create client role")
}
}
reqLog.Info("End put keycloak client role")
return nil
}