dkforest

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

commit ec9a35240176fc9f8ea0370ad892205cd2962f4f
parent 55269ded18d6eb3cf693d8131a05b30f87bfffc3
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Fri,  9 Jun 2023 23:26:48 -0700

simplify room ownership check code

Diffstat:
Mpkg/database/tableChatMessages.go | 6+++++-
Mpkg/database/tableChatRooms.go | 6+++++-
Mpkg/web/handlers/api/v1/handlers.go | 2+-
Mpkg/web/handlers/api/v1/messages.qtpl | 4++--
Mpkg/web/handlers/api/v1/messages.qtpl.go | 4++--
Mpkg/web/handlers/api/v1/topBarHandler.go | 4++--
Mpkg/web/handlers/handlers.go | 4++--
Mpkg/web/handlers/interceptors/msgInterceptor.go | 2+-
Mpkg/web/handlers/interceptors/slashInterceptor.go | 2+-
9 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go @@ -193,7 +193,7 @@ func (m *ChatMessage) UserCanDelete(user User) bool { return false } // if room owner, you can delete messages - if m.Room.OwnerUserID != nil && user.ID == *m.Room.OwnerUserID { + if m.Room.IsRoomOwner(user) { return true } // Mod can delete own messages @@ -223,6 +223,10 @@ func (m *ChatMessage) TooOldToDelete() bool { return time.Since(m.CreatedAt) > config.EditMessageTimeLimit } +func (m *ChatMessage) IsRoomOwner(user User) bool { + return m.Room.IsRoomOwner(user) +} + func (m *ChatMessage) IsMe() bool { return strings.HasPrefix(m.Message, "<p>/me ") } diff --git a/pkg/database/tableChatRooms.go b/pkg/database/tableChatRooms.go @@ -69,6 +69,10 @@ func (r *ChatRoom) IsOwned() bool { return r.OwnerUserID != nil } +func (r *ChatRoom) IsRoomOwner(user User) bool { + return r.OwnerUserID != nil && *r.OwnerUserID == user.ID +} + func (r *ChatRoom) VerifyPasswordHash(passwordHash string) bool { return r.Password == passwordHash } @@ -104,7 +108,7 @@ func (r *ChatRoom) HasAccess(c echo.Context) (bool, string) { return false, "" } if r.Mode == UserWhitelistRoomMode { - if r.OwnerUserID != nil && *r.OwnerUserID != authUser.ID { + if !r.IsRoomOwner(*authUser) { if !db.IsUserWhitelistedInRoom(authUser.ID, r.ID) { return false, "" } diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -412,7 +412,7 @@ func ChatDeleteMessageHandler(c echo.Context) error { db.NewAudit(*authUser, auditMsg) } } - } else if msg.Room.OwnerUserID != nil && authUser.ID == *msg.Room.OwnerUserID { // Room owner can delete messages in its room + } else if msg.Room.IsRoomOwner(*authUser) { // Room owner can delete messages in its room } else if msg.TooOldToDelete() { return c.Redirect(http.StatusFound, c.Request().Referer()) } diff --git a/pkg/web/handlers/api/v1/messages.qtpl b/pkg/web/handlers/api/v1/messages.qtpl @@ -337,7 +337,7 @@ " title="delete" style=" {%- if string(e.User.Username) != NullUsername -%} - {%- if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || (e.Room.OwnerUserID != nil && *e.Room.OwnerUserID == AuthUser.ID) -%} + {%- if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) -%} animation: {%dl e.DeleteSecondsRemaining() %}s 1s forwards orange_btn; {%- else -%} animation: {%dl e.DeleteSecondsRemaining() %}s 1s forwards hide_btn; @@ -347,7 +347,7 @@ ></button> </form> {%- endif -%} - {%- elseif (AuthUser.IsModerator() && e.TooOldToDelete() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || (e.Room.OwnerUserID != nil && *e.Room.OwnerUserID == AuthUser.ID) -%} + {%- elseif (AuthUser.IsModerator() && e.TooOldToDelete() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) -%} {%- if AuthUser.DisplayDeleteButton -%} <form method="post" action="/api/v1/chat/messages/delete/{%s e.UUID %}" class="d-inline"> <input type="hidden" name="csrf" value="{%s CSRF %}" /> diff --git a/pkg/web/handlers/api/v1/messages.qtpl.go b/pkg/web/handlers/api/v1/messages.qtpl.go @@ -777,7 +777,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:339 if string(e.User.Username) != NullUsername { //line messages.qtpl:340 - if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || (e.Room.OwnerUserID != nil && *e.Room.OwnerUserID == AuthUser.ID) { + if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) { //line messages.qtpl:340 qw422016.N().S(` animation: `) //line messages.qtpl:341 @@ -806,7 +806,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:349 } //line messages.qtpl:350 - } else if (AuthUser.IsModerator() && e.TooOldToDelete() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || (e.Room.OwnerUserID != nil && *e.Room.OwnerUserID == AuthUser.ID) { + } else if (AuthUser.IsModerator() && e.TooOldToDelete() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) { //line messages.qtpl:351 if AuthUser.DisplayDeleteButton { //line messages.qtpl:351 diff --git a/pkg/web/handlers/api/v1/topBarHandler.go b/pkg/web/handlers/api/v1/topBarHandler.go @@ -95,12 +95,12 @@ func buildCommandsList(authUser *database.User, room database.ChatRoom) (command commandsList = append(commandsList, "/hbm") // CanSeeHB } // Private room - if room.OwnerUserID != nil { + if room.IsOwned() { commandsList = append(commandsList, "/mode") commandsList = append(commandsList, "/wl") } // Private room owner - if room.OwnerUserID != nil && *room.OwnerUserID == authUser.ID { + if room.IsRoomOwner(*authUser) { commandsList = append(commandsList, "/addgroup") commandsList = append(commandsList, "/rmgroup") commandsList = append(commandsList, "/glock") diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -2436,7 +2436,7 @@ func RoomChatSettingsHandler(c echo.Context) error { if err != nil { return c.Redirect(http.StatusFound, "/") } - if room.OwnerUserID == nil || *room.OwnerUserID != authUser.ID { + if !room.IsRoomOwner(*authUser) { return c.Redirect(http.StatusFound, "/") } data.Room = room @@ -3321,7 +3321,7 @@ func ChatDeleteHandler(c echo.Context) error { if err != nil { return c.Redirect(http.StatusFound, "/") } - if room.OwnerUserID == nil || *room.OwnerUserID != authUser.ID { + if !room.IsRoomOwner(*authUser) { return c.Redirect(http.StatusFound, "/") } data.Room = room diff --git a/pkg/web/handlers/interceptors/msgInterceptor.go b/pkg/web/handlers/interceptors/msgInterceptor.go @@ -144,7 +144,7 @@ type MsgInterceptor struct{} func (i MsgInterceptor) InterceptMsg(cmd *command.Command) { if cmd.Room.ReadOnly { - if cmd.Room.OwnerUserID != nil && *cmd.Room.OwnerUserID != cmd.AuthUser.ID { + if !cmd.Room.IsRoomOwner(*cmd.AuthUser) { cmd.Err = fmt.Errorf("room is read-only") return } diff --git a/pkg/web/handlers/interceptors/slashInterceptor.go b/pkg/web/handlers/interceptors/slashInterceptor.go @@ -103,7 +103,7 @@ func handlePrivateRoomCmd(c *command.Command) (handled bool) { } func handlePrivateRoomOwnerCmd(c *command.Command) (handled bool) { - if (c.Room.OwnerUserID != nil && *c.Room.OwnerUserID == c.AuthUser.ID) || c.AuthUser.IsAdmin { + if c.Room.IsRoomOwner(*c.AuthUser) || c.AuthUser.IsAdmin { return handleAddGroupCmd(c) || handleRmGroupCmd(c) || handleLockGroupCmd(c) ||