var Functions = require(pathThumbnails + "/handlers/functions.js"); var crypto = require("crypto"); var Filter = require("bad-words"); var filter = new Filter({ placeHolder: "x" }); /*var filter = { clean: function(str) { return str; } }*/ var projects = require(pathThumbnails + "/handlers/aggregates.js"); var db = require(pathThumbnails + "/handlers/db.js"); function password(inp, coll, guid, offline, socket) { var sessionId = Functions.getSession(socket); if (sessionId == "") sessionId = "empty"; if (inp !== undefined && inp !== null && inp !== "") { if ( !inp.hasOwnProperty("password") || !inp.hasOwnProperty("channel") || typeof inp.password != "string" || typeof inp.channel != "string" ) { var result = { channel: { expected: "string", got: inp.hasOwnProperty("channel") ? typeof inp.channel : undefined }, password: { expected: "password", got: inp.hasOwnProperty("password") ? typeof inp.password : undefined } }; socket.emit("update_required", result); return; } pw = inp.password; try { coll = inp.channel; if (coll.length == 0) return; coll = Functions.removeEmojis(coll).toLowerCase(); //coll = coll.replace(/_/g, ""); //coll = filter.clean(coll); } catch (e) { return; } //coll = coll.replace(/ /g,''); uncrypted = pw; pw = Functions.hash_pass(Functions.decrypt_string(pw), true); Functions.check_inlist(coll, guid, socket, offline, undefined, "place 8"); Functions.getSessionAdminUser(sessionId, coll, function( userpass, adminpass ) { adminpass = Functions.hash_pass(adminpass); db.collection(coll + "_settings").find(function(err, docs) { if (docs !== null && docs.length !== 0) { if ( docs[0].adminpass === "" || docs[0].adminpass == Functions.hash_pass(pw) ) { Functions.setSessionAdminPass( sessionId, inp.password, coll, function() { db.collection(coll + "_settings").update( { id: "config" }, { $set: { adminpass: Functions.hash_pass(pw) } }, function(err, docs) { if (adminpass != pw && adminpass != "") { socket.emit("toast", "changedpass"); } else { socket.emit("toast", "correctpass"); } socket.emit("pw", true); } ); } ); } else if ( docs[0].adminpass === "" || docs[0].adminpass == adminpass ) { Functions.setSessionAdminPass( sessionId, inp.password, coll, function() { db.collection(coll + "_settings").update( { id: "config" }, { $set: { adminpass: Functions.hash_pass(pw) } }, function(err, docs) { if (adminpass != pw) { socket.emit("toast", "changedpass"); } socket.emit("pw", true); } ); } ); } else { Functions.setSessionAdminPass( Functions.getSession(socket), "", coll, function() { socket.emit("toast", "wrongpass"); socket.emit("pw", false); } ); } } }); }); } else { var result = { inp: { expected: "string", got: typeof inpt } }; socket.emit("update_required", result); } } function conf_function(params, coll, guid, offline, socket) { if (params !== undefined && params !== null && params !== "") { if (coll !== undefined) { try { coll = params.channel; //.replace(/ /g,''); if (coll.length == 0) return; coll = Functions.removeEmojis(coll).toLowerCase(); //coll = coll.replace(/_/g, ""); //coll = filter.clean(coll); } catch (e) { return; } } if (coll == "" || coll == undefined || coll == null) { socket.emit("update_required"); return; } Functions.check_inlist(coll, guid, socket, offline, undefined, "place 9"); Functions.getSessionAdminUser(Functions.getSession(socket), coll, function( userpass, adminpass, gotten ) { if (gotten) { params.adminpass = adminpass; if (!params.userpass_changed) params.userpass = userpass; } if ( !params.hasOwnProperty("voting") || !params.hasOwnProperty("addsongs") || !params.hasOwnProperty("longsongs") || !params.hasOwnProperty("frontpage") || !params.hasOwnProperty("allvideos") || !params.hasOwnProperty("removeplay") || !params.hasOwnProperty("adminpass") || !params.hasOwnProperty("skipping") || !params.hasOwnProperty("shuffling") || !params.hasOwnProperty("channel") || typeof params.userpass != "string" || typeof params.adminpass != "string" || typeof params.voting != "boolean" || typeof params.addsongs != "boolean" || typeof params.longsongs != "boolean" || typeof params.frontpage != "boolean" || typeof params.allvideos != "boolean" || typeof params.removeplay != "boolean" || typeof params.skipping != "boolean" || typeof params.shuffling != "boolean" || typeof params.userpass_changed != "boolean" ) { var result = { adminpass: { expected: "string", got: params.hasOwnProperty("adminpass") ? typeof params.adminpass : undefined }, userpass: { expected: "string", got: params.hasOwnProperty("userpass") ? typeof params.userpass : undefined }, vote: { expected: "boolean", got: params.hasOwnProperty("vote") ? typeof params.vote : undefined }, addsongs: { expected: "boolean", got: params.hasOwnProperty("addsongs") ? typeof params.addsongs : undefined }, longsongs: { expected: "boolean", got: params.hasOwnProperty("longsongs") ? typeof params.longsongs : undefined }, frontpage: { expected: "boolean", got: params.hasOwnProperty("frontpage") ? typeof params.frontpage : undefined }, skipping: { expected: "boolean", got: params.hasOwnProperty("skipping") ? typeof params.skipping : undefined }, shuffling: { expected: "boolean", got: params.hasOwnProperty("shuffling") ? typeof params.shuffling : undefined }, userpass_changed: { expected: "boolean", got: params.hasOwnProperty("userpass_changed") ? typeof params.userpass_changed : undefined } }; socket.emit("update_required", result); return; } var voting = params.voting; var addsongs = params.addsongs; var longsongs = params.longsongs; var frontpage = params.frontpage; var allvideos = params.allvideos; var removeplay = params.removeplay; var adminpass = params.adminpass; var skipping = params.skipping; var shuffling = params.shuffling; var userpass = Functions.decrypt_string(params.userpass); if ( (!params.userpass_changed && frontpage) || (params.userpass_changed && userpass == "") ) { userpass = ""; } else if (params.userpass_changed && userpass != "") { frontpage = false; } var description = ""; var hash; if (params.description) description = params.description; if (adminpass !== "" && !gotten) { hash = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(adminpass), true) ); } else if (adminpass !== "" && gotten) { hash = Functions.hash_pass(adminpass); } else { hash = adminpass; } if (userpass != "") { if (!params.userpass_changed && gotten) { } else { userpass = crypto .createHash("sha256") .update(userpass) .digest("base64"); } } db.collection(coll + "_settings").find({ id: "config" }, function( err, docs ) { if ( docs !== null && docs.length !== 0 && (docs[0].adminpass === "" || docs[0].adminpass == hash) ) { var obj = { addsongs: addsongs, allvideos: allvideos, frontpage: frontpage, skip: skipping, vote: voting, removeplay: removeplay, shuffle: shuffling, longsongs: longsongs, adminpass: hash, desc: description }; if ( params.hasOwnProperty("toggleChat") && docs[0].adminpass != "" && docs[0].adminpass != undefined && docs[0].adminpass == hash ) { obj.toggleChat = params.toggleChat; } if ( params.hasOwnProperty("strictSkip") && docs[0].adminpass != "" && docs[0].adminpass != undefined && docs[0].adminpass == hash ) { obj.strictSkip = params.strictSkip; } if ( params.hasOwnProperty("strictSkipNumber") && docs[0].adminpass != "" && docs[0].adminpass != undefined && docs[0].adminpass == hash ) { try { obj.strictSkipNumber = parseInt(params.strictSkipNumber); } catch (e) {} } if (params.userpass_changed) { obj["userpass"] = userpass; } else if (frontpage) { obj["userpass"] = ""; } db.collection(coll + "_settings").update( { id: "config" }, { $set: obj }, function(err, docs) { Functions.setSessionUserPass( Functions.getSession(socket), obj["userpass"], coll, function() { db.collection(coll + "_settings").aggregate( [ { $match: { id: "config" } }, { $project: projects.toShowConfig } ], function(err, docs) { if (docs[0].adminpass !== "") docs[0].adminpass = true; if ( docs[0].hasOwnProperty("userpass") && docs[0].userpass != "" ) docs[0].userpass = true; else docs[0].userpass = false; io.to(coll).emit("conf", docs); socket.emit("toast", "savedsettings"); db.collection("frontpage_lists").update( { _id: coll }, { $set: { frontpage: frontpage, accessed: Functions.get_time() } }, { upsert: true }, function(err, docs) {} ); } ); } ); } ); } else { socket.emit("toast", "wrongpass"); } }); }); } else { var result = { params: { expected: "object", got: typeof params } }; socket.emit("update_required", result); } } module.exports.password = password; module.exports.conf_function = conf_function;