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:
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")