dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 54eda32440084560f9d39d0ba0fee14da5502205
parent 75ce6e09baa00c573655fe7a763c21e129724fd7
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu, 19 Jan 2023 23:43:38 -0800

admin rename command

Diffstat:
Mpkg/web/handlers/api/v1/handlers.go | 1+
Mpkg/web/handlers/api/v1/slashInterceptor.go | 39++++++++++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -44,6 +44,7 @@ var hbmtRgx = regexp.MustCompile(`^/hbmt (` + chatTs + `)$`) var chessRgx = regexp.MustCompile(`^/chess ` + optAtGUser) var inboxRgx = regexp.MustCompile(`^/inbox ` + optAtGUser + `(\s-e)?\s(?s:(.*))`) var purgeRgx = regexp.MustCompile(`^/purge ` + optAtGUserOr0) +var renameRgx = regexp.MustCompile(`^/rename ` + optAtGUser + ` ` + optAtGUser) var profileRgx = regexp.MustCompile(`^/p ` + optAtGUserOr0) var kickRgx = regexp.MustCompile(`^/(?:kick|k) ` + optAtGUser) var setUrlRgx = regexp.MustCompile(`^/seturl (.+)`) diff --git a/pkg/web/handlers/api/v1/slashInterceptor.go b/pkg/web/handlers/api/v1/slashInterceptor.go @@ -126,7 +126,8 @@ func handleAdminCmd(c *Command) (handled bool) { if c.authUser.IsAdmin { return handleSystemCmd(c) || handleSetChatRoomExternalLink(c) || - handlePurge(c) + handlePurge(c) || + handleRename(c) } return false } @@ -1446,3 +1447,39 @@ func handlePurge(c *Command) (handled bool) { } return } + +func handleRename(c *Command) (handled bool) { + if m := renameRgx.FindStringSubmatch(c.message); len(m) == 3 { + oldUsername := m[1] + newUsername := m[2] + user, err := database.GetUserByUsername(oldUsername) + if err != nil { + c.err = err + return true + } + database.NewAudit(*c.authUser, fmt.Sprintf("rename %s -> %s #%d", user.Username, newUsername, user.ID)) + + if _, err := database.ValidateUsername(newUsername, false); err != nil { + c.err = err + return true + } + + if strings.ToLower(newUsername) != strings.ToLower(oldUsername) { + if database.IsUsernameAlreadyTaken(newUsername) { + c.err = errors.New("username already taken") + return true + } + } + + managers.ActiveUsers.RemoveUser(user.ID) + user.Username = newUsername + if err := database.DB.Save(user).Error; err != nil { + c.err = err + return true + } + + c.err = ErrRedirect + return true + } + return +}