dkforest

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

commit 6403dfd1f9578ea00e1034bac51d0d145ae3baad
parent 6acb4c819a1db4c179e78e332c8075c9d3b81a6d
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Wed, 11 Jan 2023 10:25:49 -0800

move code

Diffstat:
Mpkg/web/handlers/chat.go | 82+++++++++++++++++++++++++++++++++++++++++--------------------------------------
1 file changed, 43 insertions(+), 39 deletions(-)

diff --git a/pkg/web/handlers/chat.go b/pkg/web/handlers/chat.go @@ -112,45 +112,7 @@ func chatHandler(c echo.Context, redRoom bool) error { return c.Redirect(http.StatusFound, c.Request().Referer()) case "chat-password": - data.RoomPassword = c.Request().PostFormValue("password") - if authUser == nil { - data.GuestUsername = c.Request().PostFormValue("guest_username") - captchaID := c.Request().PostFormValue("captcha_id") - captchaInput := c.Request().PostFormValue("captcha") - if err := hutils.CaptchaVerifyString(c, captchaID, captchaInput); err != nil { - data.ErrCaptcha = err.Error() - return c.Render(http.StatusOK, "chat-password", data) - } - - if err := database.CanUseUsername(data.GuestUsername, false); err != nil { - data.ErrGuestUsername = err.Error() - return c.Render(http.StatusOK, "chat-password", data) - } - } - key := utils.Sha256([]byte(config.RoomPasswordSalt + data.RoomPassword))[:32] - hashedPassword := utils.Sha512([]byte(config.RoomPasswordSalt + data.RoomPassword)) - if hashedPassword != room.Password { - data.Error = "Invalid room password" - return c.Render(http.StatusOK, "chat-password", data) - } - - if authUser == nil { - password := utils.GenerateToken32() - newUser, errs := database.CreateGuestUser(data.GuestUsername, password) - if errs.HasError() { - data.ErrGuestUsername = errs.Username - return c.Render(http.StatusOK, "chat-password", data) - } - - session, err := database.CreateSession(newUser.ID, c.Request().UserAgent()) - if err != nil { - logrus.Error("Failed to create session : ", err) - } - c.SetCookie(createSessionCookie(session.Token)) - } - - hutils.CreateRoomCookie(c, int64(room.ID), hashedPassword, key) - return c.Redirect(http.StatusFound, "/chat/"+room.Name) + return handleChatPasswordPost(c, data, authUser, room) } return c.Redirect(http.StatusFound, c.Request().Referer()) @@ -165,3 +127,45 @@ func chatHandler(c echo.Context, redRoom bool) error { data.IsOfficialRoom = room.IsOfficialRoom() return c.Render(http.StatusOK, "chat", data) } + +func handleChatPasswordPost(c echo.Context, data chatData, authUser *database.User, room database.ChatRoom) error { + data.RoomPassword = c.Request().PostFormValue("password") + if authUser == nil { + data.GuestUsername = c.Request().PostFormValue("guest_username") + captchaID := c.Request().PostFormValue("captcha_id") + captchaInput := c.Request().PostFormValue("captcha") + if err := hutils.CaptchaVerifyString(c, captchaID, captchaInput); err != nil { + data.ErrCaptcha = err.Error() + return c.Render(http.StatusOK, "chat-password", data) + } + + if err := database.CanUseUsername(data.GuestUsername, false); err != nil { + data.ErrGuestUsername = err.Error() + return c.Render(http.StatusOK, "chat-password", data) + } + } + key := utils.Sha256([]byte(config.RoomPasswordSalt + data.RoomPassword))[:32] + hashedPassword := utils.Sha512([]byte(config.RoomPasswordSalt + data.RoomPassword)) + if hashedPassword != room.Password { + data.Error = "Invalid room password" + return c.Render(http.StatusOK, "chat-password", data) + } + + if authUser == nil { + password := utils.GenerateToken32() + newUser, errs := database.CreateGuestUser(data.GuestUsername, password) + if errs.HasError() { + data.ErrGuestUsername = errs.Username + return c.Render(http.StatusOK, "chat-password", data) + } + + session, err := database.CreateSession(newUser.ID, c.Request().UserAgent()) + if err != nil { + logrus.Error("Failed to create session : ", err) + } + c.SetCookie(createSessionCookie(session.Token)) + } + + hutils.CreateRoomCookie(c, int64(room.ID), hashedPassword, key) + return c.Redirect(http.StatusFound, "/chat/"+room.Name) +}