From 63022ea4292a0143b7ac0b8e479bd44b521ecfac Mon Sep 17 00:00:00 2001 From: CURZOLA Pierre Date: Fri, 23 Feb 2024 15:35:21 +0100 Subject: [PATCH 1/3] fix(users): reword DBMS to addon --- db/users/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/users/utils.go b/db/users/utils.go index 6bf94204..d3be88ba 100644 --- a/db/users/utils.go +++ b/db/users/utils.go @@ -16,7 +16,7 @@ import ( var ( SupportedAddons = []string{"PostgreSQL", "InfluxDB", "MongoDB", "MySQL"} - ErrDatabaseNotSupportUserManagement = stdErrors.New("Error: DBMS does not support user management") + ErrDatabaseNotSupportUserManagement = stdErrors.New("Error: Addon does not support user management") ) func doesDatabaseHandleUserManagement(ctx context.Context, app, addonUUID string) (bool, error) { From b4edee70667f14dbf6b7fc827a0a0d514edbe104 Mon Sep 17 00:00:00 2001 From: CURZOLA Pierre Date: Fri, 23 Feb 2024 15:35:42 +0100 Subject: [PATCH 2/3] fix(users): print a message at user deletion --- db/users/delete.go | 1 + 1 file changed, 1 insertion(+) diff --git a/db/users/delete.go b/db/users/delete.go index c7e27bdf..3248c092 100644 --- a/db/users/delete.go +++ b/db/users/delete.go @@ -52,5 +52,6 @@ func DeleteUser(ctx context.Context, app, addonUUID, username string) error { if err != nil { return errors.Wrapf(ctx, err, "delete given user from database %v", username) } + io.Statusf("User %v has been deleted\n", username) return nil } From 8f92e0d7120af45d7f91060f6a213cabc4d93bb3 Mon Sep 17 00:00:00 2001 From: CURZOLA Pierre Date: Fri, 23 Feb 2024 15:36:09 +0100 Subject: [PATCH 3/3] fix(users): check before send update request if user is protected --- db/users/update.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/db/users/update.go b/db/users/update.go index d6456969..bcec8026 100644 --- a/db/users/update.go +++ b/db/users/update.go @@ -31,22 +31,25 @@ func UpdateUser(ctx context.Context, app, addonUUID, username string) error { if err != nil { return errors.Wrap(ctx, err, "get Scalingo client") } + l, err := c.DatabaseListUsers(ctx, app, addonUUID) if err != nil { return errors.Wrap(ctx, err, "list the database's users") } - - // Check if the user exists - var userExists bool - for _, user := range l { - if user.Name == username { - userExists = true + // Check if the userParam exists and is not protected + var user *scalingo.DatabaseUser + for _, u := range l { + if u.Name == username { + user = &u break } } - if !userExists { + if user == nil { return errors.New(ctx, fmt.Sprintf("User \"%s\" does not exist", username)) } + if user.Protected { + return errors.New(ctx, fmt.Sprintf("User \"%s\" is protected", username)) + } password, confirmedPassword, err := askForPasswordWithRetry(ctx, 3) if err != nil { @@ -61,12 +64,12 @@ func UpdateUser(ctx context.Context, app, addonUUID, username string) error { confirmedPassword = password } - user := scalingo.DatabaseUpdateUserParam{ + userUpdateParam := scalingo.DatabaseUpdateUserParam{ DatabaseID: addonUUID, Password: password, PasswordConfirmation: confirmedPassword, } - databaseUsers, err := c.DatabaseUpdateUser(ctx, app, addonUUID, username, user) + databaseUsers, err := c.DatabaseUpdateUser(ctx, app, addonUUID, username, userUpdateParam) if err != nil { return errors.Wrap(ctx, err, "update password of the given database user") }