controllers/keycloakrealm/chain/realm_settings.go (61 lines of code) (raw):
package chain
import (
"context"
"github.com/pkg/errors"
keycloakApi "github.com/epam/edp-keycloak-operator/api/v1"
"github.com/epam/edp-keycloak-operator/controllers/keycloakrealm/chain/handler"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak"
"github.com/epam/edp-keycloak-operator/pkg/client/keycloak/adapter"
)
type RealmSettings struct {
next handler.RealmHandler
}
func (h RealmSettings) ServeRequest(ctx context.Context, realm *keycloakApi.KeycloakRealm, kClient keycloak.Client) error {
rLog := log.WithValues("realm name", realm.Spec.RealmName)
rLog.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 errors.Wrap(err, "unable to set realm event config")
}
}
settings := adapter.RealmSettings{
DisplayHTMLName: realm.Spec.DisplayHTMLName,
FrontendURL: realm.Spec.FrontendURL,
DisplayName: realm.Spec.DisplayName,
}
if realm.Spec.Themes != nil {
settings.Themes = &adapter.RealmThemes{
InternationalizationEnabled: realm.Spec.Themes.InternationalizationEnabled,
EmailTheme: realm.Spec.Themes.EmailTheme,
AdminConsoleTheme: realm.Spec.Themes.AdminConsoleTheme,
AccountTheme: realm.Spec.Themes.AccountTheme,
LoginTheme: realm.Spec.Themes.LoginTheme,
}
}
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")
}
rLog.Info("Realm settings is updating done.")
return nextServeOrNil(ctx, h.next, realm, kClient)
}
func (h RealmSettings) makePasswordPolicies(policiesSpec []keycloakApi.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
}