commit fad6ade907b39f1706fd787b23da8e4e649b200b parent 480812777dfbf8c6dd699c0f47bcdf009720acb1 Author: n0tr1v <n0tr1v@protonmail.com> Date: Sat, 30 Dec 2023 01:03:20 -0500 lightweight user type for chat rendering Diffstat:
16 files changed, 229 insertions(+), 133 deletions(-)
diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go @@ -92,8 +92,8 @@ type ChatMessage struct { SkipNotify bool `gorm:"-"` } -func (m *ChatMessage) GetProfile(authUser *User) Username { - if m.ToUserID != nil && *m.ToUserID != authUser.ID { +func (m *ChatMessage) GetProfile(authUserID UserID) Username { + if m.ToUserID != nil && *m.ToUserID != authUserID { return m.ToUser.Username } return m.User.Username @@ -154,22 +154,22 @@ func (m *ChatMessage) MarshalJSON() ([]byte, error) { return json.Marshal(out) } -func (m *ChatMessage) UserCanSee(user User) bool { +func (m *ChatMessage) UserCanSee(user IUserRenderMessage) bool { // If user is not moderator, cannot see "moderators only" messages if m.Moderators && !user.IsModerator() { return false } // msg is HB and user is not hb - if m.IsHellbanned && !user.IsHellbanned { + if m.IsHellbanned && !user.GetIsHellbanned() { // Cannot see hb if you're not a mod or CanSeeHellbanned is disabled - cannotSeeHB := !(user.IsModerator() || user.CanSeeHellbanned) + cannotSeeHB := !(user.IsModerator() || user.GetCanSeeHellbanned()) // user cannot see hb OR user disabled hb display - if cannotSeeHB || !user.DisplayHellbanned { + if cannotSeeHB || !user.GetDisplayHellbanned() { return false } } // msg user is not hb || own msg || msg user is hb & user is also hb || user can see and wish to see hb - return !m.User.IsHellbanned || m.OwnMessage(user) || (m.User.IsHellbanned && user.IsHellbanned) || (user.CanSeeHB() && user.DisplayHellbanned) + return !m.User.IsHellbanned || m.OwnMessage(user.GetID()) || (m.User.IsHellbanned && user.GetIsHellbanned()) || (user.CanSeeHB() && user.GetDisplayHellbanned()) } func (m *ChatMessage) DeleteSecondsRemaining() int64 { @@ -180,26 +180,26 @@ func (m *ChatMessage) CanBeEdited() bool { return time.Since(m.CreatedAt) <= config.EditMessageTimeLimit } -func (m *ChatMessage) UserCanDelete(user User) bool { +func (m *ChatMessage) UserCanDelete(user IUserRenderMessage) bool { return m.UserCanDeleteErr(user) == nil } // UserCanDeleteErr returns either or not "user" can delete the messages "m" -func (m *ChatMessage) UserCanDeleteErr(user User) error { +func (m *ChatMessage) UserCanDeleteErr(user IUserRenderMessage) error { // Admin can delete everything - if user.IsAdmin { + if user.GetIsAdmin() { return nil } // room owner can delete any messages in their room - if m.IsRoomOwner(user) { + if m.IsRoomOwner(user.GetID()) { return nil } // User can delete PMs from user 0 - if m.IsPmRecipient(user) && m.User.Username == config.NullUsername { + if m.IsPmRecipient(user.GetID()) && m.User.Username == config.NullUsername { return nil } // Own messages can be deleted if not too old - if m.UserID == user.ID { + if m.UserID == user.GetID() { if m.TooOldToDelete() { return errors.New("message is too old to be deleted") } @@ -233,20 +233,20 @@ func (m *ChatMessage) TooOldToDelete() bool { return time.Since(m.CreatedAt) > config.EditMessageTimeLimit } -func (m *ChatMessage) OwnMessage(user User) bool { - return m.UserID == user.ID +func (m *ChatMessage) OwnMessage(userID UserID) bool { + return m.UserID == userID } func (m *ChatMessage) IsPm() bool { return m.ToUserID != nil } -func (m *ChatMessage) IsPmRecipient(user User) bool { - return m.ToUserID != nil && *m.ToUserID == user.ID +func (m *ChatMessage) IsPmRecipient(userID UserID) bool { + return m.ToUserID != nil && *m.ToUserID == userID } -func (m *ChatMessage) IsRoomOwner(user User) bool { - return m.Room.IsRoomOwner(user) +func (m *ChatMessage) IsRoomOwner(userID UserID) bool { + return m.Room.IsRoomOwner(userID) } func (m *ChatMessage) IsMe() bool { @@ -259,14 +259,14 @@ func (m *ChatMessage) TrimMe() string { var externalLinkRgx = regexp.MustCompile(`<a href="([^"]+)" rel="noopener noreferrer" target="_blank">`) -func (m *ChatMessage) MsgToDisplay(authUser *User) string { +func (m *ChatMessage) MsgToDisplay(authUser IUserRenderMessage) string { var msg string if m.IsMe() { msg = m.TrimMe() } else { msg = m.Message } - if authUser.ConfirmExternalLinks { + if authUser.GetConfirmExternalLinks() { msg = externalLinkRgx.ReplaceAllStringFunc(msg, func(s string) string { original := externalLinkRgx.FindStringSubmatch(s)[1] if strings.HasPrefix(original, "/") || strings.HasPrefix(original, "?") { diff --git a/pkg/database/tableChatRooms.go b/pkg/database/tableChatRooms.go @@ -69,8 +69,8 @@ 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) IsRoomOwner(userID UserID) bool { + return r.OwnerUserID != nil && *r.OwnerUserID == userID } func (r *ChatRoom) VerifyPasswordHash(passwordHash string) bool { @@ -108,7 +108,7 @@ func (r *ChatRoom) HasAccess(c echo.Context) (bool, string) { return false, "" } if r.Mode == UserWhitelistRoomMode { - if !r.IsRoomOwner(*authUser) { + if !r.IsRoomOwner(authUser.ID) { if !db.IsUserWhitelistedInRoom(authUser.ID, r.ID) { return false, "" } diff --git a/pkg/database/tableUsers.go b/pkg/database/tableUsers.go @@ -33,6 +33,36 @@ func (u Username) AtStr() string { return "@" + string(u) } +type IUserRenderMessage interface { + GetID() UserID + GetUsername() Username + GetRefreshRate() int64 + GetChatColor() string + GetIsIncognito() bool + GetIsHellbanned() bool + GetAFK() bool + GetAfkIndicatorEnabled() bool + GetDisplayIgnored() bool + GetDisplayModerators() bool + GetNotifyNewMessage() bool + GetNotifyTagged() bool + GetNotifyPmmed() bool + GetChatReadMarkerEnabled() bool + GetHighlightOwnMessages() bool + GetDisplayDeleteButton() bool + GetIsAdmin() bool + GetDisplayHellbanButton() bool + GetDisplayKickButton() bool + GetDisplayHellbanned() bool + GetSyntaxHighlightCode() string + GetDateFormat() string + CanSeeHB() bool + GetConfirmExternalLinks() bool + GetCanSeeHellbanned() bool + IsModerator() bool + CountUIButtons() int64 +} + // User struct an internal representation of a user for our app type User struct { ID UserID @@ -137,6 +167,30 @@ type User struct { HighlightOwnMessages bool `gorm:"-"` } +func (u *User) GetID() UserID { return u.ID } +func (u *User) GetUsername() Username { return u.Username } +func (u *User) GetRefreshRate() int64 { return u.RefreshRate } +func (u *User) GetChatColor() string { return u.ChatColor } +func (u *User) GetIsIncognito() bool { return u.IsIncognito } +func (u *User) GetIsHellbanned() bool { return u.IsHellbanned } +func (u *User) GetAFK() bool { return u.AFK } +func (u *User) GetAfkIndicatorEnabled() bool { return u.AfkIndicatorEnabled } +func (u *User) GetDisplayIgnored() bool { return u.DisplayIgnored } +func (u *User) GetDisplayModerators() bool { return u.DisplayModerators } +func (u *User) GetNotifyNewMessage() bool { return u.NotifyNewMessage } +func (u *User) GetNotifyTagged() bool { return u.NotifyTagged } +func (u *User) GetNotifyPmmed() bool { return u.NotifyPmmed } +func (u *User) GetChatReadMarkerEnabled() bool { return u.ChatReadMarkerEnabled } +func (u *User) GetHighlightOwnMessages() bool { return u.HighlightOwnMessages } +func (u *User) GetDisplayDeleteButton() bool { return u.DisplayDeleteButton } +func (u *User) GetIsAdmin() bool { return u.IsAdmin } +func (u *User) GetDisplayHellbanButton() bool { return u.DisplayHellbanButton } +func (u *User) GetDisplayKickButton() bool { return u.DisplayKickButton } +func (u *User) GetDisplayHellbanned() bool { return u.DisplayHellbanned } +func (u *User) GetSyntaxHighlightCode() string { return u.SyntaxHighlightCode } +func (u *User) GetConfirmExternalLinks() bool { return u.ConfirmExternalLinks } +func (u *User) GetCanSeeHellbanned() bool { return u.CanSeeHellbanned } + const ( ThemeDefault = 0 ThemeChristmas = 1 @@ -345,6 +399,36 @@ func (d *DkfDB) GetUserByID(userID UserID) (out User, err error) { return } +func (d *DkfDB) GetUserRenderMessageByID(userID UserID) (out IUserRenderMessage, err error) { + var out1 User + err = d.db.Select(` +id, +username, +refresh_rate, +chat_color, +is_incognito, +is_hellbanned, +afk, +afk_indicator_enabled, +display_ignored, +display_moderators, +notify_new_message, +notify_tagged, +notify_pmmed, +chat_read_marker_enabled, +display_delete_button, +is_admin, +display_hellban_button, +display_kick_button, +display_hellbanned, +syntax_highlight_code, +date_format, +confirm_external_links, +can_see_hellbanned +`).First(&out1, "id = ?", userID).Error + return &out1, err +} + func (d *DkfDB) GetUserByPokerReferralToken(token string) (out User, err error) { err = d.db.First(&out, "poker_referral_token = ?", token).Error return diff --git a/pkg/managers/managers.go b/pkg/managers/managers.go @@ -31,26 +31,38 @@ type UserInfo struct { AfkIndicatorEnabled bool } -func newUserInfo(user *database.User, lastActivity *time.Time) UserInfo { +type IUserInfoUser interface { + GetID() database.UserID + GetUsername() database.Username + GetRefreshRate() int64 + GetChatColor() string + IsModerator() bool + GetIsIncognito() bool + GetIsHellbanned() bool + GetAFK() bool + GetAfkIndicatorEnabled() bool +} + +func newUserInfo(user IUserInfoUser, lastActivity *time.Time) UserInfo { return UserInfo{ - UserID: user.ID, - Username: user.Username, - RefreshRate: user.RefreshRate, - Color: user.ChatColor, + UserID: user.GetID(), + Username: user.GetUsername(), + RefreshRate: user.GetRefreshRate(), + Color: user.GetChatColor(), IsModerator: user.IsModerator(), - IsIncognito: user.IsIncognito, - IsHellbanned: user.IsHellbanned, - AfkIndicatorEnabled: user.AFK && user.AfkIndicatorEnabled, + IsIncognito: user.GetIsIncognito(), + IsHellbanned: user.GetIsHellbanned(), + AfkIndicatorEnabled: user.GetAFK() && user.GetAfkIndicatorEnabled(), LastUpdate: time.Now(), LastActivity: lastActivity, } } -func NewUserInfo(user *database.User) UserInfo { +func NewUserInfo(user IUserInfoUser) UserInfo { return newUserInfo(user, nil) } -func NewUserInfoUpdateActivity(user *database.User) UserInfo { +func NewUserInfoUpdateActivity(user IUserInfoUser) UserInfo { now := time.Now() return newUserInfo(user, &now) } diff --git a/pkg/web/handlers/api/v1/chat.go b/pkg/web/handlers/api/v1/chat.go @@ -21,21 +21,21 @@ import ( ) // VerifyMsgAuth returns either or not authUser is allowed to see msg -func VerifyMsgAuth(db *database.DkfDB, authUser *database.User, msg *database.ChatMessage) bool { +func VerifyMsgAuth(db *database.DkfDB, authUser database.IUserRenderMessage, msg *database.ChatMessage) bool { // Verify moderators channel authorization if msg.Moderators && !authUser.IsModerator() { return false } // Verify group authorization if msg.GroupID != nil { - userGroupsIDs, _ := db.GetUserRoomGroupsIDs(authUser.ID, msg.RoomID) + userGroupsIDs, _ := db.GetUserRoomGroupsIDs(authUser.GetID(), msg.RoomID) if !utils.InArr(*msg.GroupID, userGroupsIDs) { return false } } // verify PM authorization if msg.IsPm() { - if msg.UserID != authUser.ID && *msg.ToUserID != authUser.ID { + if msg.UserID != authUser.GetID() && *msg.ToUserID != authUser.GetID() { return false } } @@ -63,7 +63,7 @@ func manualPreload(db *database.DkfDB, msg *database.ChatMessage, room database. // Return true if the message passes all the user's filter. // false if the message does not and should be discarded. -func applyUserFilters(db *database.DkfDB, authUser *database.User, msg *database.ChatMessage, +func applyUserFilters(db *database.DkfDB, authUser database.IUserRenderMessage, msg *database.ChatMessage, pmUserID *database.UserID, pmOnlyQuery database.PmDisplayMode, displayHellbanned, mentionsOnlyQuery bool) bool { if pmUserID != nil { if msg.ToUserID == nil { @@ -75,38 +75,38 @@ func applyUserFilters(db *database.DkfDB, authUser *database.User, msg *database } if (pmOnlyQuery == database.PmOnly && msg.ToUser == nil) || (pmOnlyQuery == database.PmNone && msg.ToUser != nil) || - !authUser.DisplayModerators && msg.Moderators || + !authUser.GetDisplayModerators() && msg.Moderators || !displayHellbanned && msg.IsHellbanned { return false } - if !authUser.DisplayIgnored { - ignoredUsersIDs, _ := db.GetIgnoredUsersIDs(authUser.ID) + if !authUser.GetDisplayIgnored() { + ignoredUsersIDs, _ := db.GetIgnoredUsersIDs(authUser.GetID()) if utils.InArr(msg.UserID, ignoredUsersIDs) { return false } } - if mentionsOnlyQuery && !strings.Contains(msg.Message, authUser.Username.AtStr()) { + if mentionsOnlyQuery && !strings.Contains(msg.Message, authUser.GetUsername().AtStr()) { return false } return true } -func soundNotifications(msg *database.ChatMessage, authUser *database.User, renderedMsg *string) (out string) { +func soundNotifications(msg *database.ChatMessage, authUser database.IUserRenderMessage, renderedMsg *string) (out string) { var newMessageSound, taggedSound, pmSound bool - if msg.User.ID != authUser.ID && !msg.SkipNotify { + if msg.User.ID != authUser.GetID() && !msg.SkipNotify { newMessageSound = true - if strings.Contains(*renderedMsg, authUser.Username.AtStr()) { + if strings.Contains(*renderedMsg, authUser.GetUsername().AtStr()) { taggedSound = true } - if msg.IsPmRecipient(*authUser) { + if msg.IsPmRecipient(authUser.GetID()) { pmSound = true } } - if (authUser.NotifyTagged && taggedSound) || (authUser.NotifyPmmed && pmSound) { + if (authUser.GetNotifyTagged() && taggedSound) || (authUser.GetNotifyPmmed() && pmSound) { out = `<audio src="/public/mp3/sound5.mp3" autoplay></audio>` - } else if authUser.NotifyNewMessage && newMessageSound { + } else if authUser.GetNotifyNewMessage() && newMessageSound { out = `<audio src="/public/mp3/sound6.mp3" autoplay></audio>` } return @@ -279,15 +279,15 @@ Loop: return nil } - authUserTmp, err := db.GetUserByID(authUser.ID) + authUser1, err := db.GetUserRenderMessageByID(authUser.ID) if err != nil { break Loop } - authUser = &authUserTmp - managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(authUser)) + + managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(authUser1)) // Update read record - db.UpdateChatReadRecord(authUser.ID, room.ID) + db.UpdateChatReadRecord(authUser1.GetID(), room.ID) // Toggle the "http alive indicator" class to keep the dot green send(indicatorAlt.alternate()) @@ -331,7 +331,7 @@ Loop: continue } - if modalsManager.Handle(db, authUser, topic, csrf, msgTyp, send) { + if modalsManager.Handle(db, authUser1, topic, csrf, msgTyp, send) { c.Response().Flush() continue } @@ -351,8 +351,8 @@ Loop: if msgTyp.Typ == database.EditMsg { // Get all messages for the user that were created after the edited one (included) - msgs, err := db.GetChatMessages(room.ID, roomKey, authUser.Username, authUser.ID, pmUserID, pmOnlyQuery, - mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, + msgs, err := db.GetChatMessages(room.ID, roomKey, authUser1.GetUsername(), authUser1.GetID(), pmUserID, pmOnlyQuery, + mentionsOnlyQuery, displayHellbanned, authUser1.GetDisplayIgnored(), authUser1.GetDisplayModerators(), displayIgnoredMessages, 150, msgTyp.Msg.ID) if err != nil { return c.Redirect(http.StatusFound, "/") @@ -373,8 +373,8 @@ Loop: // Render the new revision of the messages in html data.Messages = msgs - data.NbButtons = authUser.CountUIButtons() - data.ReadMarker, _ = db.GetUserReadMarker(authUser.ID, room.ID) + data.NbButtons = authUser1.CountUIButtons() + data.ReadMarker, _ = db.GetUserReadMarker(authUser1.GetID(), room.ID) // Only try to redraw the read-marker if the first message // that we redraw is older than our read-marker position. @@ -385,7 +385,7 @@ Loop: readMarkerRevRef = &readMarkerRev } - send(RenderMessages(authUser, data, csrf, nullUsername, readMarkerRevRef, true)) + send(RenderMessages(authUser1, data, csrf, nullUsername, readMarkerRevRef, true)) c.Response().Flush() continue @@ -398,8 +398,8 @@ Loop: } } - if !VerifyMsgAuth(db, authUser, msg) || - !applyUserFilters(db, authUser, msg, pmUserID, pmOnlyQuery, displayHellbanned, mentionsOnlyQuery) { + if !VerifyMsgAuth(db, authUser1, msg) || + !applyUserFilters(db, authUser1, msg, pmUserID, pmOnlyQuery, displayHellbanned, mentionsOnlyQuery) { continue } @@ -412,7 +412,7 @@ Loop: } readMarkerRendered := true isFirstMsg := false - renderedMsg := RenderMessage(1, *msg, authUser, data, baseTopBarURL, &readMarkerRendered, &isFirstMsg, csrf, nullUsername, &readMarkerRev, false) + renderedMsg := RenderMessage(1, *msg, authUser1, data, baseTopBarURL, &readMarkerRendered, &isFirstMsg, csrf, nullUsername, &readMarkerRev, false) // Keep track of unread messages msgsMap.Set(msg.ID) @@ -421,7 +421,7 @@ Loop: showReadMarker() // Sound notifications - send(soundNotifications(msg, authUser, &renderedMsg)) + send(soundNotifications(msg, authUser1, &renderedMsg)) c.Response().Flush() } // end of infinite loop (LOOP) diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -209,7 +209,7 @@ func shouldPlaySound(authUser *database.User, lastKnownDate string, msgs []datab if strings.Contains(msg.Message, authUser.Username.AtStr()) { taggedSound = true } - if msg.IsPmRecipient(*authUser) { + if msg.IsPmRecipient(authUser.ID) { pmSound = true } break @@ -355,13 +355,13 @@ func ChatDeleteMessageHandler(c echo.Context) error { return err } - if err := msg.UserCanDeleteErr(*authUser); err != nil { + if err := msg.UserCanDeleteErr(authUser); err != nil { logrus.Error(err) return hutils.RedirectReferer(c) } // Audit when moderator/admin deletes a message he doesn't own - if authUser.IsModerator() && !msg.OwnMessage(*authUser) && msg.User.Username != config.NullUsername { + if authUser.IsModerator() && !msg.OwnMessage(authUser.ID) && msg.User.Username != config.NullUsername { auditMsg := fmt.Sprintf(`deleted msg #%d from user "%s" #%d -> %s`, msg.ID, msg.User.Username, @@ -370,7 +370,7 @@ func ChatDeleteMessageHandler(c echo.Context) error { db.NewAudit(*authUser, auditMsg) } - if msg.OwnMessage(*authUser) && msg.RoomID == config.GeneralRoomID && !msg.IsPm() { + if msg.OwnMessage(authUser.ID) && msg.RoomID == config.GeneralRoomID && !msg.IsPm() { authUser.GeneralMessagesCount-- authUser.DoSave(db) } diff --git a/pkg/web/handlers/api/v1/messages.qtpl b/pkg/web/handlers/api/v1/messages.qtpl @@ -317,7 +317,7 @@ </div> {%- endfunc -%} -{%- func RenderMessages(AuthUser *database.User, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) -%} +{%- func RenderMessages(AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) -%} {%- code baseTopBarURL := "/api/v1/chat/top-bar/" + Data.ChatMenuData.RoomName readMarkerRendered := false @@ -331,31 +331,31 @@ {% endif %} {%- endfunc -%} -{%- func RenderMessage(idx int, e database.ChatMessage, AuthUser *database.User, +{%- func RenderMessage(idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage, Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) -%} - {%- if e.UserCanSee(*AuthUser) -%} - {%- if AuthUser.ChatReadMarkerEnabled && e.CreatedAt.Before(Data.ReadMarker.ReadAt) && !*readMarkerRendered && !isEdit%} + {%- if e.UserCanSee(AuthUser) -%} + {%- if AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.Before(Data.ReadMarker.ReadAt) && !*readMarkerRendered && !isEdit%} <div class="read-marker read-marker-0"{% if idx == 0 %} style="display:none;"{% endif %}></div> {%- code *readMarkerRendered = true -%} - {%- elseif AuthUser.ChatReadMarkerEnabled && e.CreatedAt.After(Data.ReadMarker.ReadAt) && !*readMarkerRendered && isEdit && readMarkerRev != nil -%} + {%- elseif AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.After(Data.ReadMarker.ReadAt) && !*readMarkerRendered && isEdit && readMarkerRev != nil -%} <style>.read-marker-{%d (*readMarkerRev) %}{display:none !important;}</style> {%- code *readMarkerRev++ -%} <div class="read-marker read-marker-{%d *readMarkerRev %}"></div> {%- code *readMarkerRendered = true -%} {% endif %} <div id="msgid-{%s e.UUID %}" class="msgidc-{%s e.UUID %}-{%dl e.Rev %} msg - {%- if (e.User.IsHellbanned || e.IsHellbanned) && AuthUser.DisplayHellbanned %} hb-row - {%- elseif AuthUser.ID == e.User.ID && AuthUser.HighlightOwnMessages %} own-highlight{%- endif -%} + {%- if (e.User.IsHellbanned || e.IsHellbanned) && AuthUser.GetDisplayHellbanned() %} hb-row + {%- elseif AuthUser.GetID() == e.User.ID && AuthUser.GetHighlightOwnMessages() %} own-highlight{%- endif -%} "> - {%- if e.UserCanDelete(*AuthUser) -%} - {%- if AuthUser.DisplayDeleteButton -%} + {%- if e.UserCanDelete(AuthUser) -%} + {%- if AuthUser.GetDisplayDeleteButton() -%} {%- if e.TooOldToDelete() -%} <button id="btn_delete_{%s e.UUID %}" class="mod-btn delete_msg_btn f-orange-clr" title="delete"></button> {%- else -%} <button id="btn_delete_{%s e.UUID %}" class="mod-btn delete_msg_btn" title="delete" style=" {%- if string(e.User.Username) != NullUsername -%} - {%- if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) -%} + {%- if (AuthUser.IsModerator() && e.UserID != AuthUser.GetID()) || AuthUser.GetIsAdmin() || e.IsRoomOwner(AuthUser.GetID()) -%} animation: {%dl e.DeleteSecondsRemaining() %}s 1s forwards orange_btn; {%- else -%} animation: {%dl e.DeleteSecondsRemaining() %}s 1s forwards hide_btn; @@ -367,8 +367,8 @@ <style>#btn_delete_{%s e.UUID %}:active { background-image: url('/api/v1/chat/messages/delete/{%s e.UUID %}'); }</style> {%- endif -%} {%- if AuthUser.IsModerator() -%} - {%- if !e.OwnMessage(*AuthUser) -%} - {%- if AuthUser.DisplayHellbanButton -%} + {%- if !e.OwnMessage(AuthUser.GetID()) -%} + {%- if AuthUser.GetDisplayHellbanButton() -%} {%- if string(e.User.Username) == NullUsername -%} <div class="spacer16"></div> {%- else -%} @@ -385,16 +385,16 @@ {%- endif -%} {%- endif -%} {%- endif -%} - {%- if AuthUser.DisplayKickButton -%} + {%- if AuthUser.GetDisplayKickButton() -%} <form method="post" action="/api/v1/users/{%s e.UserID.String() %}/kick" class="d-inline"> <input type="hidden" name="csrf" value="{%s CSRF %}" /> <button class="mod-btn k_btn f-orange-clr" title="kick"></button> </form> {%- endif -%} {%- else -%} - {%- if AuthUser.DisplayKickButton && AuthUser.DisplayHellbanButton -%} + {%- if AuthUser.GetDisplayKickButton() && AuthUser.GetDisplayHellbanButton() -%} <div class="spacer36"></div> - {%- elseif AuthUser.DisplayKickButton || AuthUser.DisplayHellbanButton -%} + {%- elseif AuthUser.GetDisplayKickButton() || AuthUser.GetDisplayHellbanButton() -%} <div class="spacer16"></div> {%- endif -%} {%- endif -%} @@ -412,7 +412,7 @@ <a href="{%s baseTopBarURL %}?quote={%s e.UUID %}{%= unesc(Data.TopBarQueryParams) %}" target="iframe1" class="date date-link" title="{%s e.CreatedAt.Format("01-02 15:04:05") %}{% if *isFirstMsg %} ({%s humanize.Time(e.CreatedAt) %}){% endif %}">{%s e.CreatedAt.Format(AuthUser.GetDateFormat()) %}</a> {% code *isFirstMsg = false %} {%- endif -%} - <a href="/u/{%s string(e.GetProfile(AuthUser)) %}" target="_blank" class="f-def-clr">-</a> + <a href="/u/{%s string(e.GetProfile(AuthUser.GetID())) %}" target="_blank" class="f-def-clr">-</a> {%- if e.System -%} <span class="sysmsg">{%= unesc(e.Message) %}</span> {%- else -%} @@ -421,7 +421,7 @@ {%- if e.ToUserID != nil -%} [{%-= fromUsername(AuthUser, Data, e, baseTopBarURL) -%} → - {%- if e.ToUser.ID == AuthUser.ID -%}<span {%= unesc(e.ToUser.GenerateChatStyle()) %}>{%s string(e.ToUser.Username) %}</span>{%- else -%}<a {%= unesc(e.ToUser.GenerateChatStyle()) %} href="{%s baseTopBarURL %}?pm={%s string(e.ToUser.Username) %}{%s Data.TopBarQueryParams %}" target="iframe1">{%s string(e.ToUser.Username) %}</a>{%- endif -%}] - + {%- if e.ToUser.ID == AuthUser.GetID() -%}<span {%= unesc(e.ToUser.GenerateChatStyle()) %}>{%s string(e.ToUser.Username) %}</span>{%- else -%}<a {%= unesc(e.ToUser.GenerateChatStyle()) %} href="{%s baseTopBarURL %}?pm={%s string(e.ToUser.Username) %}{%s Data.TopBarQueryParams %}" target="iframe1">{%s string(e.ToUser.Username) %}</a>{%- endif -%}] - {%- else -%} {%-= fromUsername(AuthUser, Data, e, baseTopBarURL) -%} {%- if !e.IsMe() -%} @@ -441,7 +441,7 @@ {% func Member(AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) %} {%- code baseTopBarURL := "/api/v1/chat/top-bar/" + Data.RoomName -%} - {%- if El.Username == AuthUser.Username -%} + {%- if El.Username == AuthUser.GetUsername() -%} <div> <span style="color: {%s El.Color %};">{%s string(El.Username) %}</span> {%- if El.AfkIndicatorEnabled -%} @@ -449,7 +449,7 @@ {%- endif -%} </div> {%- else -%} - {%- if !El.IsHellbanned || AuthUser.ID == El.UserID || (El.IsHellbanned && AuthUser.IsHellbanned) || AuthUser.DisplayHellbanned -%} + {%- if !El.IsHellbanned || AuthUser.GetID() == El.UserID || (El.IsHellbanned && AuthUser.GetIsHellbanned()) || AuthUser.GetDisplayHellbanned() -%} <div> {%- code tagType := "tag" -%} {%- if AuthUser.CanSeeHB() && El.IsHellbanned -%} @@ -458,15 +458,15 @@ {%- stripspace -%} <a href="{%s baseTopBarURL %}?{%s tagType %}={%s string(El.Username) %}{%= unesc(Data.TopBarQueryParams) %}" target="iframe1" - {% if El.IsHellbanned && AuthUser.DisplayHellbanned %}class="hb-row"{% endif %} + {% if El.IsHellbanned && AuthUser.GetDisplayHellbanned() %}class="hb-row"{% endif %} style="color: {%s El.Color %};">{%s string(El.Username[0]) %}</a> <a href="{%s baseTopBarURL %}?pm={%s string(El.Username) %}{%= unesc(Data.TopBarQueryParams) %}" target="iframe1" - {% if El.IsHellbanned && AuthUser.DisplayHellbanned %}class="hb-row"{% endif %} + {% if El.IsHellbanned && AuthUser.GetDisplayHellbanned() %}class="hb-row"{% endif %} style="color: {%s El.Color %};">{%s string(El.Username[1 : len(El.Username)-1]) %}</a> <a href="/u/{%s string(El.Username) %}" rel="noopener noreferrer" target="_blank" - {% if El.IsHellbanned && AuthUser.DisplayHellbanned %}class="hb-row"{% endif %} + {% if El.IsHellbanned && AuthUser.GetDisplayHellbanned() %}class="hb-row"{% endif %} style="color: {%s El.Color %};">{%s string(El.Username[len(El.Username)-1]) %}</a> {%- endstripspace -%} {%- if El.AfkIndicatorEnabled -%} @@ -478,7 +478,7 @@ {% endfunc %} -{%- func fromUsername(AuthUser *database.User, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) -%} +{%- func fromUsername(AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) -%} {%- code tagType := "tag" -%} {%- if El.ToUserID != nil -%} {%- code tagType = "pm" -%} @@ -487,7 +487,7 @@ {%- elseif AuthUser.IsModerator() && El.Moderators -%} {%- code tagType = "mtag" -%} {%- endif -%} - {%- if El.User.ID == AuthUser.ID -%} + {%- if El.User.ID == AuthUser.GetID() -%} {%- if El.CanBeEdited() -%}<a {%= unesc(El.User.GenerateChatStyle()) %} href="{%s baseTopBarURL %}?e={%s El.CreatedAt.Format("15:04:05") %}{%= unesc(Data.TopBarQueryParams) %}" target="iframe1">{%s string(El.User.Username) %}</a>{%- else -%}<span {%= unesc(El.User.GenerateChatStyle()) %}>{%s string(El.User.Username) %}</span>{%- endif -%} {%- else -%}<a {%= unesc(El.User.GenerateChatStyle()) %} href="{%s baseTopBarURL %}?{%s tagType %}={%s string(El.User.Username) %}{%= unesc(Data.TopBarQueryParams) %}" target="iframe1">{%s string(El.User.Username) %}</a>{%- endif -%} {%- endfunc -%} diff --git a/pkg/web/handlers/api/v1/messages.qtpl.go b/pkg/web/handlers/api/v1/messages.qtpl.go @@ -669,7 +669,7 @@ func RenderRightColumn(AuthUser *database.User, Data ChatMenuData) string { } //line messages.qtpl:320 -func StreamRenderMessages(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { +func StreamRenderMessages(qw422016 *qt422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { //line messages.qtpl:322 baseTopBarURL := "/api/v1/chat/top-bar/" + Data.ChatMenuData.RoomName readMarkerRendered := false @@ -701,7 +701,7 @@ func StreamRenderMessages(qw422016 *qt422016.Writer, AuthUser *database.User, Da } //line messages.qtpl:332 -func WriteRenderMessages(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { +func WriteRenderMessages(qq422016 qtio422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { //line messages.qtpl:332 qw422016 := qt422016.AcquireWriter(qq422016) //line messages.qtpl:332 @@ -712,7 +712,7 @@ func WriteRenderMessages(qq422016 qtio422016.Writer, AuthUser *database.User, Da } //line messages.qtpl:332 -func RenderMessages(AuthUser *database.User, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) string { +func RenderMessages(AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) string { //line messages.qtpl:332 qb422016 := qt422016.AcquireByteBuffer() //line messages.qtpl:332 @@ -727,12 +727,12 @@ func RenderMessages(AuthUser *database.User, Data ChatMessagesData, CSRF, NullUs } //line messages.qtpl:334 -func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMessage, AuthUser *database.User, +func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage, Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { //line messages.qtpl:336 - if e.UserCanSee(*AuthUser) { + if e.UserCanSee(AuthUser) { //line messages.qtpl:337 - if AuthUser.ChatReadMarkerEnabled && e.CreatedAt.Before(Data.ReadMarker.ReadAt) && !*readMarkerRendered && !isEdit { + if AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.Before(Data.ReadMarker.ReadAt) && !*readMarkerRendered && !isEdit { //line messages.qtpl:337 qw422016.N().S(` <div class="read-marker read-marker-0"`) @@ -749,7 +749,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess *readMarkerRendered = true //line messages.qtpl:340 - } else if AuthUser.ChatReadMarkerEnabled && e.CreatedAt.After(Data.ReadMarker.ReadAt) && !*readMarkerRendered && isEdit && readMarkerRev != nil { + } else if AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.After(Data.ReadMarker.ReadAt) && !*readMarkerRendered && isEdit && readMarkerRev != nil { //line messages.qtpl:340 qw422016.N().S(` <style>.read-marker-`) //line messages.qtpl:341 @@ -791,12 +791,12 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess qw422016.N().S(` msg `) //line messages.qtpl:347 - if (e.User.IsHellbanned || e.IsHellbanned) && AuthUser.DisplayHellbanned { + if (e.User.IsHellbanned || e.IsHellbanned) && AuthUser.GetDisplayHellbanned() { //line messages.qtpl:347 qw422016.N().S(` hb-row `) //line messages.qtpl:348 - } else if AuthUser.ID == e.User.ID && AuthUser.HighlightOwnMessages { + } else if AuthUser.GetID() == e.User.ID && AuthUser.GetHighlightOwnMessages() { //line messages.qtpl:348 qw422016.N().S(` own-highlight`) //line messages.qtpl:348 @@ -805,9 +805,9 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess qw422016.N().S(` "> `) //line messages.qtpl:350 - if e.UserCanDelete(*AuthUser) { + if e.UserCanDelete(AuthUser) { //line messages.qtpl:351 - if AuthUser.DisplayDeleteButton { + if AuthUser.GetDisplayDeleteButton() { //line messages.qtpl:352 if e.TooOldToDelete() { //line messages.qtpl:352 @@ -830,7 +830,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:357 if string(e.User.Username) != NullUsername { //line messages.qtpl:358 - if (AuthUser.IsModerator() && e.UserID != AuthUser.ID) || AuthUser.IsAdmin || e.IsRoomOwner(*AuthUser) { + if (AuthUser.IsModerator() && e.UserID != AuthUser.GetID()) || AuthUser.GetIsAdmin() || e.IsRoomOwner(AuthUser.GetID()) { //line messages.qtpl:358 qw422016.N().S(` animation: `) //line messages.qtpl:359 @@ -873,9 +873,9 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:369 if AuthUser.IsModerator() { //line messages.qtpl:370 - if !e.OwnMessage(*AuthUser) { + if !e.OwnMessage(AuthUser.GetID()) { //line messages.qtpl:371 - if AuthUser.DisplayHellbanButton { + if AuthUser.GetDisplayHellbanButton() { //line messages.qtpl:372 if string(e.User.Username) == NullUsername { //line messages.qtpl:372 @@ -922,7 +922,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:387 } //line messages.qtpl:388 - if AuthUser.DisplayKickButton { + if AuthUser.GetDisplayKickButton() { //line messages.qtpl:388 qw422016.N().S(` <form method="post" action="/api/v1/users/`) //line messages.qtpl:389 @@ -942,12 +942,12 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:394 } else { //line messages.qtpl:395 - if AuthUser.DisplayKickButton && AuthUser.DisplayHellbanButton { + if AuthUser.GetDisplayKickButton() && AuthUser.GetDisplayHellbanButton() { //line messages.qtpl:395 qw422016.N().S(` <div class="spacer36"></div> `) //line messages.qtpl:397 - } else if AuthUser.DisplayKickButton || AuthUser.DisplayHellbanButton { + } else if AuthUser.GetDisplayKickButton() || AuthUser.GetDisplayHellbanButton() { //line messages.qtpl:397 qw422016.N().S(` <div class="spacer16"></div> `) @@ -1022,7 +1022,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess //line messages.qtpl:414 qw422016.N().S(` <a href="/u/`) //line messages.qtpl:415 - qw422016.E().S(string(e.GetProfile(AuthUser))) + qw422016.E().S(string(e.GetProfile(AuthUser.GetID()))) //line messages.qtpl:415 qw422016.N().S(`" target="_blank" class="f-def-clr">-</a> `) @@ -1081,7 +1081,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess qw422016.N().S(` → `) //line messages.qtpl:424 - if e.ToUser.ID == AuthUser.ID { + if e.ToUser.ID == AuthUser.GetID() { //line messages.qtpl:424 qw422016.N().S(`<span `) //line messages.qtpl:424 @@ -1171,7 +1171,7 @@ func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMess } //line messages.qtpl:439 -func WriteRenderMessage(qq422016 qtio422016.Writer, idx int, e database.ChatMessage, AuthUser *database.User, +func WriteRenderMessage(qq422016 qtio422016.Writer, idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage, Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) { //line messages.qtpl:439 qw422016 := qt422016.AcquireWriter(qq422016) @@ -1183,7 +1183,7 @@ func WriteRenderMessage(qq422016 qtio422016.Writer, idx int, e database.ChatMess } //line messages.qtpl:439 -func RenderMessage(idx int, e database.ChatMessage, AuthUser *database.User, +func RenderMessage(idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage, Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) string { //line messages.qtpl:439 qb422016 := qt422016.AcquireByteBuffer() @@ -1207,7 +1207,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM baseTopBarURL := "/api/v1/chat/top-bar/" + Data.RoomName //line messages.qtpl:444 - if El.Username == AuthUser.Username { + if El.Username == AuthUser.GetUsername() { //line messages.qtpl:444 qw422016.N().S(` <div> <span style="color: `) @@ -1233,7 +1233,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM //line messages.qtpl:451 } else { //line messages.qtpl:452 - if !El.IsHellbanned || AuthUser.ID == El.UserID || (El.IsHellbanned && AuthUser.IsHellbanned) || AuthUser.DisplayHellbanned { + if !El.IsHellbanned || AuthUser.GetID() == El.UserID || (El.IsHellbanned && AuthUser.GetIsHellbanned()) || AuthUser.GetDisplayHellbanned() { //line messages.qtpl:452 qw422016.N().S(` <div> `) @@ -1264,7 +1264,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM //line messages.qtpl:459 qw422016.N().S(`"target="iframe1"`) //line messages.qtpl:461 - if El.IsHellbanned && AuthUser.DisplayHellbanned { + if El.IsHellbanned && AuthUser.GetDisplayHellbanned() { //line messages.qtpl:461 qw422016.N().S(`class="hb-row"`) //line messages.qtpl:461 @@ -1290,7 +1290,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM //line messages.qtpl:463 qw422016.N().S(`"target="iframe1"`) //line messages.qtpl:465 - if El.IsHellbanned && AuthUser.DisplayHellbanned { + if El.IsHellbanned && AuthUser.GetDisplayHellbanned() { //line messages.qtpl:465 qw422016.N().S(`class="hb-row"`) //line messages.qtpl:465 @@ -1310,7 +1310,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM //line messages.qtpl:467 qw422016.N().S(`"rel="noopener noreferrer" target="_blank"`) //line messages.qtpl:469 - if El.IsHellbanned && AuthUser.DisplayHellbanned { + if El.IsHellbanned && AuthUser.GetDisplayHellbanned() { //line messages.qtpl:469 qw422016.N().S(`class="hb-row"`) //line messages.qtpl:469 @@ -1369,7 +1369,7 @@ func Member(AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) st } //line messages.qtpl:481 -func streamfromUsername(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) { +func streamfromUsername(qw422016 *qt422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) { //line messages.qtpl:482 tagType := "tag" @@ -1391,7 +1391,7 @@ func streamfromUsername(qw422016 *qt422016.Writer, AuthUser *database.User, Data //line messages.qtpl:489 } //line messages.qtpl:490 - if El.User.ID == AuthUser.ID { + if El.User.ID == AuthUser.GetID() { //line messages.qtpl:491 if El.CanBeEdited() { //line messages.qtpl:491 @@ -1460,7 +1460,7 @@ func streamfromUsername(qw422016 *qt422016.Writer, AuthUser *database.User, Data } //line messages.qtpl:493 -func writefromUsername(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) { +func writefromUsername(qq422016 qtio422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) { //line messages.qtpl:493 qw422016 := qt422016.AcquireWriter(qq422016) //line messages.qtpl:493 @@ -1471,7 +1471,7 @@ func writefromUsername(qq422016 qtio422016.Writer, AuthUser *database.User, Data } //line messages.qtpl:493 -func fromUsername(AuthUser *database.User, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) string { +func fromUsername(AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) string { //line messages.qtpl:493 qb422016 := qt422016.AcquireByteBuffer() //line messages.qtpl:493 diff --git a/pkg/web/handlers/api/v1/topBarHandler.go b/pkg/web/handlers/api/v1/topBarHandler.go @@ -100,7 +100,7 @@ func buildCommandsList(authUser *database.User, room database.ChatRoom) (command commandsList = append(commandsList, "/wl") } // Private room owner - if room.IsRoomOwner(*authUser) { + if room.IsRoomOwner(authUser.ID) { commandsList = append(commandsList, "/addgroup") commandsList = append(commandsList, "/rmgroup") commandsList = append(commandsList, "/glock") @@ -240,7 +240,7 @@ func handleGetQuote(db *database.DkfDB, msgUUID, roomKey string, room database.C // Build prefix for /m | /pm | /g | /hbm prefix := "" if quoted.IsPm() { - toUsername := utils.Ternary(quoted.OwnMessage(*authUser), quoted.ToUser.Username, quoted.User.Username) + toUsername := utils.Ternary(quoted.OwnMessage(authUser.ID), quoted.ToUser.Username, quoted.User.Username) prefix = fmt.Sprintf(`/pm %s `, toUsername) } else if quoted.GroupID != nil { prefix = fmt.Sprintf(`/g %s `, quoted.Group.Name) diff --git a/pkg/web/handlers/chat.go b/pkg/web/handlers/chat.go @@ -316,7 +316,7 @@ func ChatDeleteHandler(c echo.Context) error { if err != nil { return c.Redirect(http.StatusFound, "/") } - if !room.IsRoomOwner(*authUser) { + if !room.IsRoomOwner(authUser.ID) { return c.Redirect(http.StatusFound, "/") } data.Room = room @@ -341,7 +341,7 @@ func RoomChatSettingsHandler(c echo.Context) error { if err != nil { return c.Redirect(http.StatusFound, "/") } - if !room.IsRoomOwner(*authUser) { + if !room.IsRoomOwner(authUser.ID) { return c.Redirect(http.StatusFound, "/") } data.Room = room diff --git a/pkg/web/handlers/interceptors/msgInterceptor.go b/pkg/web/handlers/interceptors/msgInterceptor.go @@ -88,7 +88,7 @@ type MsgInterceptor struct{} func (i MsgInterceptor) InterceptMsg(cmd *command.Command) { if cmd.Room.ReadOnly { - if !cmd.Room.IsRoomOwner(*cmd.AuthUser) { + if !cmd.Room.IsRoomOwner(cmd.AuthUser.ID) { 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 @@ -190,7 +190,7 @@ func handlePrivateRoomCmd(c *command.Command) (handled bool) { } func handlePrivateRoomOwnerCmd(c *command.Command) (handled bool) { - if c.Room.IsRoomOwner(*c.AuthUser) || c.AuthUser.IsAdmin { + if c.Room.IsRoomOwner(c.AuthUser.ID) || c.AuthUser.IsAdmin { cmd := strings.Fields(c.Message)[0] if cmdFn, found := privateRoomOwnerCmdsMap[cmd]; found { return cmdFn(c) @@ -1413,7 +1413,7 @@ func handleDeleteMsgCmd(c *command.Command) (handled bool) { if err != nil { return err } - if err := msg.UserCanDeleteErr(*c.AuthUser); err != nil { + if err := msg.UserCanDeleteErr(c.AuthUser); err != nil { return err } if msg.RoomID == config.GeneralRoomID && !msg.IsPm() { @@ -1472,7 +1472,7 @@ func handleDeleteMsgCmd(c *command.Command) (handled bool) { return true } } - if err := msg.UserCanDeleteErr(*c.AuthUser); err != nil { + if err := msg.UserCanDeleteErr(c.AuthUser); err != nil { c.Err = err return true } diff --git a/pkg/web/handlers/streamModals/codeModal.go b/pkg/web/handlers/streamModals/codeModal.go @@ -51,9 +51,9 @@ func (m *CodeModal) Css() string { return getCss() } -func (m *CodeModal) Handle(db *database.DkfDB, authUser *database.User, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { +func (m *CodeModal) Handle(db *database.DkfDB, authUser database.IUserRenderMessage, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { if topic == m.topics[0] { - send(getCodeModalHTML(m.idx, m.room.Name, csrf, msgTyp, authUser.SyntaxHighlightCode)) + send(getCodeModalHTML(m.idx, m.room.Name, csrf, msgTyp, authUser.GetSyntaxHighlightCode())) return true } else if topic == m.topics[1] { diff --git a/pkg/web/handlers/streamModals/manager.go b/pkg/web/handlers/streamModals/manager.go @@ -36,7 +36,7 @@ func (m *ModalsManager) Topics() (out []string) { } // Handle returns after the first modal that handle a specific topic -func (m *ModalsManager) Handle(db *database.DkfDB, authUser *database.User, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { +func (m *ModalsManager) Handle(db *database.DkfDB, authUser database.IUserRenderMessage, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { for _, modal := range m.modals { if utils.InArr(topic, modal.Topics()) { if modal.Handle(db, authUser, topic, csrf, msgTyp, send) { diff --git a/pkg/web/handlers/streamModals/purgeModal.go b/pkg/web/handlers/streamModals/purgeModal.go @@ -35,7 +35,7 @@ func (m *PurgeModal) Css() string { return getPurgeModalCss() } -func (m *PurgeModal) Handle(db *database.DkfDB, authUser *database.User, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { +func (m *PurgeModal) Handle(db *database.DkfDB, authUser database.IUserRenderMessage, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool { if topic == m.topics[0] { send(getPurgeModalHTML(db, m.idx, m.room.Name, csrf, msgTyp)) return true diff --git a/pkg/web/handlers/streamModals/streamModal.go b/pkg/web/handlers/streamModals/streamModal.go @@ -8,7 +8,7 @@ type IStreamModal interface { // Topics returns all the topics the modal is interested in Topics() []string // Handle a stream message - Handle(db *database.DkfDB, authUser *database.User, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool + Handle(db *database.DkfDB, authUser database.IUserRenderMessage, topic, csrf string, msgTyp database.ChatMessageType, send func(string)) bool // Implement interceptor Show(database.UserID, database.RoomID, database.ChatMessageType) Hide(database.UserID, database.RoomID)