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 } 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") } 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) {