aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-09-27 20:13:55 +0300
committerRblSb <msrblsb@gmail.com>2021-09-27 20:14:36 +0300
commit1dc2722d509e578b243bfda1a675dcfdb6003941 (patch)
treedd78e7e09432177f5ea4ed8a3febbfbf0d5113ec /src
parentd3c34032ef86163d683ef22906481e0f3196ae79 (diff)
Got a bug? Write /dump to chat as admin
And open new issue with received file.
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx4
-rw-r--r--src/client/Main.hx6
-rw-r--r--src/client/Utils.hx19
-rw-r--r--src/server/Logger.hx8
-rw-r--r--src/server/Main.hx35
5 files changed, 66 insertions, 6 deletions
diff --git a/src/Types.hx b/src/Types.hx
index 90952e2..d31196d 100644
--- a/src/Types.hx
+++ b/src/Types.hx
@@ -193,6 +193,9 @@ typedef WsEvent = {
},
?togglePlaylistLock:{
isOpen:Bool
+ },
+ ?dump:{
+ data:String
}
}
@@ -230,4 +233,5 @@ enum abstract WsEventType(String) {
var ShufflePlaylist;
var UpdatePlaylist;
var TogglePlaylistLock;
+ var Dump;
}
diff --git a/src/client/Main.hx b/src/client/Main.hx
index eae0fc8..96d9ad0 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -534,6 +534,9 @@ class Main {
case TogglePlaylistLock:
setPlaylistLock(data.togglePlaylistLock.isOpen);
+
+ case Dump:
+ Utils.saveFile("dump.json", ApplicationJson, data.dump.data);
}
}
@@ -879,6 +882,9 @@ class Main {
case "flashback", "fb":
send({type: Flashback});
return false;
+ case "dump":
+ send({type: Dump});
+ return true;
}
if (matchSimpleDate.match(command)) {
send({
diff --git a/src/client/Utils.hx b/src/client/Utils.hx
index 818dfdf..2c887ba 100644
--- a/src/client/Utils.hx
+++ b/src/client/Utils.hx
@@ -1,5 +1,6 @@
package client;
+import haxe.io.Mime;
import js.Browser.document;
import js.Browser.navigator;
import js.Browser.window;
@@ -126,4 +127,22 @@ class Utils {
document.body.appendChild(input);
input.click();
}
+
+ public static function saveFile(name:String, mime:Mime, data:String):Void {
+ final blob = new js.html.Blob([data], {
+ type: mime
+ });
+ final url = URL.createObjectURL(blob);
+ final a = document.createElement("a");
+ untyped a.download = name;
+ untyped a.href = url;
+ a.onclick = function(e) {
+ e.cancelBubble = true;
+ e.stopPropagation();
+ }
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+ }
}
diff --git a/src/server/Logger.hx b/src/server/Logger.hx
index cd96d1b..f089c94 100644
--- a/src/server/Logger.hx
+++ b/src/server/Logger.hx
@@ -23,7 +23,7 @@ class Logger {
public function log(event:ServerEvent):Void {
logs.push(event);
- if (logs.length > 5000) logs.shift();
+ if (logs.length > 1000) logs.shift();
}
public function saveLog():Void {
@@ -34,7 +34,11 @@ class Logger {
File.saveContent('$folder/$name.json', Json.stringify(logs, filterNulls, "\t"));
}
- function filterNulls(key:Any, value:Any):Any {
+ public function getLogs():Array<ServerEvent> {
+ return logs;
+ }
+
+ public function filterNulls(key:Any, value:Any):Any {
#if js
if (value == null) return js.Lib.undefined;
#end
diff --git a/src/server/Main.hx b/src/server/Main.hx
index b9e9325..748c513 100644
--- a/src/server/Main.hx
+++ b/src/server/Main.hx
@@ -238,7 +238,13 @@ class Main {
function saveState():Void {
trace("Saving state...");
- final data:ServerState = {
+ final json = Json.stringify(getCurrentState(), "\t");
+ File.saveContent(statePath, json);
+ writeUsers(userList);
+ }
+
+ function getCurrentState():ServerState {
+ return {
videoList: videoList,
isPlaylistOpen: isPlaylistOpen,
itemPos: itemPos,
@@ -248,9 +254,6 @@ class Main {
paused: videoTimer.isPaused()
}
}
- final json = Json.stringify(data, "\t");
- File.saveContent(statePath, json);
- writeUsers(userList);
}
function loadState():Void {
@@ -395,6 +398,7 @@ class Main {
if (data.type == TogglePlaylistLock) return false;
if (data.type == UpdatePlaylist) return false;
if (data.type == Logout) return false;
+ if (data.type == Dump) return false;
// check if request has same field as type value
final t:String = cast data.type;
final t = t.charAt(0).toLowerCase() + t.substr(1);
@@ -811,6 +815,29 @@ class Main {
isOpen: isPlaylistOpen
}
});
+
+ case Dump:
+ if (!client.isAdmin) return;
+ final data = {
+ state: getCurrentState(),
+ clients: clients.map(client -> {
+ name: client.name,
+ id: client.id,
+ ip: clientIp(client.req),
+ isBanned: client.isBanned,
+ isAdmin: client.isAdmin,
+ isLeader: client.isLeader,
+ isUser: client.isUser,
+ }),
+ logs: logger.getLogs()
+ }
+ final json = Json.stringify(data, logger.filterNulls, "\t");
+ send(client, {
+ type: Dump,
+ dump: {
+ data: json
+ }
+ });
}
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage