dkforest

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

commit 99fc0c9a2c88041ced5632181daa1a7d5e231549
parent f7ca88fd4ebfecedb1afc02a680e1935b9f82af9
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Thu, 22 Jun 2023 09:20:58 -0700

simplify code

Diffstat:
Mpkg/web/handlers/admin.go | 33+++++++++++++++++----------------
Mpkg/web/handlers/api/v1/chatControlsHandler.go | 13+++++++------
Mpkg/web/handlers/api/v1/handlers.go | 48++++++++++++++++++++++++------------------------
Mpkg/web/handlers/chat.go | 4++--
Mpkg/web/handlers/chess.go | 10+++++-----
Mpkg/web/handlers/forum.go | 30+++++++++++++++---------------
Mpkg/web/handlers/links.go | 28++++++++++++++--------------
Mpkg/web/handlers/settings.go | 56++++++++++++++++++++++++++++----------------------------
Mpkg/web/handlers/utils/utils.go | 8++++++++
9 files changed, 120 insertions(+), 110 deletions(-)

diff --git a/pkg/web/handlers/admin.go b/pkg/web/handlers/admin.go @@ -5,6 +5,7 @@ import ( "dkforest/pkg/managers" "dkforest/pkg/web/handlers/interceptors" "dkforest/pkg/web/handlers/usersStreamsManager" + hutils "dkforest/pkg/web/handlers/utils" "fmt" "github.com/jinzhu/gorm" "io" @@ -161,7 +162,7 @@ func AdminUploadsHandler(c echo.Context) error { if err := file.Delete(db); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } } @@ -182,7 +183,7 @@ func AdminFiledropsHandler(c echo.Context) error { if _, err := db.CreateFiledrop(); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "deleteFiledrop" { fileName := c.Request().PostFormValue("file_name") @@ -193,7 +194,7 @@ func AdminFiledropsHandler(c echo.Context) error { if err := file.Delete(db); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } } @@ -233,13 +234,13 @@ func AdminDeleteDownloadHandler(c echo.Context) error { downloadID, err := utils.ParseInt64(c.Param("downloadID")) if err != nil { return c.Render(http.StatusOK, "flash", - FlashResponse{"download id not found", c.Request().Referer(), "alert-danger"}) + FlashResponse{"download id not found", hutils.GetReferer(c), "alert-danger"}) } if err := db.DeleteDownloadByID(downloadID); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // AdminSettingsHandler ... @@ -265,7 +266,7 @@ func AdminSettingsHandler(c echo.Context) error { if err := open.Run(config.Global.ProjectPath()); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "saveSettings" { settings := db.GetSettings() @@ -290,7 +291,7 @@ func AdminSettingsHandler(c echo.Context) error { config.DownloadsEnabled.Store(settings.DownloadsEnabled) config.ForumEnabled.Store(settings.ForumEnabled) config.MaybeAuthEnabled.Store(settings.MaybeAuthEnabled) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } } @@ -416,14 +417,14 @@ func BackupHandler(c echo.Context) error { } }) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "toggleMaintenance" { if config.MaintenanceAtom.CAS(false, true) { logrus.Info("maintenance mode turned on") } else if config.MaintenanceAtom.CAS(true, false) { logrus.Info("maintenance mode turned off") } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } } @@ -497,17 +498,17 @@ func AdminDeleteUserHandler(c echo.Context) error { userID, err := dutils.ParseUserID(c.Param("userID")) if err != nil { return c.Render(http.StatusOK, "flash", - FlashResponse{"user id not found", c.Request().Referer(), "alert-danger"}) + FlashResponse{"user id not found", hutils.GetReferer(c), "alert-danger"}) } if userID == config.RootAdminID { return c.Render(http.StatusOK, "flash", - FlashResponse{"Root admin cannot be deleted", c.Request().Referer(), "alert-danger"}) + FlashResponse{"Root admin cannot be deleted", hutils.GetReferer(c), "alert-danger"}) } if err := db.DeleteUserByID(userID); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func IgnoredDeleteHandler(c echo.Context) error { @@ -515,7 +516,7 @@ func IgnoredDeleteHandler(c echo.Context) error { userID := dutils.DoParseUserID(c.Request().PostFormValue("user_id")) ignoredUserID := dutils.DoParseUserID(c.Request().PostFormValue("ignored_user_id")) db.UnIgnoreUser(userID, ignoredUserID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // AdminDeleteRoomHandler ... @@ -523,7 +524,7 @@ func AdminDeleteRoomHandler(c echo.Context) error { db := c.Get("database").(*database.DkfDB) id := dutils.DoParseRoomID(c.Param("roomID")) db.DeleteChatRoomByID(id) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func AdminUserSecurityLogsHandler(c echo.Context) error { @@ -590,7 +591,7 @@ func AdminEditUserHandler(c echo.Context) error { if formName == "reset_tutorial" { user.ChatTutorial = 0 user.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.Username = database.Username(c.FormValue("username")) @@ -670,7 +671,7 @@ func AdminEditUserHandler(c echo.Context) error { user.ChatFont = data.ChatFont user.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // AdminEditRoomHandler ... diff --git a/pkg/web/handlers/api/v1/chatControlsHandler.go b/pkg/web/handlers/api/v1/chatControlsHandler.go @@ -3,6 +3,7 @@ package v1 import ( "dkforest/pkg/database" "dkforest/pkg/utils" + hutils "dkforest/pkg/web/handlers/utils" "github.com/labstack/echo" "net/http" ) @@ -51,7 +52,7 @@ func handlePost(db *database.DkfDB, c echo.Context, data chatControlsData, authU return handleUpdateReadMarkerPost(db, c, room, authUser) } } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func handleToggleHBPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { @@ -60,7 +61,7 @@ func handleToggleHBPost(db *database.DkfDB, c echo.Context, authUser *database.U authUser.DoSave(db) database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func handleToggleMPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { @@ -69,23 +70,23 @@ func handleToggleMPost(db *database.DkfDB, c echo.Context, authUser *database.Us authUser.DoSave(db) database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func handleToggleIgnoredPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { authUser.DisplayIgnored = !authUser.DisplayIgnored authUser.DoSave(db) database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func handleAfkPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { authUser.AFK = !authUser.AFK authUser.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func handleUpdateReadMarkerPost(db *database.DkfDB, c echo.Context, room database.ChatRoom, authUser *database.User) error { db.UpdateChatReadMarker(authUser.ID, room.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -240,7 +240,7 @@ func UserHellbanHandler(c echo.Context) error { userID := dutils.DoParseUserID(c.Param("userID")) user, err := db.GetUserByID(userID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !user.IsHellbanned { if authUser.IsAdmin || !user.IsModerator() { @@ -249,7 +249,7 @@ func UserHellbanHandler(c echo.Context) error { managers.ActiveUsers.UpdateUserHBInRooms(managers.NewUserInfo(&user)) } } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func UserUnHellbanHandler(c echo.Context) error { @@ -258,14 +258,14 @@ func UserUnHellbanHandler(c echo.Context) error { userID := dutils.DoParseUserID(c.Param("userID")) user, err := db.GetUserByID(userID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if user.IsHellbanned { db.NewAudit(*authUser, fmt.Sprintf("unhellban %s #%d", user.Username, user.ID)) user.UnHellBan(db) managers.ActiveUsers.UpdateUserHBInRooms(managers.NewUserInfo(&user)) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func KickHandler(c echo.Context) error { @@ -274,13 +274,13 @@ func KickHandler(c echo.Context) error { userID := dutils.DoParseUserID(c.Param("userID")) user, err := db.GetUserByID(userID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if user.IsModerator() { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } _ = dutils.SilentKick(db, user, *authUser) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func SubscribeHandler(c echo.Context) error { @@ -289,10 +289,10 @@ func SubscribeHandler(c echo.Context) error { roomName := c.Param("roomName") room, err := db.GetChatRoomByName(roomName) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } _ = db.SubscribeToRoom(authUser.ID, room.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func UnsubscribeHandler(c echo.Context) error { @@ -301,10 +301,10 @@ func UnsubscribeHandler(c echo.Context) error { roomName := c.Param("roomName") room, err := db.GetChatRoomByName(roomName) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } _ = db.UnsubscribeFromRoom(authUser.ID, room.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ThreadSubscribeHandler(c echo.Context) error { @@ -313,10 +313,10 @@ func ThreadSubscribeHandler(c echo.Context) error { threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) thread, err := db.GetForumThreadByUUID(threadUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } _ = db.SubscribeToForumThread(authUser.ID, thread.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ThreadUnsubscribeHandler(c echo.Context) error { @@ -325,10 +325,10 @@ func ThreadUnsubscribeHandler(c echo.Context) error { threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) thread, err := db.GetForumThreadByUUID(threadUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } _ = db.UnsubscribeFromForumThread(authUser.ID, thread.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ChatMessageReactionHandler(c echo.Context) error { @@ -348,7 +348,7 @@ func ChatMessageReactionHandler(c echo.Context) error { _ = db.DeleteReaction(authUser.ID, msg.ID, reaction) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ChatDeleteMessageHandler(c echo.Context) error { @@ -366,7 +366,7 @@ func ChatDeleteMessageHandler(c echo.Context) error { if err := msg.UserCanDeleteErr(*authUser); err != nil { logrus.Error(err) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // Audit when moderator/admin deletes a message he doesn't own @@ -388,7 +388,7 @@ func ChatDeleteMessageHandler(c echo.Context) error { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ClubDeleteMessageHandler(c echo.Context) error { @@ -397,21 +397,21 @@ func ClubDeleteMessageHandler(c echo.Context) error { messageID := database.ForumMessageID(utils.DoParseInt64(c.Param("messageID"))) msg, err := db.GetForumMessage(messageID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if authUser.ID != msg.UserID && !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !msg.CanEdit() && !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if err := db.DeleteForumMessageByID(messageID); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func DeleteNotificationHandler(c echo.Context) error { @@ -421,7 +421,7 @@ func DeleteNotificationHandler(c echo.Context) error { var msg database.Notification if err := db.DB().Where("ID = ? AND user_id = ?", notificationID, authUser.ID).First(&msg).Error; err != nil { logrus.Error(err) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if err := db.DeleteNotificationByID(notificationID); err != nil { logrus.Error(err) @@ -436,7 +436,7 @@ func DeleteSessionNotificationHandler(c echo.Context) error { var msg database.SessionNotification if err := db.DB().Where("ID = ? AND session_token = ?", sessionNotificationID, authCookie.Value).First(&msg).Error; err != nil { logrus.Error(err) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if err := db.DeleteSessionNotificationByID(sessionNotificationID); err != nil { logrus.Error(err) diff --git a/pkg/web/handlers/chat.go b/pkg/web/handlers/chat.go @@ -127,7 +127,7 @@ func handlePost(db *database.DkfDB, c echo.Context, data chatData, authUser *dat case "chat-password": return handleChatPasswordPost(db, c, data, authUser) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // Logout of a protected room (delete room cookies) @@ -141,7 +141,7 @@ func handleTutorialPost(db *database.DkfDB, c echo.Context, data chatData, authU authUser.ChatTutorial++ authUser.DoSave(db) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } // Handle POST requests for chat-password, when someone tries to authenticate in a protected room providing a password. diff --git a/pkg/web/handlers/chess.go b/pkg/web/handlers/chess.go @@ -111,7 +111,7 @@ func ChessHandler(c echo.Context) error { data.Error = err.Error() return c.Render(http.StatusOK, "chess", data) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "chess", data) @@ -347,7 +347,7 @@ func ChessGameStatsHandler(c echo.Context) error { var stats *interceptors.AnalyzeResult if err := json.Unmarshal(g.DbChessGame.Stats, &stats); err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if c.Request().Method == http.MethodPost { @@ -460,12 +460,12 @@ button { if c.Request().Method == http.MethodPost { if !g.IsPlayer(authUser.ID) { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } btnSubmit := c.Request().PostFormValue("btn_submit") if btnSubmit == "resign-cancel" { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if btnSubmit == "resign" { @@ -502,7 +502,7 @@ button { logrus.Error(err) } } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } htmlTmpl := cssReset + interceptors.ChessCSS + ` diff --git a/pkg/web/handlers/forum.go b/pkg/web/handlers/forum.go @@ -117,15 +117,15 @@ func ThreadEditHandler(c echo.Context) error { } authUser := c.Get("authUser").(*database.User) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } if !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) thread, err := db.GetForumThreadByUUID(threadUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data editForumThreadData data.Thread = thread @@ -147,16 +147,16 @@ func ThreadDeleteHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) thread, err := db.GetForumThreadByUUID(threadUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data deleteForumThreadData @@ -179,7 +179,7 @@ func ThreadReplyHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) @@ -242,7 +242,7 @@ func ThreadEditMessageHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } threadUUID := database.ForumThreadUUID(c.Param("threadUUID")) messageUUID := database.ForumMessageUUID(c.Param("messageUUID")) @@ -297,26 +297,26 @@ func ThreadDeleteMessageHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } messageUUID := database.ForumMessageUUID(c.Param("messageUUID")) msg, err := db.GetForumMessageByUUID(messageUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if authUser.ID != msg.UserID && !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !msg.CanEdit() && !authUser.IsAdmin { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data deleteForumMessageData data.Thread, err = db.GetForumThreadByID(msg.ThreadID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.Message = msg @@ -337,7 +337,7 @@ func NewThreadHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } var data newThreadData @@ -412,5 +412,5 @@ func ForumReindexHandler(c echo.Context) error { if err := db.DB().Exec(`INSERT INTO fts5_forum_messages(fts5_forum_messages) VALUES('rebuild')`).Error; err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } diff --git a/pkg/web/handlers/links.go b/pkg/web/handlers/links.go @@ -189,11 +189,11 @@ func RestoreLinkHandler(c echo.Context) error { linkUUID := c.Param("linkUUID") var link database.Link if err := db.DB().Unscoped().First(&link, "uuid = ?", linkUUID).Error; err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } db.NewAudit(*authUser, fmt.Sprintf("restore link %s", link.URL)) db.DB().Unscoped().Model(&database.Link{}).Where("id = ?", link.ID).Update("deleted_at", nil) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func ClaimLinkHandler(c echo.Context) error { @@ -405,7 +405,7 @@ func EditLinkHandler(c echo.Context) error { logrus.Error(err) } db.NewAudit(*authUser, fmt.Sprintf("create gpg for link %s", link.URL)) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "createMirror" { data.MirrorLink = c.Request().PostFormValue("mirror_link") @@ -417,7 +417,7 @@ func EditLinkHandler(c echo.Context) error { logrus.Error(err) } db.NewAudit(*authUser, fmt.Sprintf("create mirror for link %s", link.URL)) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Redirect(http.StatusFound, "/links") } @@ -431,11 +431,11 @@ func LinkDeleteHandler(c echo.Context) error { linkUUID := c.Param("linkUUID") link, err := db.GetLinkByUUID(linkUUID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !authUser.IsModerator() { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data deleteLinkData @@ -479,15 +479,15 @@ func LinkPgpDeleteHandler(c echo.Context) error { linkPgpID := utils.DoParseInt64(c.Param("linkPgpID")) linkPgp, err := db.GetLinkPgpByID(linkPgpID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } link, err := db.GetLinkByID(linkPgp.LinkID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !authUser.IsModerator() { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data deleteLinkPgpData @@ -510,15 +510,15 @@ func LinkMirrorDeleteHandler(c echo.Context) error { linkMirrorID := utils.DoParseInt64(c.Param("linkMirrorID")) linkMirror, err := db.GetLinkMirrorByID(linkMirrorID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } link, err := db.GetLinkByID(linkMirror.LinkID) if err != nil { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if !authUser.IsModerator() { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } var data deleteLinkMirrorData @@ -579,7 +579,7 @@ func LinksUploadHandler(c echo.Context) error { logrus.Error(err) } } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "links-upload", data) } @@ -677,5 +677,5 @@ func LinksReindexHandler(c echo.Context) error { logrus.Error(err) } db.DB().Exec(`delete from fts5_links where rowid in (select id from links where deleted_at is not null)`) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } diff --git a/pkg/web/handlers/settings.go b/pkg/web/handlers/settings.go @@ -182,7 +182,7 @@ func changeSettingsForm(c echo.Context, data settingsChatData) error { return c.Render(http.StatusOK, "settings.chat", data) } - return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Settings changed successfully", Redirect: c.Request().Referer()}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Settings changed successfully", Redirect: hutils.GetReferer(c)}) } func SettingsSecurityHandler(c echo.Context) error { @@ -254,7 +254,7 @@ func changeUsernameForm(c echo.Context, data settingsAccountData) error { } db.CreateSecurityLog(authUser.ID, database.UsernameChangedSecurityLog) - return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Username changed successfully", Redirect: c.Request().Referer()}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Username changed successfully", Redirect: hutils.GetReferer(c)}) } func editProfileForm(c echo.Context, data settingsAccountData) error { @@ -286,7 +286,7 @@ func editProfileForm(c echo.Context, data settingsAccountData) error { authUser.TerminateAllSessionsOnLogout = data.TerminateAllSessionsOnLogout authUser.DoSave(db) - return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Profile changed successfully", Redirect: c.Request().Referer()}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Profile changed successfully", Redirect: hutils.GetReferer(c)}) } func changeAvatarForm(c echo.Context, data settingsAccountData) error { @@ -350,7 +350,7 @@ func changeAvatarForm(c echo.Context, data settingsAccountData) error { authUser.SetAvatar(fileBytes) authUser.DoSave(db) - return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Avatar changed successfully", Redirect: c.Request().Referer()}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: "Avatar changed successfully", Redirect: hutils.GetReferer(c)}) } func SettingsChatPMHandler(c echo.Context) error { @@ -378,12 +378,12 @@ func SettingsChatPMHandler(c echo.Context) error { return c.Render(http.StatusOK, "settings.chat-pm", data) } db.AddWhitelistedUser(authUser.ID, user.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "rmWhitelist" { userID := dutils.DoParseUserID(c.Request().PostFormValue("userID")) db.RmWhitelistedUser(authUser.ID, userID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "addBlacklist" { data.AddBlacklist = database.Username(strings.TrimSpace(c.Request().PostFormValue("username"))) @@ -393,19 +393,19 @@ func SettingsChatPMHandler(c echo.Context) error { return c.Render(http.StatusOK, "settings.chat-pm", data) } db.AddBlacklistedUser(authUser.ID, user.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "rmBlacklist" { userID := dutils.DoParseUserID(c.Request().PostFormValue("userID")) db.RmBlacklistedUser(authUser.ID, userID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.PmMode = utils.Clamp(utils.DoParseInt64(c.Request().PostFormValue("pm_mode")), 0, 1) authUser.BlockNewUsersPm = utils.DoParseBool(c.Request().PostFormValue("block_new_users_pm")) authUser.PmMode = data.PmMode authUser.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func SettingsChatIgnoreHandler(c echo.Context) error { @@ -431,18 +431,18 @@ func SettingsChatIgnoreHandler(c echo.Context) error { return c.Render(http.StatusOK, "settings.chat-ignore", data) } db.IgnoreUser(authUser.ID, user.ID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "rmIgnored" { userID := dutils.DoParseUserID(c.Request().PostFormValue("userID")) db.UnIgnoreUser(authUser.ID, userID) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.PmMode = utils.Clamp(utils.DoParseInt64(c.Request().PostFormValue("pm_mode")), 0, 1) authUser.PmMode = data.PmMode authUser.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func SettingsChatSnippetsHandler(c echo.Context) error { @@ -482,22 +482,22 @@ func SettingsChatSnippetsHandler(c echo.Context) error { data.Error = err.Error() return c.Render(http.StatusOK, "settings.chat-snippets", data) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } else if formName == "rmSnippet" { snippetName := c.Request().PostFormValue("snippetName") db.DeleteSnippet(authUser.ID, snippetName) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func SettingsPublicNotesHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } var data settingsPublicNotesData data.ActiveTab = "notes" @@ -509,7 +509,7 @@ func SettingsPublicNotesHandler(c echo.Context) error { data.Error = err.Error() return c.Render(http.StatusOK, "settings.public-notes", data) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "settings.public-notes", data) @@ -519,7 +519,7 @@ func SettingsPrivateNotesHandler(c echo.Context) error { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) if !authUser.CanUseForumFn() { - return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: c.Request().Referer(), Type: "alert-danger"}) + return c.Render(http.StatusOK, "flash", FlashResponse{Message: hutils.AccountTooYoungErr.Error(), Redirect: hutils.GetReferer(c), Type: "alert-danger"}) } var data settingsPrivateNotesData data.ActiveTab = "notes" @@ -533,7 +533,7 @@ func SettingsPrivateNotesHandler(c echo.Context) error { data.Error = err.Error() return c.Render(http.StatusOK, "settings.private-notes", data) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "settings.private-notes", data) @@ -562,7 +562,7 @@ func SettingsSessionsHandler(c echo.Context) error { sessionToken := c.Request().PostFormValue("sessionToken") _ = db.DeleteUserSessionByToken(authUser.ID, sessionToken) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "settings.sessions", data) @@ -578,13 +578,13 @@ func SettingsAPIHandler(c echo.Context) error { formName := c.Request().PostFormValue("formName") btnSubmit := c.Request().PostFormValue("btn_submit") if btnSubmit == "Cancel" { - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } if formName == "confirm" { token := utils.GenerateToken16() authUser.ApiKey = token authUser.DoSave(db) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.NeedConfirm = true } @@ -646,7 +646,7 @@ func changePasswordForm(c echo.Context, data settingsPasswordData) error { return c.Render(http.StatusFound, "flash", FlashResponse{Message: "Password changed successfully", Redirect: "/login"}) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func changeDuressPasswordForm(c echo.Context, data settingsPasswordData) error { @@ -684,7 +684,7 @@ func changeDuressPasswordForm(c echo.Context, data settingsPasswordData) error { return c.Render(http.StatusFound, "flash", FlashResponse{Message: "Password changed successfully", Redirect: "/login"}) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } func SettingsUploadsHandler(c echo.Context) error { @@ -715,7 +715,7 @@ func SettingsUploadsHandler(c echo.Context) error { if err := file.Delete(db); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "settings.uploads", data) } @@ -943,7 +943,7 @@ func SettingsWebsiteHandler(c echo.Context) error { config.SilentSelfKick.Store(settings.SilentSelfKick) db.NewAudit(*authUser, fmt.Sprintf("website settings, signup: %t, forum: %t, sk: %t", settings.SignupEnabled, settings.ForumEnabled, settings.SilentSelfKick)) - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } return c.Render(http.StatusOK, "settings.website", data) @@ -961,7 +961,7 @@ func SettingsInvitationsHandler(c echo.Context) error { if _, err := db.CreateInvitation(authUser.ID); err != nil { logrus.Error(err) } - return c.Redirect(http.StatusFound, c.Request().Referer()) + return hutils.RedirectReferer(c) } data.Invitations, _ = db.GetUserUnusedInvitations(authUser.ID) @@ -1004,5 +1004,5 @@ func SettingsSecretPhraseHandler(c echo.Context) error { authUser.DoSave(db) db.CreateSecurityLog(authUser.ID, database.ChangeSecretPhraseSecurityLog) - return c.Render(http.StatusFound, "flash", FlashResponse{Message: "Secret phrase changed successfully", Redirect: c.Request().Referer()}) + return c.Render(http.StatusFound, "flash", FlashResponse{Message: "Secret phrase changed successfully", Redirect: hutils.GetReferer(c)}) } diff --git a/pkg/web/handlers/utils/utils.go b/pkg/web/handlers/utils/utils.go @@ -204,3 +204,11 @@ func CloseSignalChan(c echo.Context) <-chan struct{} { }) return ctx.Done() } + +func GetReferer(c echo.Context) string { + return c.Request().Referer() +} + +func RedirectReferer(c echo.Context) error { + return c.Redirect(http.StatusFound, GetReferer(c)) +}