Skip to content

Commit

Permalink
[CLOUDTRUST-2298] Add api_self_account_editing_enabled and show_profi…
Browse files Browse the repository at this point in the history
…le_tab to realm configuration
  • Loading branch information
fperot74 committed Feb 24, 2020
1 parent 99fca6e commit 7e82ef5
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 8 deletions.
20 changes: 19 additions & 1 deletion configuration/dto.go
Original file line number Diff line number Diff line change
@@ -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"`
Expand All @@ -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
}
24 changes: 24 additions & 0 deletions configuration/dto_test.go
Original file line number Diff line number Diff line change
@@ -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)
})
}
14 changes: 7 additions & 7 deletions configuration/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -14,39 +13,40 @@ 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,
logger: 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)
Expand Down

0 comments on commit 7e82ef5

Please sign in to comment.