From c12e6337294e266c02a003a3f992457b764099b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Wed, 26 Sep 2018 23:29:36 +0200 Subject: [PATCH] Added settings for disabling chat in a channel --- server/handlers/chat.js | 219 ++++++++++-------- server/handlers/list_settings.js | 5 +- server/public/assets/js/admin.js | 13 +- server/public/assets/js/chat.js | 2 +- server/public/assets/js/listeners.js | 1 + .../public/partials/channel/panel.handlebars | 143 +----------- 6 files changed, 133 insertions(+), 250 deletions(-) diff --git a/server/handlers/chat.js b/server/handlers/chat.js index 1283e010..5dbe9d36 100644 --- a/server/handlers/chat.js +++ b/server/handlers/chat.js @@ -85,7 +85,9 @@ function chat(msg, guid, offline, socket) { msg.pass = userpass; } db.collection(coll + "_settings").find(function(err, docs){ - if(docs.length > 0 && (docs[0].userpass == undefined || docs[0].userpass == "" || (msg.hasOwnProperty('pass') && docs[0].userpass == crypto.createHash('sha256').update(Functions.decrypt_string(msg.pass)).digest("base64")))) { + if(docs.length > 0 && !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"}); + } else if(docs.length > 0 && (docs[0].userpass == undefined || docs[0].userpass == "" || (msg.hasOwnProperty('pass') && docs[0].userpass == crypto.createHash('sha256').update(Functions.decrypt_string(msg.pass)).digest("base64")))) { var data = msg.data; Functions.check_inlist(coll, guid, socket, offline, function() { @@ -162,127 +164,144 @@ function all_chat(msg, guid, offline, socket) { }, "place 2"); } +function checkIfChatEnabled(channel, socket, callback) { + if(channel == "" || channel == undefined) callback(); + else { + db.collection(channel + "_settings").find(function(err, docs){ + if(docs.length > 0 && !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"}); + } else { + callback(); + } + }); + } +} + function namechange(data, guid, socket, tried, callback) { /*if(!data.hasOwnProperty("channel") || typeof(data.channel) != "string") return;*/ - var pw = ""; - var new_password; - var first = false; - Functions.getSessionChatPass(Functions.getSession(socket), function(name, pass) { - if(data.hasOwnProperty("first") && data.first) { - pw = pass; - name = name; - data.name = name; - data.password = pass; - new_password = false; - if(name == "" || pass == "") { - if(typeof(callback) == "function") callback(); - return; - } - } else { - var name = data.name; - if(data.hasOwnProperty("first")) { - first = data.first; - } - if(data.hasOwnProperty("password")) { - pw = data.password; + checkIfChatEnabled(data.channel, socket, function() { + var pw = ""; + var new_password; + var first = false; + Functions.getSessionChatPass(Functions.getSession(socket), function(name, pass) { + if(data.hasOwnProperty("first") && data.first) { + pw = pass; + name = name; + data.name = name; + data.password = pass; new_password = false; - } else if(data.hasOwnProperty("new_password") && data.hasOwnProperty("old_password")) { - pw = data.old_password; - new_password = Functions.decrypt_string(data.new_password); - } - } - - if(name == "") { - if(typeof(callback) == "function") callback(); - return; - } - var password = Functions.decrypt_string(pw); - db.collection("registered_users").find({"_id": name.toLowerCase()}, function(err, docs) { - var accepted_password = false; - var icon = false; - if(docs.length == 0) { - if(new_password) { + if(name == "" || pass == "") { if(typeof(callback) == "function") callback(); return; } - accepted_password = true; - Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.password, function() { - db.collection("registered_users").update({"_id": name.toLowerCase()}, {$set: {password: Functions.hash_pass(password)}}, {upsert: true}, function() { - }); - }); - } else if(docs[0].password == Functions.hash_pass(password)) { - if(docs[0].icon) { - icon = docs[0].icon; + } else { + var name = data.name; + if(data.hasOwnProperty("first")) { + first = data.first; } - accepted_password = true; - if(new_password) { - Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.new_password, function() { - db.collection("registered_users").update({"_id": name.toLowerCase(), password: Functions.hash_pass(password)}, {$set: {password: Functions.hash_pass(new_password)}}, function() { - - }); - }); - } else { - Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.password, function() { - }); + 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 = Functions.decrypt_string(data.new_password); } } - if(accepted_password) { - db.collection("user_names").find({"guid": guid}, function(err, names) { - if(names.length > 0 || (docs.length != 0 && docs[0].password == Functions.hash_pass(password))) { - var no_name = false; - if(names.length == 0) no_name = true; - if(!no_name) { - var old_name = names[0].name; - db.collection("user_names").update({"_id": "all_names"}, {$pull: {names: old_name}}, function() {}); - } - var updateElement = {$set: {name: name, icon: icon}}; - if(data.hasOwnProperty("channel") && data.channel != "") { - updateElement["$addToSet"] = {channels: data.channel}; - } - db.collection("user_names").update({"guid": guid}, updateElement, {upsert: true}, function(err, docs) { - db.collection("user_names").update({"_id": "all_names"}, {$addToSet: {names: name}}, function(err, docs) { - //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}); - } - } - if(callback != undefined && typeof(callback) == "function") callback(); + + if(name == "") { + if(typeof(callback) == "function") callback(); + return; + } + var password = Functions.decrypt_string(pw); + db.collection("registered_users").find({"_id": name.toLowerCase()}, function(err, docs) { + var accepted_password = false; + var icon = false; + if(docs.length == 0) { + if(new_password) { + if(typeof(callback) == "function") callback(); + return; + } + accepted_password = true; + Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.password, function() { + db.collection("registered_users").update({"_id": name.toLowerCase()}, {$set: {password: Functions.hash_pass(password)}}, {upsert: true}, function() { + }); + }); + } else if(docs[0].password == Functions.hash_pass(password)) { + if(docs[0].icon) { + icon = docs[0].icon; + } + accepted_password = true; + if(new_password) { + Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.new_password, function() { + db.collection("registered_users").update({"_id": name.toLowerCase(), password: Functions.hash_pass(password)}, {$set: {password: Functions.hash_pass(new_password)}}, function() { + }); }); } else { - if(tried < 3 || tried == undefined) { - if(tried == undefined) { - tried = 1; - } - namechange(data, guid, socket, tried + 1); - } + Functions.setSessionChatPass(Functions.getSession(socket), name.toLowerCase(), data.password, function() { + }); } - }); - } else { - Functions.removeSessionChatPass(Functions.getSession(socket), function() { - socket.emit('name', {type: "name", accepted: false}); - }); - } + } + if(accepted_password) { + db.collection("user_names").find({"guid": guid}, function(err, names) { + if(names.length > 0 || (docs.length != 0 && docs[0].password == Functions.hash_pass(password))) { + var no_name = false; + if(names.length == 0) no_name = true; + if(!no_name) { + var old_name = names[0].name; + db.collection("user_names").update({"_id": "all_names"}, {$pull: {names: old_name}}, function() {}); + } + var updateElement = {$set: {name: name, icon: icon}}; + if(data.hasOwnProperty("channel") && data.channel != "") { + updateElement["$addToSet"] = {channels: data.channel}; + } + db.collection("user_names").update({"guid": guid}, updateElement, {upsert: true}, function(err, docs) { + db.collection("user_names").update({"_id": "all_names"}, {$addToSet: {names: name}}, function(err, docs) { + //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}); + } + } + if(callback != undefined && typeof(callback) == "function") callback(); + }); + }); + } else { + if(tried < 3 || tried == undefined) { + if(tried == undefined) { + tried = 1; + } + namechange(data, guid, socket, tried + 1); + } + } + }); + } else { + Functions.removeSessionChatPass(Functions.getSession(socket), function() { + socket.emit('name', {type: "name", accepted: false}); + }); + } + }); }); }); } function removename(guid, coll, socket) { //coll = coll.replace(/ /g,''); - db.collection("user_names").find({"guid": guid}, function(err, docs) { - if(docs.length == 1) { - var old_name = docs[0].name; - Functions.removeSessionChatPass(Functions.getSession(socket), function() { - db.collection("user_names").update({"_id": "all_names"}, {$pull: {names: old_name}}, function(err, updated) { - db.collection("user_names").remove({"guid": guid}, function(err, removed) { - get_name(guid, {announce: true, old_name: old_name, channel: coll}); + checkIfChatEnabled(coll, socket, function() { + db.collection("user_names").find({"guid": guid}, function(err, docs) { + if(docs.length == 1) { + var old_name = docs[0].name; + Functions.removeSessionChatPass(Functions.getSession(socket), function() { + db.collection("user_names").update({"_id": "all_names"}, {$pull: {names: old_name}}, function(err, updated) { + db.collection("user_names").remove({"guid": guid}, function(err, removed) { + get_name(guid, {announce: true, old_name: old_name, channel: coll}); + }); }); }); - }); - } + } + }); }); } diff --git a/server/handlers/list_settings.js b/server/handlers/list_settings.js index 99f84f23..0ac0ed30 100644 --- a/server/handlers/list_settings.js +++ b/server/handlers/list_settings.js @@ -180,9 +180,9 @@ function conf_function(params, coll, guid, offline, socket) { var adminpass = params.adminpass; var skipping = params.skipping; var shuffling = params.shuffling; + var toggleChat = params.toggleChat; var userpass = Functions.decrypt_string(params.userpass); - if((!params.userpass_changed && frontpage) || (params.userpass_changed && userpass == "")) { userpass = ""; } else if(params.userpass_changed && userpass != "") { @@ -212,6 +212,7 @@ function conf_function(params, coll, guid, offline, socket) { longsongs:longsongs, adminpass:hash, desc: description, + toggleChat: toggleChat }; if(params.userpass_changed) { obj["userpass"] = userpass; @@ -220,7 +221,7 @@ function conf_function(params, coll, guid, offline, socket) { } db.collection(coll + "_settings").update({ id: "config" }, { $set:obj - }, function(err, docs){ + }, {upsert: true}, function(err, docs){ Functions.setSessionUserPass(Functions.getSession(socket), params.userpass, coll, function() { db.collection(coll + "_settings").find(function(err, docs){ if(docs[0].adminpass !== "") docs[0].adminpass = true; diff --git a/server/public/assets/js/admin.js b/server/public/assets/js/admin.js index 21f9cede..fc311188 100755 --- a/server/public/assets/js/admin.js +++ b/server/public/assets/js/admin.js @@ -22,7 +22,7 @@ var Admin = { } Helper.removeClass(".delete-context-menu", "context-menu-disabled"); names = ["vote","addsongs","longsongs","frontpage", "allvideos", - "removeplay", "skip", "shuffle", "userpass"]; + "removeplay", "skip", "shuffle", "userpass", "toggleChat"]; //Crypt.set_pass(chan.toLowerCase(), Crypt.tmp_pass); for (var i = 0; i < names.length; i++) { @@ -105,7 +105,7 @@ var Admin = { w_p = true; adminpass = ""; names = ["vote","addsongs","longsongs","frontpage", "allvideos", - "removeplay", "skip", "shuffle"]; + "removeplay", "skip", "shuffle", "toggleChat"]; document.getElementById("password").value = ""; Helper.css("#thumbnail_form", "display", "none"); Helper.css("#description_form", "display", "none"); @@ -146,9 +146,9 @@ var Admin = { music = conf_array.allvideos; longsongs = conf_array.longsongs; names = ["vote","addsongs","longsongs","frontpage", "allvideos", - "removeplay", "skip", "shuffle", "userpass"]; - - + "removeplay", "skip", "shuffle", "userpass", "toggleChat"]; + if(!conf.hasOwnProperty("toggleChat")) conf.toggleChat = true; + toggleChat = conf.toggleChat; hasadmin = conf_array.adminpass != ""; var show_disabled = true; if(hasadmin && Admin.logged_in || !hasadmin) { @@ -197,6 +197,8 @@ var Admin = { removeplay = form.removeplay.checked; skipping = form.skip.checked; shuffling = form.shuffle.checked; + toggleChat = form.toggleChat.checked; + var pass_send = userpass_changed && !form.userpass.checked ? "" : userpass; configs = { channel: chan.toLowerCase(), @@ -209,6 +211,7 @@ var Admin = { adminpass: adminpass == "" ? "" : Crypt.crypt_pass(adminpass), skipping: skipping, shuffling: shuffling, + toggleChat: toggleChat, userpass: Crypt.crypt_pass(pass_send), userpass_changed: userpass_changed }; diff --git a/server/public/assets/js/chat.js b/server/public/assets/js/chat.js index 2b572ac5..f4c7fb36 100755 --- a/server/public/assets/js/chat.js +++ b/server/public/assets/js/chat.js @@ -137,7 +137,7 @@ var Chat = { }, channelchat: function(data, time_sent, disable_blink) { - if(data.msg.substring(0,1) == ":" && !chat_active && !disable_blink) { + if(data.msg.substring(0,1) == ":" && !chat_active && !disable_blink && data.from.toLowerCase() != "system") { document.querySelector("#favicon").setAttribute("href", "/assets/images/highlogo.png"); unseen = true; chat_unseen = true; diff --git a/server/public/assets/js/listeners.js b/server/public/assets/js/listeners.js index c6fa7037..bf991f04 100755 --- a/server/public/assets/js/listeners.js +++ b/server/public/assets/js/listeners.js @@ -49,6 +49,7 @@ var frontpage = 1; var adminpass = ""; var showDiscovery = false; var player_ready = false; +var toggleChat = true; var viewers = 1; var temp_user_pass = ""; var zoff_api_token = "DwpnKVkaMH2HdcpJT2YPy783SY33byF5/32rbs0+xdU="; diff --git a/server/public/partials/channel/panel.handlebars b/server/public/partials/channel/panel.handlebars index f1ff09ed..516dea84 100755 --- a/server/public/partials/channel/panel.handlebars +++ b/server/public/partials/channel/panel.handlebars @@ -3,148 +3,7 @@ close