mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
403 lines
12 KiB
JavaScript
403 lines
12 KiB
JavaScript
var path = require("path");
|
|
var mongojs = require("mongojs");
|
|
var db = require(pathThumbnails + "/handlers/db.js");
|
|
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
|
|
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
|
|
var findAndModify = require(pathThumbnails +
|
|
"/handlers/dbFunctions/findAndModify.js");
|
|
|
|
var Helpers = require(pathThumbnails + "/handlers/helpers.js");
|
|
var SessionHandler = require(pathThumbnails +
|
|
"/handlers/dbFunctions/advancedFunctions/sessionHandler.js");
|
|
async function checkIfChatEnabled(channel, socket, callback) {
|
|
return new Promise(async (resolve, reject) => {
|
|
if (channel == "" || channel == undefined) resolve();
|
|
else {
|
|
var docs = await find(channel + "_settings");
|
|
if (
|
|
docs.length > 0 &&
|
|
(docs[0].hasOwnProperty("toggleChat") && !docs[0].toggleChat)
|
|
) {
|
|
socket.emit("chat", {
|
|
from: "System",
|
|
msg: ": Chat for this channel has been disabled.",
|
|
icon: "https://zoff.me/assets/images/favicon-32x32.png"
|
|
});
|
|
resolve(false);
|
|
} else {
|
|
resolve(true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
async function checkIfUserIsBanned(channel, socket, guid) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var connection_id = Helpers.hash_pass(
|
|
socket.handshake.headers["user-agent"] +
|
|
socket.handshake.address +
|
|
socket.handshake.headers["accept-language"]
|
|
);
|
|
var docs = await find(channel + "_banned_chat", {
|
|
$or: [{ connection_id: connection_id }, { connection_id: guid }]
|
|
});
|
|
if (docs.length == 0) resolve();
|
|
else {
|
|
var d = await findAndModify("user_names", {
|
|
query: { guid, guid },
|
|
update: { $addToSet: { channels: channel } }
|
|
});
|
|
socket.emit("chat", {
|
|
from: "System",
|
|
msg:
|
|
": You can't chat in this channel, you are banned. The reason is: " +
|
|
docs[0].reason,
|
|
icon: "https://zoff.me/assets/images/favicon-32x32.png"
|
|
});
|
|
reject();
|
|
}
|
|
});
|
|
}
|
|
|
|
async function namechange(data, guid, socket, tried) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var enabled = await checkIfChatEnabled(data.channel, socket);
|
|
if (!enabled) {
|
|
resolve(false);
|
|
return;
|
|
}
|
|
try {
|
|
await checkIfUserIsBanned(data.channel, socket, guid);
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
var pw = "";
|
|
var new_password;
|
|
var first = false;
|
|
var sessionObject = await SessionHandler.getSessionChatPass(
|
|
Helpers.getSession(socket)
|
|
);
|
|
var name = sessionObject.name;
|
|
var pass = sessionObject.pass;
|
|
var fetched = false;
|
|
if (data.hasOwnProperty("first") && data.first) {
|
|
pw = pass;
|
|
name = name;
|
|
data.name = name;
|
|
data.password = pass;
|
|
new_password = false;
|
|
if (name == "" || pass == "") {
|
|
resolve(true);
|
|
return;
|
|
}
|
|
fetched = true;
|
|
password = pw;
|
|
} else {
|
|
var name = data.name;
|
|
if (data.hasOwnProperty("first")) {
|
|
first = data.first;
|
|
}
|
|
if (data.hasOwnProperty("password")) {
|
|
pw = data.password;
|
|
new_password = false;
|
|
} else if (
|
|
data.hasOwnProperty("new_password") &&
|
|
data.hasOwnProperty("old_password")
|
|
) {
|
|
pw = data.old_password;
|
|
new_password = Helpers.decrypt_string(data.new_password);
|
|
}
|
|
password = Helpers.decrypt_string(pw);
|
|
password = Helpers.hash_pass(password);
|
|
doubled = true;
|
|
}
|
|
|
|
if (name == "") {
|
|
resolve(true);
|
|
return;
|
|
}
|
|
|
|
var docs = await find("registered_users", { _id: name.toLowerCase() });
|
|
var accepted_password = false;
|
|
var icon = false;
|
|
if (docs.length == 0) {
|
|
if (new_password) {
|
|
resolve(true);
|
|
return;
|
|
}
|
|
accepted_password = true;
|
|
await SessionHandler.setSessionChatPass(
|
|
Functions.getSession(socket),
|
|
name.toLowerCase(),
|
|
data.password
|
|
);
|
|
update(
|
|
"registered_users",
|
|
{ _id: name.toLowerCase() },
|
|
{ $set: { password: password } },
|
|
{ upsert: true }
|
|
);
|
|
} else if (docs[0].password == password) {
|
|
if (docs[0].icon) {
|
|
icon = docs[0].icon;
|
|
}
|
|
accepted_password = true;
|
|
if (new_password) {
|
|
await SessionHandler.setSessionChatPass(
|
|
Helpers.getSession(socket),
|
|
name.toLowerCase(),
|
|
data.new_password
|
|
);
|
|
update(
|
|
"registered_users",
|
|
{ _id: name.toLowerCase(), password: password },
|
|
{
|
|
$set: { password: Helpers.hash_pass(new_password) }
|
|
}
|
|
);
|
|
} else {
|
|
await SessionHandler.setSessionChatPass(
|
|
Helpers.getSession(socket),
|
|
name.toLowerCase(),
|
|
fetched
|
|
? data.password
|
|
: Helpers.hash_pass(Helpers.decrypt_string(data.password))
|
|
);
|
|
}
|
|
}
|
|
if (accepted_password) {
|
|
var names = await find("user_names", { guid: guid });
|
|
if (
|
|
names.length > 0 ||
|
|
(docs.length != 0 && docs[0].password == password)
|
|
) {
|
|
var no_name = false;
|
|
if (names.length == 0) no_name = true;
|
|
if (!no_name) {
|
|
var old_name = names[0].name;
|
|
update(
|
|
"user_names",
|
|
{ _id: "all_names" },
|
|
{ $pull: { names: old_name } }
|
|
);
|
|
}
|
|
var connection_id = Helpers.hash_pass(
|
|
socket.handshake.headers["user-agent"] +
|
|
socket.handshake.address +
|
|
socket.handshake.headers["accept-language"]
|
|
);
|
|
var updateElement = {
|
|
$set: {
|
|
name: name,
|
|
icon: icon,
|
|
connection_id: connection_id
|
|
}
|
|
};
|
|
if (data.hasOwnProperty("channel") && data.channel != "") {
|
|
updateElement["$addToSet"] = { channels: data.channel };
|
|
}
|
|
await update("user_names", { guid: guid }, updateElement, {
|
|
upsert: true
|
|
});
|
|
await update(
|
|
"user_names",
|
|
{ _id: "all_names" },
|
|
{ $addToSet: { names: name } }
|
|
);
|
|
//socket.emit('name', {type: "name", accepted: true});
|
|
if (old_name != name && !first && !no_name) {
|
|
if (
|
|
data.hasOwnProperty("channel") &&
|
|
typeof data.channel == "string"
|
|
) {
|
|
io.to(data.channel).emit("chat", {
|
|
from: old_name,
|
|
msg: " changed name to " + name
|
|
});
|
|
io.sockets.emit("chat.all", {
|
|
from: old_name,
|
|
msg: " changed name to " + name,
|
|
channel: data.channel
|
|
});
|
|
}
|
|
}
|
|
|
|
resolve(true);
|
|
} else {
|
|
if (tried < 3 || tried == undefined) {
|
|
if (tried == undefined) {
|
|
tried = 1;
|
|
}
|
|
namechange(data, guid, socket, tried + 1);
|
|
}
|
|
}
|
|
} else {
|
|
await SessionHandler.removeSessionChatPass(Functions.Helpers(socket));
|
|
socket.emit("name", { type: "name", accepted: false });
|
|
}
|
|
});
|
|
}
|
|
|
|
async function get_name(guid, announce_payload, first) {
|
|
return new Promise(async (resolve, reject) => {
|
|
if (
|
|
!announce_payload.announce &&
|
|
announce_payload.hasOwnProperty("socket")
|
|
) {
|
|
var sessionObject = await SessionHandler.getSessionChatPass(
|
|
Helpers.getSession(announce_payload.socket)
|
|
);
|
|
var name = sessionObject.name;
|
|
var pass = sessionObject.pass;
|
|
if (name == "" || pass == "") {
|
|
get_name_generate(
|
|
guid,
|
|
announce_payload,
|
|
first,
|
|
announce_payload.channel
|
|
);
|
|
return;
|
|
}
|
|
var docs = find("registered_users", { _id: name.toLowerCase() });
|
|
if (docs[0].password == Helpers.hash_pass(Helpers.decrypt_string(pass))) {
|
|
var icon = false;
|
|
if (docs[0].icon) {
|
|
icon = docs[0].icon;
|
|
}
|
|
SessionHandler.setSessionChatPass(
|
|
Functions.getSession(announce_payload.socket),
|
|
name.toLowerCase(),
|
|
pass
|
|
);
|
|
var connection_id = Helpers.hash_pass(
|
|
announce_payload.socket.handshake.headers["user-agent"] +
|
|
announce_payload.socket.handshake.address +
|
|
announce_payload.socket.handshake.headers["accept-language"]
|
|
);
|
|
var updateElement = {
|
|
$set: { name: name, icon: icon, connection_id: connection_id }
|
|
};
|
|
if (
|
|
announce_payload.hasOwnProperty("channel") &&
|
|
announce_payload.channel != ""
|
|
)
|
|
updateElement["$addToSet"] = {
|
|
channel: announce_payload.channel
|
|
};
|
|
await update("user_names", { guid: guid }, updateElement, {
|
|
upsert: true
|
|
});
|
|
await update(
|
|
"user_names",
|
|
{ _id: "all_names" },
|
|
{ $addToSet: { names: name } }
|
|
);
|
|
name = name;
|
|
resolve();
|
|
}
|
|
} else {
|
|
get_name_generate(
|
|
guid,
|
|
announce_payload,
|
|
first,
|
|
announce_payload.channel
|
|
);
|
|
resolve();
|
|
}
|
|
});
|
|
}
|
|
|
|
async function get_name_generate(guid, announce_payload, first, channel) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var docs = await find("user_names", { guid: guid });
|
|
if (docs.length == 0) {
|
|
generate_name(guid, announce_payload, undefined);
|
|
} else {
|
|
name = docs[0].name;
|
|
}
|
|
});
|
|
}
|
|
|
|
async function generate_name(guid, announce_payload, second, round, channel) {
|
|
if (round == undefined) round = 0;
|
|
var tmp_name = Helpers.rndName(second ? second : guid, Math.floor(8 + round));
|
|
var docs = await find("registered_users", { _id: tmp_name });
|
|
if (docs.length == 0) {
|
|
var updated = await update(
|
|
"user_names",
|
|
{ _id: "all_names" },
|
|
{ $addToSet: { names: tmp_name } },
|
|
{ upsert: true }
|
|
);
|
|
if (
|
|
updated.nModified == 1 ||
|
|
(updated.hasOwnProperty("upserted") &&
|
|
updated.hasOwnProperty("n") &&
|
|
updated.n == 1)
|
|
) {
|
|
var connection_id = Helpers.hash_pass(
|
|
announce_payload.socket.handshake.headers["user-agent"] +
|
|
announce_payload.socket.handshake.address +
|
|
announce_payload.socket.handshake.headers["accept-language"]
|
|
);
|
|
var updateElement = {
|
|
$set: {
|
|
name: tmp_name,
|
|
icon: false,
|
|
connection_id: connection_id
|
|
}
|
|
};
|
|
if (channel != undefined && channel != "") {
|
|
updateElement["$addToSet"] = { channels: channel };
|
|
}
|
|
if (
|
|
announce_payload.hasOwnProperty("channel") &&
|
|
announce_payload.channel != ""
|
|
) {
|
|
updateElement["$addToSet"] = {
|
|
channels: announce_payload.channel
|
|
};
|
|
}
|
|
var updateElement = await update(
|
|
"user_names",
|
|
{ guid: guid },
|
|
updateElement,
|
|
{ upsert: true }
|
|
);
|
|
name = tmp_name;
|
|
if (announce_payload.announce) {
|
|
io.to(announce_payload.channel).emit("chat", {
|
|
from: announce_payload.old_name,
|
|
msg: " changed name to " + name
|
|
});
|
|
io.sockets.emit("chat.all", {
|
|
from: announce_payload.old_name,
|
|
msg: " changed name to " + name,
|
|
channel: announce_payload.channel
|
|
});
|
|
} else if (announce_payload.message && !announce_payload.all) {
|
|
io.to(announce_payload.channel).emit("chat", {
|
|
from: name,
|
|
msg: ": " + announce_payload.message
|
|
});
|
|
} else if (announce_payload.message && announce_payload.all) {
|
|
io.sockets.emit("chat.all", {
|
|
from: name,
|
|
msg: ": " + announce_payload.message,
|
|
channel: announce_payload.channel
|
|
});
|
|
}
|
|
} else {
|
|
generate_name(guid, announce_payload, tmp_name, round + 0.25, channel);
|
|
}
|
|
} else {
|
|
generate_name(guid, announce_payload, tmp_name, round + 0.25, channel);
|
|
}
|
|
}
|
|
|
|
module.exports.get_name = get_name;
|
|
module.exports.checkIfChatEnabled = checkIfChatEnabled;
|
|
module.exports.checkIfUserIsBanned = checkIfUserIsBanned;
|
|
module.exports.namechange = namechange;
|
|
module.exports.get_name_generate = get_name_generate;
|