diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2024-06-08 10:54:16 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2024-06-08 10:54:51 -0700 |
| commit | b8b0a6c9cb43d52aece4020163b612cfe87de898 (patch) | |
| tree | 991da47db3a976686a29f510b1421c33067fd911 /hotline/transaction_handlers.go | |
| parent | 5d87f76eeb76e4e67e5dabb2c835a640a7ab7652 (diff) | |
Add support for account login rename
Diffstat (limited to 'hotline/transaction_handlers.go')
| -rw-r--r-- | hotline/transaction_handlers.go | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go index d065122..d4269af 100644 --- a/hotline/transaction_handlers.go +++ b/hotline/transaction_handlers.go @@ -776,26 +776,44 @@ func HandleUpdateUser(cc *ClientConn, t *Transaction) (res []Transaction, err er return res, err } + // If there's only one subfield, that indicates this is a delete operation for the login in FieldData if len(subFields) == 1 { - login := decodeString(getField(FieldData, &subFields).Data) - cc.logger.Infow("DeleteUser", "login", login) - if !cc.Authorize(accessDeleteUser) { res = append(res, cc.NewErrReply(t, "You are not allowed to delete accounts.")) return res, err } + login := decodeString(getField(FieldData, &subFields).Data) + cc.logger.Infow("DeleteUser", "login", login) + if err := cc.Server.DeleteUser(login); err != nil { return res, err } continue } - login := decodeString(getField(FieldUserLogin, &subFields).Data) + // login of the account to update + var accountToUpdate, loginToRename string + + // If FieldData is included, this is a rename operation where FieldData contains the login of the existing + // account and FieldUserLogin contains the new login. + if getField(FieldData, &subFields) != nil { + loginToRename = decodeString(getField(FieldData, &subFields).Data) + } + userLogin := decodeString(getField(FieldUserLogin, &subFields).Data) + if loginToRename != "" { + accountToUpdate = loginToRename + } else { + accountToUpdate = userLogin + } - // check if the login dataFile; if so, we know we are updating an existing user - if acc, ok := cc.Server.Accounts[login]; ok { - cc.logger.Infow("UpdateUser", "login", login) + // Check if accountToUpdate has an existing account. If so, we know we are updating an existing user. + if acc, ok := cc.Server.Accounts[accountToUpdate]; ok { + if loginToRename != "" { + cc.logger.Infow("RenameUser", "prevLogin", accountToUpdate, "newLogin", userLogin) + } else { + cc.logger.Infow("UpdateUser", "login", accountToUpdate) + } // account exists, so this is an update action if !cc.Authorize(accessModifyUser) { @@ -834,13 +852,13 @@ func HandleUpdateUser(cc *ClientConn, t *Transaction) (res []Transaction, err er return res, err } } else { - cc.logger.Infow("CreateUser", "login", login) - if !cc.Authorize(accessCreateUser) { res = append(res, cc.NewErrReply(t, "You are not allowed to create new accounts.")) return res, nil } + cc.logger.Infow("CreateUser", "login", userLogin) + newAccess := accessBitmap{} copy(newAccess[:], getField(FieldUserAccess, &subFields).Data) @@ -853,7 +871,7 @@ func HandleUpdateUser(cc *ClientConn, t *Transaction) (res []Transaction, err er } } - err = cc.Server.NewUser(login, string(getField(FieldUserName, &subFields).Data), string(getField(FieldUserPassword, &subFields).Data), newAccess) + err = cc.Server.NewUser(userLogin, string(getField(FieldUserName, &subFields).Data), string(getField(FieldUserPassword, &subFields).Data), newAccess) if err != nil { return append(res, cc.NewErrReply(t, "Cannot create account because there is already an account with that login.")), nil } |