From 7e82ef52dba31db8562e67b969444982161530d6 Mon Sep 17 00:00:00 2001 From: Francis PEROT Date: Mon, 24 Feb 2020 09:40:12 +0100 Subject: [PATCH] [CLOUDTRUST-2298] Add api_self_account_editing_enabled and show_profile_tab to realm configuration --- configuration/dto.go | 20 +++++++++++++++++++- configuration/dto_test.go | 24 ++++++++++++++++++++++++ configuration/module.go | 14 +++++++------- 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 configuration/dto_test.go diff --git a/configuration/dto.go b/configuration/dto.go index 675a605..07f6160 100644 --- a/configuration/dto.go +++ b/configuration/dto.go @@ -1,15 +1,19 @@ package configuration +import "encoding/json" + // RealmConfiguration struct type RealmConfiguration struct { DefaultClientID *string `json:"default_client_id,omitempty"` DefaultRedirectURI *string `json:"default_redirect_uri,omitempty"` APISelfAuthenticatorDeletionEnabled *bool `json:"api_self_authenticator_deletion_enabled,omitempty"` APISelfPasswordChangeEnabled *bool `json:"api_self_password_change_enabled,omitempty"` - APISelfMailEditingEnabled *bool `json:"api_self_mail_editing_enabled,omitempty"` + DeprecatedAPISelfMailEditingEnabled *bool `json:"api_self_mail_editing_enabled,omitempty"` + APISelfAccountEditingEnabled *bool `json:"api_self_account_editing_enabled,omitempty"` APISelfAccountDeletionEnabled *bool `json:"api_self_account_deletion_enabled,omitempty"` ShowAuthenticatorsTab *bool `json:"show_authenticators_tab,omitempty"` ShowPasswordTab *bool `json:"show_password_tab,omitempty"` + ShowProfileTab *bool `json:"show_profile_tab,omitempty"` ShowMailEditing *bool `json:"show_mail_editing,omitempty"` ShowAccountDeletionButton *bool `json:"show_account_deletion_button,omitempty"` RegisterExecuteActions *[]string `json:"register_execute_actions,omitempty"` @@ -25,3 +29,17 @@ type Authorization struct { TargetRealmID *string `json:"target_realm_id,omitempty"` TargetGroupName *string `json:"target_group_name,omitempty"` } + +// NewRealmConfiguration returns the realm configuration from its JSON representation +func NewRealmConfiguration(confJSON string) (RealmConfiguration, error) { + var conf RealmConfiguration + var err = json.Unmarshal([]byte(confJSON), &conf) + if err != nil { + return conf, err + } + if conf.DeprecatedAPISelfMailEditingEnabled != nil && conf.APISelfAccountEditingEnabled == nil { + conf.APISelfAccountEditingEnabled = conf.DeprecatedAPISelfMailEditingEnabled + } + conf.DeprecatedAPISelfMailEditingEnabled = nil + return conf, nil +} diff --git a/configuration/dto_test.go b/configuration/dto_test.go new file mode 100644 index 0000000..d66d687 --- /dev/null +++ b/configuration/dto_test.go @@ -0,0 +1,24 @@ +package configuration + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNewRealmConfiguration(t *testing.T) { + t.Run("Invalid JSON", func(t *testing.T) { + var _, err = NewRealmConfiguration(`{`) + assert.NotNil(t, err) + }) + t.Run("Has deprecated field, new field not set", func(t *testing.T) { + var conf, _ = NewRealmConfiguration(`{"api_self_mail_editing_enabled":true}`) + assert.Nil(t, conf.DeprecatedAPISelfMailEditingEnabled) + assert.True(t, *conf.APISelfAccountEditingEnabled) + }) + t.Run("Has deprecated field, new field already set", func(t *testing.T) { + var conf, _ = NewRealmConfiguration(`{"api_self_mail_editing_enabled":true, "api_self_account_editing_enabled":false}`) + assert.Nil(t, conf.DeprecatedAPISelfMailEditingEnabled) + assert.False(t, *conf.APISelfAccountEditingEnabled) + }) +} diff --git a/configuration/module.go b/configuration/module.go index 2db568d..34a0c49 100644 --- a/configuration/module.go +++ b/configuration/module.go @@ -3,7 +3,6 @@ package configuration import ( "context" "database/sql" - "encoding/json" "github.com/cloudtrust/common-service/database/sqltypes" "github.com/cloudtrust/common-service/log" @@ -14,12 +13,13 @@ const ( selectAllAuthzStmt = `SELECT realm_id, group_name, action, target_realm_id, target_group_name FROM authorizations;` ) +// ConfigurationReaderDBModule struct type ConfigurationReaderDBModule struct { db sqltypes.CloudtrustDB logger log.Logger } -// NewConfigurationDBModule returns a ConfigurationDB module. +// NewConfigurationReaderDBModule returns a ConfigurationDB module. func NewConfigurationReaderDBModule(db sqltypes.CloudtrustDB, logger log.Logger) *ConfigurationReaderDBModule { return &ConfigurationReaderDBModule{ db: db, @@ -27,26 +27,26 @@ func NewConfigurationReaderDBModule(db sqltypes.CloudtrustDB, logger log.Logger) } } +// GetConfiguration returns a realm configuration func (c *ConfigurationReaderDBModule) GetConfiguration(ctx context.Context, realmID string) (RealmConfiguration, error) { var configJSON string - var config = RealmConfiguration{} row := c.db.QueryRow(selectConfigStmt, realmID) switch err := row.Scan(&configJSON); err { case sql.ErrNoRows: c.logger.Warn(ctx, "msg", "Realm Configuration not found in DB", "error", err.Error()) - return config, err + return RealmConfiguration{}, err default: if err != nil { - return config, err + return RealmConfiguration{}, err } - err = json.Unmarshal([]byte(configJSON), &config) - return config, err + return NewRealmConfiguration(configJSON) } } +// GetAuthorizations returns authorizations func (c *ConfigurationReaderDBModule) GetAuthorizations(ctx context.Context) ([]Authorization, error) { // Get Authorizations from DB rows, err := c.db.Query(selectAllAuthzStmt)