summaryrefslogtreecommitdiffstats
path: root/server/socket-handlers/general-socket-handler.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/socket-handlers/general-socket-handler.js')
-rw-r--r--server/socket-handlers/general-socket-handler.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/server/socket-handlers/general-socket-handler.js b/server/socket-handlers/general-socket-handler.js
new file mode 100644
index 0000000..50dcd94
--- /dev/null
+++ b/server/socket-handlers/general-socket-handler.js
@@ -0,0 +1,127 @@
+const { log } = require("../../src/util");
+const { Settings } = require("../settings");
+const { sendInfo } = require("../client");
+const { checkLogin } = require("../util-server");
+const GameResolver = require("gamedig/lib/GameResolver");
+const { testChrome } = require("../monitor-types/real-browser-monitor-type");
+const fs = require("fs");
+const path = require("path");
+
+let gameResolver = new GameResolver();
+let gameList = null;
+
+/**
+ * Get a game list via GameDig
+ * @returns {object[]} list of games supported by GameDig
+ */
+function getGameList() {
+ if (gameList == null) {
+ gameList = gameResolver._readGames().games.sort((a, b) => {
+ if ( a.pretty < b.pretty ) {
+ return -1;
+ }
+ if ( a.pretty > b.pretty ) {
+ return 1;
+ }
+ return 0;
+ });
+ }
+ return gameList;
+}
+
+/**
+ * Handler for general events
+ * @param {Socket} socket Socket.io instance
+ * @param {UptimeKumaServer} server Uptime Kuma server
+ * @returns {void}
+ */
+module.exports.generalSocketHandler = (socket, server) => {
+ socket.on("initServerTimezone", async (timezone) => {
+ try {
+ checkLogin(socket);
+ log.debug("generalSocketHandler", "Timezone: " + timezone);
+ await Settings.set("initServerTimezone", true);
+ await server.setTimezone(timezone);
+ await sendInfo(socket);
+ } catch (e) {
+ log.warn("initServerTimezone", e.message);
+ }
+ });
+
+ socket.on("getGameList", async (callback) => {
+ try {
+ checkLogin(socket);
+ callback({
+ ok: true,
+ gameList: getGameList(),
+ });
+ } catch (e) {
+ callback({
+ ok: false,
+ msg: e.message,
+ });
+ }
+ });
+
+ socket.on("testChrome", (executable, callback) => {
+ try {
+ checkLogin(socket);
+ // Just noticed that await call could block the whole socket.io server!!! Use pure promise instead.
+ testChrome(executable).then((version) => {
+ callback({
+ ok: true,
+ msg: {
+ key: "foundChromiumVersion",
+ values: [ version ],
+ },
+ msgi18n: true,
+ });
+ }).catch((e) => {
+ callback({
+ ok: false,
+ msg: e.message,
+ });
+ });
+ } catch (e) {
+ callback({
+ ok: false,
+ msg: e.message,
+ });
+ }
+ });
+
+ socket.on("getPushExample", (language, callback) => {
+
+ try {
+ let dir = path.join("./extra/push-examples", language);
+ let files = fs.readdirSync(dir);
+
+ for (let file of files) {
+ if (file.startsWith("index.")) {
+ callback({
+ ok: true,
+ code: fs.readFileSync(path.join(dir, file), "utf8"),
+ });
+ return;
+ }
+ }
+ } catch (e) {
+
+ }
+
+ callback({
+ ok: false,
+ msg: "Not found",
+ });
+ });
+
+ // Disconnect all other socket clients of the user
+ socket.on("disconnectOtherSocketClients", async () => {
+ try {
+ checkLogin(socket);
+ server.disconnectAllSocketClients(socket.userID, socket.id);
+ } catch (e) {
+ log.warn("disconnectAllSocketClients", e.message);
+ }
+ });
+};