commit 6403dfd1f9578ea00e1034bac51d0d145ae3baad
parent 6acb4c819a1db4c179e78e332c8075c9d3b81a6d
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Wed, 11 Jan 2023 10:25:49 -0800
move code
Diffstat:
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)
+}