commit ec9a35240176fc9f8ea0370ad892205cd2962f4f
parent 55269ded18d6eb3cf693d8131a05b30f87bfffc3
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Fri, 9 Jun 2023 23:26:48 -0700
simplify room ownership check code
Diffstat:
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) ||