dkforest

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

chatControlsHandler.go (2852B)


      1 package v1
      2 
      3 import (
      4 	"dkforest/pkg/database"
      5 	"dkforest/pkg/utils"
      6 	hutils "dkforest/pkg/web/handlers/utils"
      7 	"github.com/labstack/echo"
      8 	"net/http"
      9 )
     10 
     11 // Handle the forms/actions in the chat controls, bottom of the page, iframe.
     12 // Such as toggle "@"/"PM"/"Ignored"/"afk"...
     13 
     14 func ChatControlsHandler(c echo.Context) error {
     15 	authUser := c.Get("authUser").(*database.User)
     16 	db := c.Get("database").(*database.DkfDB)
     17 
     18 	var data chatControlsData
     19 	data.RoomName = c.Param("roomName")
     20 	data.IsStream = utils.DoParseBool(c.Param("isStream"))
     21 	data.TogglePms = utils.DoParseInt64(c.QueryParam("pmonly"))
     22 	data.ToggleMentions = utils.DoParseBool(c.QueryParam("mentionsOnly"))
     23 	v := c.QueryParams()
     24 	if data.TogglePms != 0 {
     25 		v.Set("pmonly", utils.FormatInt64(data.TogglePms))
     26 	}
     27 	if data.ToggleMentions {
     28 		v.Set("mentionsOnly", "1")
     29 	}
     30 	data.ChatQueryParams = "?" + v.Encode()
     31 
     32 	if c.Request().Method == http.MethodPost {
     33 		return handlePost(db, c, data, authUser)
     34 	}
     35 
     36 	return c.Render(http.StatusOK, "chat-controls", data)
     37 }
     38 
     39 func handlePost(db *database.DkfDB, c echo.Context, data chatControlsData, authUser *database.User) error {
     40 	formName := c.Request().PostFormValue("formName")
     41 	switch formName {
     42 	case "toggle-hb":
     43 		return handleToggleHBPost(db, c, authUser)
     44 	case "toggle-m":
     45 		return handleToggleMPost(db, c, authUser)
     46 	case "toggle-ignored":
     47 		return handleToggleIgnoredPost(db, c, authUser)
     48 	case "afk":
     49 		return handleAfkPost(db, c, authUser)
     50 	case "update-read-marker":
     51 		if room, err := db.GetChatRoomByName(data.RoomName); err == nil {
     52 			return handleUpdateReadMarkerPost(db, c, room, authUser)
     53 		}
     54 	}
     55 	return hutils.RedirectReferer(c)
     56 }
     57 
     58 func handleToggleHBPost(db *database.DkfDB, c echo.Context, authUser *database.User) error {
     59 	if authUser.CanSeeHB() {
     60 		authUser.ToggleDisplayHellbanned(db)
     61 		database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{})
     62 	}
     63 	return hutils.RedirectReferer(c)
     64 }
     65 
     66 func handleToggleMPost(db *database.DkfDB, c echo.Context, authUser *database.User) error {
     67 	if authUser.IsModerator() {
     68 		authUser.ToggleDisplayModerators(db)
     69 		database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{})
     70 	}
     71 	return hutils.RedirectReferer(c)
     72 }
     73 
     74 func handleToggleIgnoredPost(db *database.DkfDB, c echo.Context, authUser *database.User) error {
     75 	authUser.ToggleDisplayIgnored(db)
     76 	database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{})
     77 	return hutils.RedirectReferer(c)
     78 }
     79 
     80 func handleAfkPost(db *database.DkfDB, c echo.Context, authUser *database.User) error {
     81 	authUser.ToggleAFK(db)
     82 	return hutils.RedirectReferer(c)
     83 }
     84 
     85 func handleUpdateReadMarkerPost(db *database.DkfDB, c echo.Context, room database.ChatRoom, authUser *database.User) error {
     86 	db.UpdateChatReadMarker(authUser.ID, room.ID)
     87 	return hutils.RedirectReferer(c)
     88 }