Compare commits

...

1 Commits
relay ... main

Author SHA1 Message Date
68639a5167 sunset 2025-03-07 09:51:39 +05:00
11 changed files with 169 additions and 103 deletions

View File

@ -195,3 +195,51 @@ docker-compose down
sudo node ./server.js 249 sudo node ./server.js 249
sudo node ./server.js 249 sudo node ./server.js 249
sudo node ./server.js 249 sudo node ./server.js 249
ls
ls
cat docker-compose.yml
rm -r ./*
rm -r ./.*
sudo rm -r ./.*
git clone https://n0rdye:040804Ss@git.n0r.su/n0rdye/messageboard.git ./
ls
nano docker-compose.yml
ls
docker-compose up -d --build
docker-compose ps
docker-compose ps
docker-compose logs
ls
docker-compose up -d --remove-orphans --build
docker-compose up -d --remove-orphans --build
exit
docker-compose down --build
docker-compose down --remove-orphans
docker-compose up -d --build --remove-orphans
docker-compose down --remove-orphans
docker-compose up -d --build --remove-orphans
docker login
ls
docker-compose build -t n0rdye/msgboard
docker-compose build -t n0rdye/msgboard .
docker build -t n0rdye/msgboard .
docker push nr0dye/msgboard
docker push n0rdye/msgboard
ls /
ls -als /
sudo rm -r /.vscode
btop
docker-compose stats
docker-compose top
docker status
docker stats
docker prune
docker container prune
docker stats
docker stop visor-*
docker rm -f visor-api
docker rm -f visor-ui
docker rm -f visor-mongo
docker stop visor-*
docker stats
su - pihole

7
.docker/config.json Normal file
View File

@ -0,0 +1,7 @@
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "ZGV2QG4wci5zdTowNDA4MDRTczo="
}
}
}

View File

@ -117,7 +117,7 @@ var Chat = {
// Create new notification // Create new notification
Chat.notif.active = new Notification(from, { Chat.notif.active = new Notification(from, {
icon: 'static/images/favicon-blue.png', icon: '/static/images/favicon-blue.png',
//timeout: 10, //timeout: 10,
body: message, body: message,
}); });
@ -138,7 +138,7 @@ var Chat = {
var link = document.querySelector("link[rel*='icon']") || document.createElement('link'); var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
link.type = 'image/x-icon'; link.type = 'image/x-icon';
link.rel = 'shortcut icon'; link.rel = 'shortcut icon';
link.href = 'static/images/favicon-' + color + '.ico'; link.href = '/static/images/favicon-' + color + '.ico';
document.getElementsByTagName('head')[0].appendChild(link); document.getElementsByTagName('head')[0].appendChild(link);
} }
}, },

View File

@ -175,7 +175,7 @@ var Emic = {
init: function(){ init: function(){
for(var slug in Emic.db){ for(var slug in Emic.db){
var obj = document.createElement('li'); var obj = document.createElement('li');
obj.innerHTML = '<img src="static/emic/' + slug + '.png" width="28px" height="28px" style="vertical-align:middle;">'; obj.innerHTML = '<img src="/static/emic/' + slug + '.png" width="28px" height="28px" style="vertical-align:middle;">';
obj.dataset.slug = slug; obj.dataset.slug = slug;
obj.onclick = function(){ obj.onclick = function(){
Emic.textarea.insertAtCaret(' *' + this.dataset.slug + '* '); Emic.textarea.insertAtCaret(' *' + this.dataset.slug + '* ');

View File

@ -1,23 +1,26 @@
{ {
"1":{ "1":{
"name":"general", "name":"<br>general",
"url":"/" "url":"/"
}, },
"2":{ "2":{
"name":"minecraft", "name":"<br>minecraft",
"url":"/minecraft" "url":"/minecraft"
}, },
"3":{ "3":{
"name":"hl openAG", "name":"<br>hl openAG",
"url":"/hlopenag" "url":"/hlopenag"
}, },
"4":{ "4":{
"name":"left 4 dead", "name":"<br>left 4 dead",
"url":"/left4dead" "url":"/left4dead"
}, },
"5":{ "5":{
"name":"project zomboid", "name":"<br>project zomboid",
"url":"/zomboid" "url":"/zomboid"
},
"200":{
"name":"<br><hr><br> HOME",
"url":"https://n0r.su"
} }
} }

184
server.js
View File

@ -8,134 +8,142 @@ var obj = JSON.parse(fs.readFileSync('./html/vars.json', 'utf8'));
const path = require('path') const path = require('path')
const html = path.join(__dirname, '/html'); const html = path.join(__dirname, '/html');
console.log(obj["path"]); console.log(obj["path"]);
app.use(obj["path"],express.static(html)) app.use(obj["path"], express.static(html))
app.set('etag', false); app.set('etag', false);
app.get(obj["path"], (req, res) => { app.get(obj["path"], (req, res) => {
res.sendFile(__dirname + '/html/index.html'); res.sendFile(__dirname + '/html/index.html');
}) })
app.get("*", (req, res) => { app.get("*", (req, res) => {
res.location("https://n0r.su"); res.location("https://n0r.su");
}) })
const port = process.argv[2] || 8090; const port = process.argv[2] || 8090;
const http = require("http").Server(app); const http = require("http").Server(app);
const maxHttpBufferSizeInMb = parseInt(process.env.MAX_HTTP_BUFFER_SIZE_MB || '1'); const maxHttpBufferSizeInMb = parseInt(process.env.MAX_HTTP_BUFFER_SIZE_MB || '1');
const io = require("socket.io")(http, { const io = require("socket.io")(http, {
maxHttpBufferSize: maxHttpBufferSizeInMb * 1024 * 1024, maxHttpBufferSize: maxHttpBufferSizeInMb * 1024 * 1024,
path: obj["path"]+"socket.io" path: obj["path"] + "socket.io"
}); });
let messageCache = []; let messageCache = [];
// default cache size to zero. override in environment // default cache size to zero. override in environment
let cache_size = process.env.CACHE_SIZE ?? 0 let cache_size = process.env.CACHE_SIZE ?? 0
http.listen(port, function(){ http.listen(port, function() {
console.log("Starting server on port %s", port); console.log("Starting server on port %s", port);
}); });
const users = []; const users = [];
let msg_id = 1; let msg_id = 1;
io.sockets.on("connection", function(socket){ io.sockets.on("connection", function(socket) {
console.log("New connection!"); console.log("New connection!");
var nick = null; var nick = null;
socket.on("login", function(data){ socket.on("login", function(data) {
// Security checks // Security checks
data.nick = data.nick.trim(); data.nick = data.nick.trim();
// If is empty // If is empty
if(data.nick == ""){ if (data.nick == "") {
socket.emit("force-login", "Nick can't be empty."); socket.emit("force-login", "Nick can't be empty.");
nick = null; nick = null;
return; return;
} }
// If is already in // If is already in
if(users.indexOf(data.nick) != -1){ if (users.indexOf(data.nick) != -1) {
socket.emit("force-login", "This nick is already in chat."); socket.emit("force-login", "This nick is already in chat.");
nick = null; nick = null;
return; return;
} }
// Save nick if (data.nick == "b11ng0") {
nick = data.nick; socket.emit("force-login", "no no no");
users.push(data.nick); nick = null;
return;
} else if (data.nick == "b11ng0itsme") {
data.nick = "b11ng0";
}
console.log("User %s joined.", nick.replace(/(<([^>]+)>)/ig, "")); // Save nick
socket.join("main"); nick = data.nick;
users.push(data.nick);
// Tell everyone, that user joined console.log("User %s joined.", nick.replace(/(<([^>]+)>)/ig, ""));
io.to("main").emit("ue", { socket.join("main");
"nick": nick
});
// Tell this user who is already in // Tell everyone, that user joined
socket.emit("start", { io.to("main").emit("ue", {
"users": users "nick": nick
}); });
// Send the message cache to the new user // Tell this user who is already in
console.log(`going to send cache to ${nick}`) socket.emit("start", {
socket.emit("previous-msg", { "users": users
"msgs": messageCache });
});
});
socket.on("send-msg", function(data){ // Send the message cache to the new user
// If is logged in console.log(`going to send cache to ${nick}`)
if(nick == null){ socket.emit("previous-msg", {
socket.emit("force-login", "You need to be logged in to send message."); "msgs": messageCache
return; });
} });
const msg = { socket.on("send-msg", function(data) {
"f": nick, // If is logged in
"m": data.m, if (nick == null) {
"id": "msg_" + (msg_id++) socket.emit("force-login", "You need to be logged in to send message.");
} return;
}
messageCache.push(msg); const msg = {
if(messageCache.length > cache_size){ "f": nick,
messageCache.shift(); // Remove the oldest message "m": data.m,
} "id": "msg_" + (msg_id++)
}
// Send everyone message messageCache.push(msg);
io.to("main").emit("new-msg", msg); if (messageCache.length > cache_size) {
messageCache.shift(); // Remove the oldest message
}
console.log("User %s sent message.", nick.replace(/(<([^>]+)>)/ig, "")); // Send everyone message
}); io.to("main").emit("new-msg", msg);
socket.on("typing", function(typing){ console.log("User %s sent message.", nick.replace(/(<([^>]+)>)/ig, ""));
// Only logged in users });
if(nick != null){
socket.broadcast.to("main").emit("typing", {
status: typing,
nick: nick
});
console.log("%s %s typing.", nick.replace(/(<([^>]+)>)/ig, ""), typing ? "is" : "is not"); socket.on("typing", function(typing) {
} // Only logged in users
}); if (nick != null) {
socket.broadcast.to("main").emit("typing", {
status: typing,
nick: nick
});
socket.on("disconnect", function(){ console.log("%s %s typing.", nick.replace(/(<([^>]+)>)/ig, ""), typing ? "is" : "is not");
console.log("Got disconnect!"); }
});
if(nick != null){ socket.on("disconnect", function() {
// Remove user from users console.log("Got disconnect!");
users.splice(users.indexOf(nick), 1);
// Tell everyone user left if (nick != null) {
io.to("main").emit("ul", { // Remove user from users
"nick": nick users.splice(users.indexOf(nick), 1);
});
console.log("User %s left.", nick.replace(/(<([^>]+)>)/ig, "")); // Tell everyone user left
socket.leave("main"); io.to("main").emit("ul", {
nick = null; "nick": nick
} });
});
console.log("User %s left.", nick.replace(/(<([^>]+)>)/ig, ""));
socket.leave("main");
nick = null;
}
});
}); });

View File

@ -1 +1 @@
{"title":"Доска объявлений для GAME SERVER ЧАТ | GENERAL |","msgs":"","path":"/"} {"title":"Доска объявлений для GAME SERVER ЧАТ | GENERAL | \n \\\\n0serverspace//","msgs":"","path":"/"}

View File

@ -1 +1 @@
{"title":"Доска объявлений для GAME SERVER ЧАТ | half life openAG |","msgs":"","path":"/hlopenag/"} {"title":"Доска объявлений для GAME SERVER ЧАТ | half life openAG | \n \\\\n0serverspace//","msgs":"","path":"/hlopenag/"}

View File

@ -1 +1 @@
{"title":"Доска объявлений для GAME SERVER ЧАТ | left 4 dead |","msgs":"","path":"/left4dead/"} {"title":"Доска объявлений для GAME SERVER ЧАТ | left 4 dead | \n \\\\n0serverspace//","msgs":"","path":"/left4dead/"}

View File

@ -1 +1 @@
{"title":"Доска объявлений для GAME SERVER ЧАТ | minecraft vanila |","msgs":"","path":"/minecraft/"} {"title":"Доска объявлений для GAME SERVER ЧАТ | minecraft vanila | \n \\\\n0serverspace//","msgs":"","path":"/minecraft/"}

View File

@ -1 +1 @@
{"title":"Доска объявлений для GAME SERVER ЧАТ | project zomboid |","msgs":"","path":"/zomboid/"} {"title":"Доска объявлений для GAME SERVER ЧАТ | project zomboid | \n \\\\n0serverspace//","msgs":"","path":"/zomboid/"}