dkforest

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

commit a2f3a7366469a852d1ede4356a6aec70a10f1eab
parent 87295b51c6984d57e80e167e35c38513e07d8c16
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 23 May 2023 22:10:27 -0700

prevent users from having more than 15 streams open at the time

Diffstat:
Mpkg/web/handlers/handlers.go | 36++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+), 0 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -36,6 +36,7 @@ import ( "sort" "strconv" "strings" + "sync" "time" "unicode/utf8" @@ -4823,6 +4824,21 @@ func ChessGameHandler(c echo.Context) error { close(quit1) }) + usersStreamsMapMtx.Lock() + usersStreamsMap[authUser.ID] += 1 + usersStreamsMapMtx.Unlock() + defer func() { + usersStreamsMapMtx.Lock() + usersStreamsMap[authUser.ID] -= 1 + usersStreamsMapMtx.Unlock() + }() + usersStreamsMapMtx.RLock() + if usersStreamsMap[authUser.ID] > userMaxStream { + usersStreamsMapMtx.RUnlock() + return nil + } + usersStreamsMapMtx.RUnlock() + c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8) c.Response().WriteHeader(http.StatusOK) c.Response().Header().Set("Transfer-Encoding", "chunked") @@ -4908,6 +4924,11 @@ func ChatStreamMenuHandler(c echo.Context) error { return c.HTML(http.StatusOK, s) } +const userMaxStream = 15 + +var usersStreamsMap = make(map[database.UserID]int64) +var usersStreamsMapMtx sync.RWMutex + func ChatStreamMessagesHandler(c echo.Context) error { db := c.Get("database").(*database.DkfDB) authUser := c.Get("authUser").(*database.User) @@ -4941,6 +4962,21 @@ func ChatStreamMessagesHandler(c echo.Context) error { close(quit1) }) + usersStreamsMapMtx.Lock() + usersStreamsMap[authUser.ID] += 1 + usersStreamsMapMtx.Unlock() + defer func() { + usersStreamsMapMtx.Lock() + usersStreamsMap[authUser.ID] -= 1 + usersStreamsMapMtx.Unlock() + }() + usersStreamsMapMtx.RLock() + if usersStreamsMap[authUser.ID] > userMaxStream { + usersStreamsMapMtx.RUnlock() + return nil + } + usersStreamsMapMtx.RUnlock() + c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8) c.Response().WriteHeader(http.StatusOK) c.Response().Header().Set("Transfer-Encoding", "chunked")