controllers/clusterkeycloakrealm/chain/put_realm_settings.go (66 lines of code) (raw):
package chain
import (
"context"
"fmt"
"github.com/pkg/errors"
ctrl "sigs.k8s.io/controller-runtime"
"github.com/epam/edp-keycloak-operator/api/v1alpha1"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak/adapter"
)
// PutRealmSettings is responsible for updating of keycloak realm settings.
type PutRealmSettings struct {
}
// NewPutRealmSettings creates a new PutRealmSettings handler.
func NewPutRealmSettings() *PutRealmSettings {
return &PutRealmSettings{}
}
func (h PutRealmSettings) ServeRequest(ctx context.Context, realm *v1alpha1.ClusterKeycloakRealm, kClient keycloak.Client) error {
log := ctrl.LoggerFrom(ctx)
log.Info("Start updating of keycloak realm settings")
if realm.Spec.RealmEventConfig != nil {
if err := kClient.SetRealmEventConfig(realm.Spec.RealmName, &adapter.RealmEventConfig{
AdminEventsDetailsEnabled: realm.Spec.RealmEventConfig.AdminEventsDetailsEnabled,
AdminEventsEnabled: realm.Spec.RealmEventConfig.AdminEventsEnabled,
EnabledEventTypes: realm.Spec.RealmEventConfig.EnabledEventTypes,
EventsEnabled: realm.Spec.RealmEventConfig.EventsEnabled,
EventsExpiration: realm.Spec.RealmEventConfig.EventsExpiration,
EventsListeners: realm.Spec.RealmEventConfig.EventsListeners,
}); err != nil {
return fmt.Errorf("failed to set realm event config: %w", err)
}
}
settings := adapter.RealmSettings{
FrontendURL: realm.Spec.FrontendURL,
DisplayHTMLName: realm.Spec.DisplayHTMLName,
DisplayName: realm.Spec.DisplayName,
}
if realm.Spec.Themes != nil {
settings.Themes = &adapter.RealmThemes{
EmailTheme: realm.Spec.Themes.EmailTheme,
AdminConsoleTheme: realm.Spec.Themes.AdminConsoleTheme,
AccountTheme: realm.Spec.Themes.AccountTheme,
LoginTheme: realm.Spec.Themes.LoginTheme,
}
}
if realm.Spec.Localization != nil {
settings.Themes.InternationalizationEnabled = realm.Spec.Localization.InternationalizationEnabled
}
if realm.Spec.BrowserSecurityHeaders != nil {
settings.BrowserSecurityHeaders = realm.Spec.BrowserSecurityHeaders
}
if len(realm.Spec.PasswordPolicies) > 0 {
settings.PasswordPolicies = h.makePasswordPolicies(realm.Spec.PasswordPolicies)
}
settings.TokenSettings = adapter.ToRealmTokenSettings(realm.Spec.TokenSettings)
if err := kClient.UpdateRealmSettings(realm.Spec.RealmName, &settings); err != nil {
return errors.Wrap(err, "unable to update realm settings")
}
log.Info("Realm settings is updating done.")
return nil
}
func (h PutRealmSettings) makePasswordPolicies(policiesSpec []v1alpha1.PasswordPolicy) []adapter.PasswordPolicy {
policies := make([]adapter.PasswordPolicy, len(policiesSpec))
for i, v := range policiesSpec {
policies[i] = adapter.PasswordPolicy{Type: v.Type, Value: v.Value}
}
return policies
}