controllers/keycloakclient/chain/put_protocol_mappers.go (45 lines of code) (raw):

package chain import ( "context" "github.com/Nerzal/gocloak/v12" "github.com/pkg/errors" "golang.org/x/exp/maps" 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 PutProtocolMappers struct { keycloakApiClient keycloak.Client } func NewPutProtocolMappers(keycloakApiClient keycloak.Client) *PutProtocolMappers { return &PutProtocolMappers{keycloakApiClient: keycloakApiClient} } func (el *PutProtocolMappers) Serve(_ context.Context, keycloakClient *keycloakApi.KeycloakClient, realmName string) error { if err := el.putProtocolMappers(keycloakClient, realmName); err != nil { return errors.Wrap(err, "unable to put protocol mappers") } return nil } func (el *PutProtocolMappers) putProtocolMappers(keycloakClient *keycloakApi.KeycloakClient, realmName string) error { var protocolMappers []gocloak.ProtocolMapperRepresentation if keycloakClient.Spec.ProtocolMappers != nil { protocolMappers = make([]gocloak.ProtocolMapperRepresentation, 0, len(*keycloakClient.Spec.ProtocolMappers)) for _, mapper := range *keycloakClient.Spec.ProtocolMappers { configCopy := make(map[string]string, len(mapper.Config)) maps.Copy(configCopy, mapper.Config) protocolMappers = append(protocolMappers, gocloak.ProtocolMapperRepresentation{ Name: gocloak.StringP(mapper.Name), Protocol: gocloak.StringP(mapper.Protocol), ProtocolMapper: gocloak.StringP(mapper.ProtocolMapper), Config: &configCopy, }) } } if err := el.keycloakApiClient.SyncClientProtocolMapper( dto.ConvertSpecToClient(&keycloakClient.Spec, "", realmName, nil), protocolMappers, keycloakClient.GetReconciliationStrategy() == keycloakApi.ReconciliationStrategyAddOnly); err != nil { return errors.Wrap(err, "unable to sync protocol mapper") } return nil }