diff --git a/server/api/server-info.js b/server/api/server-info.js
index 5542406..c9b39a3 100644
--- a/server/api/server-info.js
+++ b/server/api/server-info.js
@@ -1,3 +1,7 @@
+const fs = require('fs');
+const path = require('path');
+const mime = require('mime-types');
+
const authModes = [
"free",
"confirmation",
@@ -5,9 +9,24 @@ const authModes = [
"password",
];
+function getBGMain () {
+ let bgMain = global.config.source.bgmain;
+ if (typeof bgMain === "string") {
+ if (!path.isAbsolute(bgMain))
+ bgMain = path.join(__dirname, "..", bgMain);
+ const mimetype = mime.lookup(bgMain);
+ const base64content = fs.readFileSync(bgMain, { encoding: 'base64' });
+ return `data:${mimetype};base64,${base64content}`;
+ }
+ return null;
+}
+
module.exports = {
name: global.config.server.info.name,
tag: global.config.server.info.tag,
authMode: authModes[global.config.server["auth-mode"] ?? 1],
secureMode: global.config.server.secureMode ?? false,
-};
\ No newline at end of file
+ extSource: {
+ bgmain: getBGMain(),
+ }
+};
diff --git a/server/config.json b/server/config.json
index 69727c8..8ed91ac 100644
--- a/server/config.json
+++ b/server/config.json
@@ -22,5 +22,13 @@
},
"ai": {
"apiType": "kobold"
+ },
+ "source": {
+ "bgmain": "/home/fullgream/Загрузки/21380429c504a974479d31c96a9c3c3f.jpg"
+ },
+ "rootuser": {
+ "login": "admin",
+ "password": "admin",
+ "activated": true
}
}
diff --git a/server/frontend/public/css/connect/main.css b/server/frontend/public/css/connect/main.css
index 56b1153..31dab91 100644
--- a/server/frontend/public/css/connect/main.css
+++ b/server/frontend/public/css/connect/main.css
@@ -106,7 +106,7 @@
height: 650px;
margin-left: calc(50% - 250px);
- margin-top: calc(50vh - 325px);
+ margin-top: calc(5%);
padding: 5px;
}
diff --git a/server/frontend/public/js/connect/api.js b/server/frontend/public/js/connect/api.js
index 8c2b360..5dd0e8a 100644
--- a/server/frontend/public/js/connect/api.js
+++ b/server/frontend/public/js/connect/api.js
@@ -66,12 +66,39 @@ class ApiHTML {
this.api = api;
}
- async renderAuth (authMode) {
- document.body.style.backgroundImage = "url('assets/hello/1.png')";
+ async renderAuth (authMode, bgUrl = null) {
+ bgUrl = bgUrl ?? "assets/hello/1.png";
+
+ document.body.style.backgroundImage = `url(${
+ JSON.stringify(bgUrl)
+ })`;
+ document.body.style.backgroundSize = `${screen.width}px ${screen.height}px`;
document.getElementById("server.area").innerHTML = '';
$(document.getElementById("server.area")).append(ServerAuth.authForm);
- //switch (authMode) {}
+
+ [...$.find(".auth-act-item")].forEach(authEl => {
+ const authElJQ = $(authEl);
+ const isHidden = authEl.hidden;
+ authEl.hidden = false;
+ const buttonBlock = authElJQ.find(".btn-auth-block")[0];
+ const paramsBlock = authElJQ.find(".params-auth")[0];
+
+ buttonBlock.style.marginTop = `calc(100% - ${paramsBlock.offsetHeight}px)`;
+ authEl.hidden = isHidden;
+ });
+
+ $.find("#menu-log-in")[0].onclick = function () {
+ $.find("#log-in")[0].hidden = false;
+ $.find("#register")[0].hidden = true;
+ }
+
+ $.find("#menu-register")[0].onclick = function () {
+ $.find("#log-in")[0].hidden = true;
+ $.find("#register")[0].hidden = false;
+ }
+
+ $.find("#server-code-form")[0].hidden = authMode !== "password";
}
}
@@ -97,4 +124,4 @@ export class ApiSocket {
});
return await promise;
}
-}
\ No newline at end of file
+}
diff --git a/server/frontend/public/js/connect/auth.js b/server/frontend/public/js/connect/auth.js
index e0e2b35..13d94bd 100644
--- a/server/frontend/public/js/connect/auth.js
+++ b/server/frontend/public/js/connect/auth.js
@@ -17,4 +17,75 @@ export class ServerAuth {
ServerAuth.authForm = document.createElement("div");
["auth-window"].forEach(c =>
ServerAuth.authForm.classList.add(c));
-ServerAuth.authForm.innerHTML = `
+
+
+
+
+
+
+
+
+
+
+
+
Your username into server.
+
+
+
+
+
+
+
Your password into server.
+
+
+
+
+
+
Retry password for you don't forget password.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Your username into server.
+
+
+
+
+
+
+
Your password into server.
+
+
+
+
+
+
+
+`;
diff --git a/server/frontend/public/js/connect/main.js b/server/frontend/public/js/connect/main.js
index 554b154..9ba6fa4 100644
--- a/server/frontend/public/js/connect/main.js
+++ b/server/frontend/public/js/connect/main.js
@@ -49,7 +49,7 @@ socket.run()
console.log("socket sends:", data);
document.title = data.name;
document.getElementById("server-name").innerText = data.name;
- await socket.html.renderAuth(data.authMode);
+ await socket.html.renderAuth(data.authMode, data.extSource?.bgmain ?? null);
})
.catch(err => {
console.error(err);
diff --git a/server/server.js b/server/server.js
index 3d63dcb..3d1ac09 100644
--- a/server/server.js
+++ b/server/server.js
@@ -4,173 +4,196 @@ const parser = require("./packet-parser");
const frontend = require("./frontend");
const websocket = require("./ws-handler");
const crypt = require("./crypt");
-const EventEmitter = require('events');
-const net = require('net');
-const fs = require('fs');
-const path = require('path');
+const EventEmitter = require("events");
+const net = require("net");
+const fs = require("fs");
+const path = require("path");
-const { API } = require('./api');
+const { API } = require("./api");
class Server extends EventEmitter {
- constructor () {
- super();
- this.on("config.update", ({
- oldConfig, newConfig
- }) => {
+ constructor() {
+ super();
+ this.on("config.update", ({ oldConfig, newConfig }) => {});
+ }
- });
- }
+ run(address, port) {
+ this.address = address;
+ this.port = port;
- run (address, port) {
- this.address = address;
- this.port = port;
+ const wsPort = global.config.server?.staticInfo?.wsPort ?? 57891;
+ const httpPort = global.config.server?.staticInfo?.httpPort ?? 49901;
- const wsPort = global.config.server?.staticInfo?.wsPort ?? 57891;
- const httpPort = global.config.server?.staticInfo?.httpPort ?? 49901;
+ logger.log({
+ wsPort,
+ httpPort,
+ });
- logger.log({
- wsPort, httpPort
- });
+ this.api = new API();
- this.api = new API();
+ if (global.config.server.useFrontend)
+ this.frontend = frontend("127.0.0.1", httpPort);
+ if (global.config.server.useWebSocketAPI)
+ this.websocket = websocket("127.0.0.1", wsPort, this.api);
- if (global.config.server.useFrontend)
- this.frontend = frontend("127.0.0.1", httpPort);
- if (global.config.server.useWebSocketAPI)
- this.websocket = websocket("127.0.0.1", wsPort, this.api);
+ this.server = net.createServer((srvSocket) => {
+ srvSocket.on("error", (err) => {
+ logger.log("Caught server socket error: ");
+ logger.log(err.stack);
+ });
+ });
- this.server = net.createServer((srvSocket) => {
- srvSocket.on("error", (err) => {
- logger.log("Caught server socket error: ");
- logger.log(err.stack);
- });
- });
+ function socketErrHanler(err) {
+ if (err) {
+ logger.log("Caught server socket error: ");
+ logger.log(err.stack);
+ }
+ }
- function socketErrHanler (err) {
- if (err) {
- logger.log("Caught server socket error: ");
- logger.log(err.stack);
- }
- }
-
- function socketDataHandler (data, socket) {
- socket.write(data, function(err) {
- if (err) {
- logger.log(`error: ${socket.remoteAddress} (remote) throwed: ${err.name}\n${err.stack}`);
+ function socketDataHandler(data, socket) {
+ socket.write(data, function (err) {
+ if (err) {
+ logger.log(
+ `error: ${socket.remoteAddress} (remote) throwed: ${err.name}\n${err.stack}`,
+ );
}
- });
- }
+ });
+ }
- this.server.on("connection", (socket) => {
- logger.log(`${socket.remoteAddress}${socket.remotePort} is connected`);
- socket.mainconnect = null;
+ this.server.on("connection", (socket) => {
+ logger.log(`${socket.remoteAddress}${socket.remotePort} is connected`);
+ socket.mainconnect = null;
- if (global.config.server.useWebSocketAPI) {
- socket.wsReverse = net.createConnection(wsPort, "127.0.0.1");
- socket.wsReverse.on("error", socketErrHanler);
- socket.wsReverse.on("data", (data) => socketDataHandler(data, socket));
- }
- if (global.config.server.useFrontend) {
- socket.httpReverse = net.createConnection(httpPort, "127.0.0.1");
- socket.httpReverse.on("error", socketErrHanler);
- socket.httpReverse.on("data", (data) => socketDataHandler(data, socket));
- }
+ if (global.config.server.useWebSocketAPI) {
+ socket.wsReverse = net.createConnection(wsPort, "127.0.0.1");
+ socket.wsReverse.on("error", socketErrHanler);
+ socket.wsReverse.on("data", (data) => socketDataHandler(data, socket));
+ }
+ if (global.config.server.useFrontend) {
+ socket.httpReverse = net.createConnection(httpPort, "127.0.0.1");
+ socket.httpReverse.on("error", socketErrHanler);
+ socket.httpReverse.on("data", (data) =>
+ socketDataHandler(data, socket),
+ );
+ }
- socket.on("error", (err) => {
- logger.log(
- `socket.on(${socket.remoteAddress}) error:`
- );
- logger.log(err.stack);
- try { socket.end(); } catch (_) {}
- // socket.end();
- });
+ socket.on("error", (err) => {
+ logger.log(`socket.on(${socket.remoteAddress}) error:`);
+ logger.log(err.stack);
+ try {
+ socket.end();
+ } catch (_) {}
+ // socket.end();
+ });
- socket.on('data', async (data) => {
- const parserResult = await parser(data);
+ socket.on("data", async (data) => {
+ const parserResult = await parser(data);
// if (global.config.server.secureMode && data.toString().includes("http/1.1")) {
- // logger.log("Encrypted WS!");
- // parserResult.result.isWebSocket = true;
+ // logger.log("Encrypted WS!");
+ // parserResult.result.isWebSocket = true;
// }
-
- // const parserDecryptedResult = await parser(global.openSSH.decrypt(data));
+
+ // const parserDecryptedResult = await parser(global.openSSH.decrypt(data));
const peerAddress = `${socket.remoteAddress}:${socket.remotePort}`;
- //logger.log("Parser result is", parserResult);
+ //logger.log("Parser result is", parserResult);
- if (!socket.mainconnect) {
- // if (parserResult.result.isWebSocket || parserDecryptedResult.result.isWebSocket) {
- if (parserResult.result.isWebSocket) {
- socket.mainconnect = "ws";
- if (global.config.server.useFrontend)
- socket.httpReverse.end();
- if (global.config.server.useWebSocketAPI) {
- return socket.wsReverse.write(data, socketErrHanler);
- }
- return;
- }
- else if (parserResult.result.isHTTP) {
- socket.mainconnect = "http";
+ if (!socket.mainconnect) {
+ // if (parserResult.result.isWebSocket || parserDecryptedResult.result.isWebSocket) {
+ if (parserResult.result.isWebSocket) {
+ socket.mainconnect = "ws";
+ if (global.config.server.useFrontend) socket.httpReverse.end();
+ if (global.config.server.useWebSocketAPI) {
+ return socket.wsReverse.write(data, socketErrHanler);
+ }
+ return;
+ } else if (parserResult.result.isHTTP) {
+ socket.mainconnect = "http";
socket.wsReverse.end();
- if (global.config.server.useFrontend) {
- return socket.httpReverse.write(data, socketErrHanler);
- }
- return;
- }
- else {
- if (global.config.server.useFrontend)
- socket.httpReverse.end();
- if (global.config.server.useWebSocketAPI)
- socket.wsReverse.end();
- socket.mainconnect = "tcp";
- return await this.api.exec(peerAddress, data, () => {});
- }
- }
- else {
- switch (socket.mainconnect) {
- case "ws":
- if (global.config.server.useWebSocketAPI) {
- return socket.wsReverse.write(data, socketErrHanler);
- }
- case "http":
- if (global.config.server.useFrontend) {
- return socket.httpReverse.write(data, socketErrHanler);
- }
- case "tcp":
- return await this.api.exec(peerAddress, data);
- default:
- return;
- }
- }
- });
- });
+ if (global.config.server.useFrontend) {
+ return socket.httpReverse.write(data, socketErrHanler);
+ }
+ return;
+ } else {
+ if (global.config.server.useFrontend) socket.httpReverse.end();
+ if (global.config.server.useWebSocketAPI) socket.wsReverse.end();
+ socket.mainconnect = "tcp";
+ return await this.api.exec(peerAddress, data, () => {});
+ }
+ } else {
+ switch (socket.mainconnect) {
+ case "ws":
+ if (global.config.server.useWebSocketAPI) {
+ if (!socket.wsReverse.destroyed) {
+ return socket.wsReverse.write(data, socketErrHanler);
+ } else {
+ socket.wsReverse = net.createConnection(wsPort, "127.0.0.1");
+ socket.wsReverse.on("error", socketErrHanler);
+ socket.wsReverse.on("data", (data) =>
+ socketDataHandler(data, socket),
+ );
+ return socket.wsReverse.write(data, socketErrHanler);
+ }
+ }
+ case "http":
+ if (global.config.server.useFrontend) {
+ if (!socket.httpReverse.destroyed) {
+ return socket.httpReverse.write(data, socketErrHanler);
+ } else {
+ socket.httpReverse = net.createConnection(
+ httpPort,
+ "127.0.0.1",
+ );
+ socket.httpReverse.on("error", socketErrHanler);
+ socket.httpReverse.on("data", (data) =>
+ socketDataHandler(data, socket),
+ );
+ return socket.httpReverse.write(data, socketErrHanler);
+ }
+ }
+ case "tcp":
+ return await this.api.exec(peerAddress, data, () => {});
+ default:
+ return;
+ }
+ }
+ });
+ });
- this.server.on('error', (err) => {
- logger.log("Error of server");
- logger.log(err.stack);
- });
+ this.server.on("error", (err) => {
+ logger.log("Error of server");
+ logger.log(err.stack);
+ });
- this.server.listen(this.port, this.address, (err) => {
- if (err) throw err;
- logger.log(`TCP server for ai-adventure labs connected on ${this.address}:${this.port}`);
- });
- }
+ this.server.listen(this.port, this.address, (err) => {
+ if (err) throw err;
+ logger.log(
+ `TCP server for ai-adventure labs connected on ${this.address}:${this.port}`,
+ );
+ });
+ }
}
const defaultConfigData = {
- server: {
- address: "0.0.0.0",
- port: 8841,
- useWebSocketAPI: true,
- useFrontend: true,
- staticInfo: {
- wsPort: 57891,
- httpPort: 49901
- }
- },
- database: {
- dialect: "sqlite",
- path: "./data"
- },
- ai: {
- apiType: "kobold"
+ server: {
+ address: "0.0.0.0",
+ port: 8841,
+ useWebSocketAPI: true,
+ useFrontend: true,
+ staticInfo: {
+ wsPort: 57891,
+ httpPort: 49901,
+ },
+ },
+ database: {
+ dialect: "sqlite",
+ path: "./data",
+ },
+ ai: {
+ apiType: "kobold",
+ },
+ rootuser: {
+ "login": "admin",
+ "password": "admin",
+ "activated": true
}
};
@@ -235,4 +258,4 @@ if (global.config.server.secureMode) {
}
else
server.run(global.config.server.address, global.config.server.port);
-*/
\ No newline at end of file
+*/