commit 54eda32440084560f9d39d0ba0fee14da5502205
parent 75ce6e09baa00c573655fe7a763c21e129724fd7
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Thu, 19 Jan 2023 23:43:38 -0800
admin rename command
Diffstat:
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
+}