commit 681e3507fda959ee397f06bf126ecaf650160139 parent 4b93ecc7a469628d8858fb3b1ae3637d090cfad3 Author: n0tr1v <n0tr1v@protonmail.com> Date: Sat, 10 Jun 2023 03:34:23 -0700 improve errors Diffstat:
| M | pkg/database/tableChatMessages.go | | | 27 | +++++++++++++++++---------- |
| M | pkg/web/handlers/api/v1/handlers.go | | | 4 | ++-- |
| M | pkg/web/handlers/interceptors/slashInterceptor.go | | | 8 | ++------ |
3 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go @@ -178,42 +178,49 @@ func (m *ChatMessage) CanBeEdited() bool { return time.Since(m.CreatedAt) <= config.EditMessageTimeLimit } -// UserCanDelete returns either or not "user" can delete the messages "m" func (m *ChatMessage) UserCanDelete(user User) bool { + return m.UserCanDeleteErr(user) == nil +} + +// UserCanDeleteErr returns either or not "user" can delete the messages "m" +func (m *ChatMessage) UserCanDeleteErr(user User) error { // Admin can delete everything if user.IsAdmin { - return true + return nil } // room owner can delete any messages in their room if m.IsRoomOwner(user) { - return true + return nil } // User can delete PMs from user 0 if m.IsPmRecipient(user) && m.User.Username == config.NullUsername { - return true + return nil } // Own messages can be deleted if not too old if m.UserID == user.ID { - return !m.TooOldToDelete() + if m.TooOldToDelete() { + return errors.New("message is too old to delete") + } + return nil } // Moderators cannot delete vetted user messages if user.IsModerator() && m.User.Vetted { - return false + return errors.New("cannot delete message of vetted user") } // Mod cannot delete admin if user.IsModerator() && m.User.IsAdmin { - return false + return errors.New("cannot delete message of admin user") } // Mod cannot delete mod if user.IsModerator() && m.User.IsModerator() { - return false + return errors.New("cannot delete message of moderator user") } // Mod can delete messages they don't own if user.IsModerator() { - return true + return nil } // Cannot delete message you don't own - return false + return errors.New("cannot delete this message") } func (m *ChatMessage) TooOldToDelete() bool { diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -393,8 +393,8 @@ func ChatDeleteMessageHandler(c echo.Context) error { return err } - if !msg.UserCanDelete(*authUser) { - return errors.New("cannot delete this message") + if err := msg.UserCanDeleteErr(*authUser); err != nil { + return err } if authUser.IsAdmin { diff --git a/pkg/web/handlers/interceptors/slashInterceptor.go b/pkg/web/handlers/interceptors/slashInterceptor.go @@ -1370,12 +1370,8 @@ func handleDeleteMsgCmd(c *command.Command) (handled bool) { return true } } - if !msg.UserCanDelete(*c.AuthUser) { - c.Err = errors.New("cannot delete this message") - return true - } - if !c.AuthUser.IsAdmin && msg.TooOldToDelete() && msg.User.Username == c.AuthUser.Username { - c.Err = errors.New("message is too old to be deleted") + if err := msg.UserCanDeleteErr(*c.AuthUser); err != nil { + c.Err = err return true } _ = msg.Delete(c.DB)