From 6e28381de77265f8b6a24cdd9c583d1d27d8d7b2 Mon Sep 17 00:00:00 2001 From: RblSb Date: Wed, 4 Mar 2020 20:41:43 +0300 Subject: Playlist config limits --- src/server/Main.hx | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/Main.hx b/src/server/Main.hx index 6a2ad82..8f71bd2 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -13,7 +13,10 @@ import js.npm.ws.Server as WSServer; import js.npm.ws.WebSocket; import js.node.http.IncomingMessage; import js.node.Http; -import Types; +import Types.Config; +import Types.UserList; +import Types.Message; +import Types.WsEvent; using StringTools; using ClientTools; using Lambda; @@ -249,6 +252,7 @@ class Main { final name = data.login.clientName; if (badNickName(name) || name.length > config.maxLoginLength || clients.getByName(name) != null) { + serverMessage(client, "usernameError"); send(client, {type: LoginError}); return; } @@ -263,7 +267,7 @@ class Main { a -> a.name == name && a.hash == hash )) client.isAdmin = true; else { - // TODO server msg type + serverMessage(client, "passwordMatchError"); send(client, {type: LoginError}); return; } @@ -310,8 +314,22 @@ class Main { if (messages.length > config.serverChatHistory) messages.shift(); broadcast(data); + case ServerMessage: case AddVideo: - if (!client.isAdmin && !isPlaylistOpen) return; + if (!client.isAdmin && !isPlaylistOpen) { + serverMessage(client, "accessError"); + return; + } + if (config.totalVideoLimit != 0 + && videoList.length >= config.totalVideoLimit) { + serverMessage(client, "totalVideoLimitError"); + return; + } + if (config.userVideoLimit != 0 + && videoList.itemsByUser(client) >= config.userVideoLimit) { + serverMessage(client, "videoLimitPerUserError"); + return; + } final item = data.addVideo.item; item.author = client.name; final local = '$localIp:$port'; @@ -319,7 +337,7 @@ class Main { item.url = item.url.replace(local, '$globalIp:$port'); } if (videoList.exists(i -> i.url == item.url)) { - // TODO send server message + serverMessage(client, "videoAlreadyExistsError"); return; } videoList.addItem(item, data.addVideo.atEnd, itemPos); @@ -486,6 +504,14 @@ class Main { }); } + function serverMessage(client:Client, textId:String):Void { + send(client, { + type: ServerMessage, serverMessage: { + textId: textId + } + }); + } + function send(client:Client, data:WsEvent):Void { client.ws.send(Json.stringify(data), null); } -- cgit v1.2.3