dkforest

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

commit f2c4247d8462c0549d532eea9205e0cd32f36743
parent 3e8457795c3dbea00742fd692a5a8f1c7bf486fa
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Fri, 26 May 2023 04:05:52 -0700

simplify code

Diffstat:
Mpkg/database/database.go | 2+-
Mpkg/database/tableChatMessages.go | 20++++++++++++++++----
Mpkg/web/handlers/api/v1/handlers.go | 32++++++++++++++++++++------------
Mpkg/web/handlers/handlers.go | 20++++++++------------
4 files changed, 45 insertions(+), 29 deletions(-)

diff --git a/pkg/database/database.go b/pkg/database/database.go @@ -100,7 +100,7 @@ type IDkfDB interface { DoCreateSession(userID UserID, userAgent string) Session GetActiveUserSessions(userID UserID) (out []Session) GetCategories() (out []CategoriesResult, err error) - GetChatMessages(roomID RoomID, username Username, userID UserID, displayPms PmDisplayMode, mentionsOnly, displayHellbanned, displayIgnored, displayModerators, displayIgnoredMessages bool, minID1 int64) (out ChatMessages, err error) + GetChatMessages(roomID RoomID, roomKey string, username Username, userID UserID, displayPms PmDisplayMode, mentionsOnly, displayHellbanned, displayIgnored, displayModerators, displayIgnoredMessages bool, minID1 int64) (out ChatMessages, err error) GetChatRoomByID(roomID RoomID) (out ChatRoom, err error) GetChatRoomByName(roomName string) (out ChatRoom, err error) GetChessSubscribers() (out []User, err error) diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go @@ -322,7 +322,9 @@ const ( PmNone ) -func (d *DkfDB) GetChatMessages(roomID RoomID, username Username, userID UserID, displayPms PmDisplayMode, mentionsOnly, displayHellbanned, displayIgnored, displayModerators, displayIgnoredMessages bool, minID1 int64) (out ChatMessages, err error) { +func (d *DkfDB) GetChatMessages(roomID RoomID, roomKey string, username Username, userID UserID, + displayPms PmDisplayMode, mentionsOnly, displayHellbanned, displayIgnored, displayModerators, + displayIgnoredMessages bool, minID1 int64) (out ChatMessages, err error) { cmp := func(t, t2 ChatMessage) bool { return t.ID > t2.ID } @@ -365,7 +367,9 @@ func (d *DkfDB) GetChatMessages(roomID RoomID, username Username, userID UserID, q1 := q.Where("is_hellbanned = 0") var out1 []ChatMessage - err = q1.Find(&out1).Error + if err = q1.Find(&out1).Error; err != nil { + return out, err + } var minID int64 if len(out1) > 0 { @@ -384,12 +388,20 @@ func (d *DkfDB) GetChatMessages(roomID RoomID, username Username, userID UserID, if minID1 > 0 { q2 = q.Where("is_hellbanned = 1") } - err = q2.Find(&out2).Error + if err = q2.Find(&out2).Error; err != nil { + return out, err + } } out = sortedMerge(out1, out2, cmp) - return + if roomKey != "" { + if err := out.DecryptAll(roomKey); err != nil { + return out, err + } + } + + return out, nil } // merge two sorted slices. The output will also be sorted. diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -155,17 +155,21 @@ func chatMessages(c echo.Context) (status int, data ChatMessagesData) { managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(authUser)) - displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned - displayIgnoredMessages := false - msgs, _ := db.GetChatMessages(room.ID, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) + roomKey := "" if room.IsProtected() { key, err := hutils.GetRoomKeyCookie(c, int64(room.ID)) if err != nil { return http.StatusForbidden, data } - if err := msgs.DecryptAll(key.Value); err != nil { - return http.StatusInternalServerError, data - } + roomKey = key.Value + } + + displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned + displayIgnoredMessages := false + msgs, err := db.GetChatMessages(room.ID, roomKey, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, + displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) + if err != nil { + return http.StatusInternalServerError, data } // Update read record @@ -294,17 +298,21 @@ func RoomNotifierHandler(c echo.Context) error { managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(authUser)) - displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned - displayIgnoredMessages := false - msgs, _ := db.GetChatMessages(roomID, authUser.Username, authUser.ID, database.PmNoFilter, false, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) + roomKey := "" if room.IsProtected() { key, err := hutils.GetRoomKeyCookie(c, int64(room.ID)) if err != nil { return c.NoContent(http.StatusForbidden) } - if err := msgs.DecryptAll(key.Value); err != nil { - return c.NoContent(http.StatusInternalServerError) - } + roomKey = key.Value + } + displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned + mentionsOnly := false + displayIgnoredMessages := false + msgs, err := db.GetChatMessages(roomID, roomKey, authUser.Username, authUser.ID, database.PmNoFilter, mentionsOnly, + displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) + if err != nil { + return c.NoContent(http.StatusInternalServerError) } var data testData diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -5074,11 +5074,9 @@ func ChatStreamMessagesHandler(c echo.Context) error { mentionsOnlyQuery := utils.DoParseBool(c.QueryParam("mentionsOnly")) displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned displayIgnoredMessages := false - msgs, _ := db.GetChatMessages(room.ID, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) - if room.IsProtected() { - if err := msgs.DecryptAll(roomKey); err != nil { - return c.Redirect(http.StatusFound, "/") - } + msgs, err := db.GetChatMessages(room.ID, roomKey, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, 0) + if err != nil { + return c.Redirect(http.StatusFound, "/") } data.Messages = msgs data.NbButtons = authUser.CountUIButtons() @@ -5142,13 +5140,11 @@ Loop: } if msgTyp.Typ == database.EditMsg { - msgs, _ := db.GetChatMessages(room.ID, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, - displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages, - msgTyp.Msg.ID) - if room.IsProtected() { - if err := msgs.DecryptAll(roomKey); err != nil { - return c.Redirect(http.StatusFound, "/") - } + msgs, err := db.GetChatMessages(room.ID, roomKey, authUser.Username, authUser.ID, pmOnlyQuery, + mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, + displayIgnoredMessages, msgTyp.Msg.ID) + if err != nil { + return c.Redirect(http.StatusFound, "/") } toHide := make([]string, len(msgs))