var Functions = require(pathThumbnails + "/handlers/functions.js"); var List = require(pathThumbnails + "/handlers/list.js"); var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); var Search = require(pathThumbnails + "/handlers/search.js"); var Chat = require(pathThumbnails + "/handlers/chat.js"); var crypto = require("crypto"); var Filter = require("bad-words"); var filter = new Filter({ placeHolder: "x" }); /*var filter = { clean: function(str) { return str; } }*/ var db = require(pathThumbnails + "/handlers/db.js"); function addFromOtherList(arr, guid, offline, socket) { var socketid = socket.zoff_id; if (typeof arr == "object") { if ( !arr.hasOwnProperty("channel") || !arr.hasOwnProperty("new_channel") || typeof arr.channel != "string" || typeof arr.new_channel != "string" ) { var result = { channel: { expected: "string", got: arr.hasOwnProperty("channel") ? typeof arr.channel : undefined }, new_channel: { expected: "string", got: arr.hasOwnProperty("new_channel") ? typeof arr.new_channel : undefined } }; socket.emit("update_required", result); return; } var channel = arr.channel; //.replace(/ /g,'').toLowerCase(); var new_channel = Functions.encodeChannelName(arr.new_channel); //.replace(/ /g, '').toLowerCase(); db.collection("frontpage_lists").find({ _id: new_channel }, function( err, fp ) { if (fp.length == 0 || channel == new_channel) { socket.emit("toast", "nolist"); return; } Functions.getSessionAdminUser( Functions.getSession(socket), channel, function(userpass, adminpass) { if (userpass != "" || arr.userpass == undefined) { arr.userpass = userpass; } else { arr.userpass = crypto .createHash("sha256") .update(Functions.decrypt_string(arr.userpass)) .digest("base64"); } if (adminpass != "" || arr.adminpass == undefined) { arr.adminpass = Functions.hash_pass(adminpass); } else { arr.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true) ); } Functions.getSessionAdminUser( Functions.getSession(socket), new_channel, function(userpass) { var otheruser = ""; if (userpass != "") { otheruser = userpass; } else { otheruser = crypto .createHash("sha256") .update(Functions.decrypt_string(otheruser)) .digest("base64"); } db.collection(channel).find({ now_playing: true }, function( e, np ) { var project_object = { id: 1, added: 1, guids: { $literal: [] }, now_playing: 1, title: 1, votes: { $literal: 0 }, start: 1, duration: 1, end: 1, type: 1, source: 1, thumbnail: 1, tags: 1 }; var to_set_np = true; if (np.length > 0) { project_object.now_playing = { $literal: false }; to_set_np = false; } db.collection(new_channel + "_settings").find( { id: "config" }, function(e, this_conf) { if ( this_conf.length > 0 && (this_conf[0].userpass == "" || !this_conf[0].userpass || this_conf[0].userpass == otheruser) ) { db.collection(channel + "_settings").find( { id: "config" }, function(e, this_conf) { var hash = arr.adminpass; if (this_conf.length == 0) { socket.emit("toast", "nolist"); return; } if ( this_conf[0].userpass == "" || !this_conf[0].userpass || this_conf[0].userpass == arr.userpass ) { var connection_id = Functions.hash_pass( socket.handshake.headers["user-agent"] + socket.handshake.address + socket.handshake.headers["accept-language"] ); Functions.checkTimeout( "add_playlist", 60, channel, connection_id, this_conf[0].adminpass, hash, socket, function() { if ( (this_conf[0].addsongs === true && (hash == this_conf[0].adminpass || this_conf[0].adminpass === "")) || this_conf[0].addsongs === false ) { db.collection(new_channel).aggregate( [ { $match: { type: "video" } }, { $project: project_object } ], function(e, docs) { var path = require("path"); var mongo_config = require(path.join( path.join(__dirname, "../config/"), "mongo_config.js" )); var MongoClient = require("mongodb") .MongoClient; var url = "mongodb://" + mongo_config.host + ":" + mongo_config.port + "/"; MongoClient.connect( url, function(err, _db) { var dbo = _db.db(mongo_config.config); dbo .collection(channel) .insertMany( docs, { ordered: false }, function(err, res) { db.collection(channel).count( { type: { $ne: "suggested" } }, function(err, count) { db.collection( channel + "_settings" ).update( { id: "config" }, { $set: { startTime: Functions.get_time() } }, function(e, d) { if (to_set_np) { var to_change = { _id: channel, count: count, frontpage: true, accessed: Functions.get_time() }; db.collection( new_channel ).find( { now_playing: true }, function( e, np_docs ) { to_change.id = np_docs[0].id; to_change.title = np_docs[0].title; db.collection( "frontpage_lists" ).find( { _id: new_channel }, function( e, doc ) { if ( doc.length > 0 && ((doc[0] .thumbnail != "" && doc[0] .thumbnail != undefined && (doc[0].thumbnail.indexOf( "https://i1.sndcdn.com" ) > -1 || doc[0].thumbnail.indexOf( "https://w1.sndcdn.com" ) > -1)) || (doc[0] .thumbnail == "" || doc[0] .thumbnail == undefined)) ) { to_change.thumbnail = np_docs[0].thumbnail; } db.collection( "frontpage_lists" ).update( { _id: channel }, { $set: to_change }, function( e, d ) { List.send_list( channel, undefined, false, true, false ); List.send_play( channel, undefined ); socket.emit( "toast", "addedplaylist" ); _db.close(); } ); } ); } ); } else { db.collection( "frontpage_lists" ).update( { _id: channel }, { $set: { count: count } }, function(e, d) { List.send_list( channel, undefined, false, true, false ); List.send_play( channel, undefined ); socket.emit( "toast", "addedplaylist" ); _db.close(); } ); } } ); } ); } ); } ); } ); } else { socket.emit("toast", "listhaspass"); return; } }, "Log in to do that, or please wait " ); } else { socket.emit("auth_required"); return; } } ); } else { socket.emit("toast", "other_list_pass"); return; } } ); }); } ); } ); }); } } function addPlaylist(arr, guid, offline, socket) { var socketid = socket.zoff_id; if (typeof arr == "object") { if ( !arr.hasOwnProperty("channel") || !arr.hasOwnProperty("songs") || typeof arr.channel != "string" || typeof arr.songs != "object" ) { var result = { channel: { expected: "string", got: arr.hasOwnProperty("channel") ? typeof arr.channel : undefined }, songs: { expected: "object", got: arr.hasOwnProperty("songs") ? typeof arr.songs : undefined } }; socket.emit("update_required", result); return; } var channel = arr.channel; //.replace(/ /g,'').toLowerCase(); if (arr.length == 0 || arr.songs.length == 0) { socket.emit("toast", "Empty list.."); return; } db.collection("frontpage_lists").find({ _id: channel }, function(err, fp) { if (fp.length == 0) { socket.emit("toast", "nolist"); return; } Functions.getSessionAdminUser( Functions.getSession(socket), channel, function(userpass, adminpass) { if (userpass != "" || arr.userpass == undefined) { arr.userpass = userpass; } else { arr.userpass = crypto .createHash("sha256") .update(Functions.decrypt_string(arr.userpass)) .digest("base64"); } if (adminpass != "" || arr.adminpass == undefined) { arr.adminpass = Functions.hash_pass(adminpass); } else { arr.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true) ); } db.collection(channel).find({ now_playing: true }, function(e, np) { var now_playing = false; if (np.length == 0) now_playing = true; db.collection(channel + "_settings").find( { id: "config" }, function(e, conf) { if (arr.length == 0 || arr.songs.length == 0) { socket.emit("toast", "Empty list.."); return; } if (conf.length > 0) { var hash = arr.adminpass; if ( conf[0].userpass == "" || !conf[0].userpass || conf[0].userpass == arr.userpass ) { if ( (conf[0].addsongs === true && (hash == conf[0].adminpass || conf[0].adminpass === "")) || conf[0].addsongs === false ) { var connection_id = Functions.hash_pass( socket.handshake.headers["user-agent"] + socket.handshake.address + socket.handshake.headers["accept-language"] ); Functions.checkTimeout( "add_playlist", 60, channel, connection_id, conf[0].adminpass, hash, socket, function() { var path = require("path"); var mongo_config = require(path.join( path.join(__dirname, "../config/"), "mongo_config.js" )); var MongoClient = require("mongodb").MongoClient; var url = "mongodb://" + mongo_config.host + ":" + mongo_config.port + "/"; MongoClient.connect( url, function(err, _db) { var dbo = _db.db(mongo_config.config); var number_elements = arr.songs.length + 1; var time = Functions.get_time() - number_elements; var to_set_np = now_playing; var bulk = dbo .collection(channel) .initializeUnorderedBulkOp({ useLegacyOps: true }); for (var i = 0; i < arr.songs.length; i++) { var this_element = arr.songs[i]; if ( !this_element.hasOwnProperty("duration") || !this_element.hasOwnProperty("id") || !this_element.hasOwnProperty("title") ) { continue; } this_element.id = this_element.id + ""; this_element.added = time; this_element.now_playing = now_playing; this_element.votes = 0; this_element.guids = []; if (!this_element.hasOwnProperty("start")) this_element.start = 0; if (!this_element.hasOwnProperty("end")) this_element.end = this_element.duration; this_element.start = parseInt( this_element.start ); this_element.end = parseInt(this_element.end); this_element.type = "video"; if (this_element.tags == undefined) this_element.tags = []; this_element.duration = parseInt( this_element.duration ); if (this_element.start > this_element.end) { this_element.start = 0; } if (this_element.source == "soundcloud") { if ( this_element.thumbnail.indexOf( "https://i1.sndcdn.com" ) > -1 || this_element.thumbnail.indexOf( "https://w1.sndcdn.com" ) > -1 ) { this_element.thumbnail = this_element.thumbnail; } else { this_element.thumbnail = "https://img.youtube.com/vi/404_notfound/mqdefault.jpg"; } } else if (this_element.source == "youtube") this_element.thumbnail = "https://img.youtube.com/vi/" + this_element.id + "/mqdefault.jpg"; if (now_playing) { now_playing = false; } bulk.insert(this_element); } bulk.execute(function(err, results) { db.collection(channel).count( { type: { $ne: "suggested" } }, function(err, count) { db.collection(channel + "_settings").update( { id: "config" }, { $set: { startTime: Functions.get_time() } }, function(e, d) { if (to_set_np) { var to_change = { _id: channel, count: count, frontpage: true, accessed: Functions.get_time() }; db.collection(channel).find( { now_playing: true }, function(e, np_docs) { to_change.id = np_docs[0].id; to_change.title = np_docs[0].title; db.collection( "frontpage_lists" ).find({ _id: channel }, function( e, doc ) { if ( doc.length > 0 && ((doc[0].thumbnail != "" && doc[0].thumbnail != undefined && (doc[0].thumbnail.indexOf( "https://i1.sndcdn.com" ) > -1 || doc[0].thumbnail.indexOf( "https://w1.sndcdn.com" ) > -1)) || (doc[0].thumbnail == "" || doc[0].thumbnail == undefined)) ) { to_change.thumbnail = np_docs[0].thumbnail; } db.collection( "frontpage_lists" ).update( { _id: channel }, { $set: to_change }, function(e, d) { List.send_list( channel, undefined, false, true, false ); List.send_play( channel, undefined ); socket.emit( "toast", "addedplaylist" ); _db.close(); } ); }); } ); } else { db.collection( "frontpage_lists" ).update( { _id: channel }, { $set: { count: count } }, function(e, d) { List.send_list( channel, undefined, false, true, false ); List.send_play( channel, undefined ); socket.emit( "toast", "addedplaylist" ); _db.close(); } ); } Search.get_genres_list_recursive( arr.songs, channel ); } ); } ); }); } ); }, "Log in to do that, or please wait " ); } else { socket.emit("toast", "listhaspass"); return; } } else { socket.emit("auth_required"); return; } } else { socket.emit("toast", "nolist"); return; } } ); }); } ); }); } } function add_function(arr, coll, guid, offline, socket) { var socketid = socket.zoff_id; if ( typeof arr === "object" && arr !== undefined && arr !== null && arr !== "" && !isNaN(parseInt(arr.duration)) ) { if ( coll == "" || coll == undefined || coll == null || !arr.hasOwnProperty("duration") ) { var result = { start: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("start") ? typeof arr.start : undefined }, end: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("end") ? typeof arr.end : undefined } }; socket.emit("update_required", result); return; } try { if (arr.start == undefined) arr.start = 0; if (arr.end == undefined) arr.end = parseInt(arr.duration); var start = parseInt(arr.start); var end = parseInt(arr.end); if (start < 0) { socket.emit("toast", "faulty_start_end"); return; } if (end < 0) { socket.emit("toast", "faulty_start_end"); return; } if (start >= end) { start = 0; arr.duration = end - start; } } catch (e) { return; } if (!arr.hasOwnProperty("source")) { arr.source = "youtube"; } if ( typeof arr.id != "string" || typeof arr.start != "number" || typeof arr.end != "number" || typeof arr.title != "string" || typeof arr.list != "string" || typeof arr.duration != "number" || (arr.source == "soundcloud" && (!arr.hasOwnProperty("thumbnail") || !Functions.isUrl(arr.thumbnail))) ) { var result = { start: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("start") ? typeof arr.start : undefined }, end: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("end") ? typeof arr.end : undefined }, title: { expected: "string", got: arr.hasOwnProperty("title") ? typeof arr.title : undefined }, list: { expected: "string", got: arr.hasOwnProperty("list") ? typeof arr.list : undefined }, duration: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("duration") ? typeof arr.duration : undefined }, pass: { expected: "string", got: arr.hasOwnProperty("pass") ? typeof arr.pass : undefined }, adminpass: { expected: "string", got: arr.hasOwnProperty("adminpass") ? typeof arr.adminpass : undefined }, source: { expected: "string (youtube or soundcloud)", got: arr.hasOwnProperty("source") ? typeof arr.source : undefined }, thumbnail: { expected: "url if source == soundcloud", got: arr.hasOwnProperty("thumbnail") ? typeof arr.thumbnail : undefined } }; socket.emit("update_required", result); return; } if (arr.hasOwnProperty("offsiteAdd") && arr.offsiteAdd) { coll = arr.list; } Functions.getSessionAdminUser(Functions.getSession(socket), coll, function( userpass, adminpass ) { if (adminpass != "" || arr.adminpass == undefined) { arr.adminpass = Functions.hash_pass(adminpass); } else { arr.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(arr.adminpass), true) ); } if (userpass != "" || arr.pass == undefined) { arr.pass = userpass; } else { arr.pass = crypto .createHash("sha256") .update(Functions.decrypt_string(arr.pass)) .digest("base64"); } db.collection(coll + "_settings").find(function(err, docs) { if ( docs.length > 0 && (docs[0].userpass == undefined || docs[0].userpass == "" || (arr.hasOwnProperty("pass") && docs[0].userpass == arr.pass)) ) { if ( (arr.hasOwnProperty("offsiteAdd") && !arr.offsiteAdd) || !arr.hasOwnProperty("offsiteAdd") ) { Functions.check_inlist( coll, guid, socket, offline, undefined, "place 5" ); } var id = arr.id + ""; var title = arr.title; var hash = arr.adminpass; var duration = parseInt(arr.duration); var source = arr.source; var tags = arr.tags; conf = docs; Chat.getUserNameByGuid(guid, function(username) { if ( docs !== null && docs.length !== 0 && ((docs[0].addsongs === true && (hash == docs[0].adminpass || docs[0].adminpass === "")) || docs[0].addsongs === false) ) { db.collection(coll).find( { id: id, type: { $ne: "suggested" } }, function(err, docs) { if (docs !== null && docs.length === 0) { var guids = [guid]; var added = Functions.get_time(); var votes = 1; db.collection(coll).find({ now_playing: true }, function( err, docs ) { if (docs !== null && docs.length === 0) { np = true; } else { np = false; } var new_song = { added: added, guids: guids, id: id, now_playing: np, title: title, tags: tags, votes: votes, duration: duration, start: parseInt(start), end: parseInt(end), type: "video", source: source, added_by: username }; if (source == "soundcloud") { if ( arr.thumbnail.indexOf("https://i1.sndcdn.com") > -1 || arr.thumbnail.indexOf("https://w1.sndcdn.com") > -1 ) { new_song.thumbnail = arr.thumbnail; } else { new_song.thumbnail = "https://img.youtube.com/vi/404_notfound/mqdefault.jpg"; } } else if (source == "youtube") new_song.thumbnail = "https://img.youtube.com/vi/" + new_song.id + "/mqdefault.jpg"; db.collection(coll).update( { id: id }, new_song, { upsert: true }, function(err, docs) { new_song._id = "asd"; if (np) { List.send_list(coll, undefined, false, true, false); db.collection(coll + "_settings").update( { id: "config" }, { $set: { startTime: Functions.get_time() } } ); List.send_play(coll, undefined); var thumbnail = arr.thumbnail != undefined ? arr.thumbnail : undefined; Frontpage.update_frontpage( coll, id, title, thumbnail, arr.source ); if (source != "soundcloud") Search.get_correct_info(new_song, coll, false); else if (source == "soundcloud") Search.get_genres_soundcloud(new_song, coll); } else { io.to(coll).emit("channel", { type: "added", value: new_song }); if (source != "soundcloud") Search.get_correct_info(new_song, coll, true); else if (source == "soundcloud") Search.get_genres_soundcloud(new_song, coll); } db.collection("frontpage_lists").update( { _id: coll }, { $inc: { count: 1 }, $set: { accessed: Functions.get_time() } }, { upsert: true }, function(err, docs) {} ); List.getNextSong(coll, undefined); } ); socket.emit("toast", "addedsong"); }); } else { vote(coll, id, guid, socket); } } ); } else { db.collection(coll).find({ id: id }, function(err, docs) { if (docs.length === 0) { var suggestedAdd = { added: Functions.get_time(), guids: [guid], id: id, now_playing: false, title: title, votes: 1, duration: duration, start: start, end: end, type: "suggested", tags: tags, added_by: username }; var source = arr.source; if (source == "soundcloud") { suggestedAdd.thumbnail = arr.thumbnail; suggestedAdd.source = source; } else { suggestedAdd.source = "youtube"; } db.collection(coll).update( { id: id }, { $set: suggestedAdd }, { upsert: true }, function(err, docs) { socket.emit("toast", "suggested"); var toSend = suggestedAdd; toSend.guids = []; if (source == "soundcloud") toSend.thumbnail = arr.thumbnail; io.to(coll).emit("suggested", toSend); if (source != "soundcloud") Search.get_correct_info(suggestedAdd, coll, false); else if (source == "soundcloud") Search.get_genres_soundcloud(suggestedAdd, coll); } ); } else if (docs[0].now_playing === true) { socket.emit("toast", "alreadyplay"); } else { if (conf[0].vote === false) vote(coll, id, guid, socket); else socket.emit("toast", "listhaspass"); } }); } }); } else { if ( (arr.hasOwnProperty("offsiteAdd") && !arr.offsiteAdd) || !arr.hasOwnProperty("offsiteAdd") ) { socket.emit("auth_required"); } else { socket.emit("toast", "listhaspass"); } } }); }); } else { var result = { arr: { expected: "object", got: typeof arr }, duration: { expected: "number or string that can be cast to int", got: arr.hasOwnProperty("duration") ? typeof arr.duration : undefined } }; socket.emit("update_required", result); } } function voteUndecided(msg, coll, guid, offline, socket) { var socketid = socket.zoff_id; if (typeof msg === "object" && msg !== undefined && msg !== null) { if (msg.hasOwnProperty("id")) msg.id = msg.id + ""; if ( !msg.hasOwnProperty("channel") || !msg.hasOwnProperty("id") || !msg.hasOwnProperty("type") || typeof msg.channel != "string" || typeof msg.id != "string" || typeof msg.type != "string" ) { var result = { channel: { expected: "string", got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined }, id: { expected: "string", got: msg.hasOwnProperty("id") ? typeof msg.id : undefined }, type: { expected: "string", got: msg.hasOwnProperty("type") ? typeof msg.type : undefined }, adminpass: { expected: "adminpass", got: msg.hasOwnProperty("adminpass") ? typeof msg.adminpass : undefined }, pass: { expected: "string", got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined } }; socket.emit("update_required", result); return; } coll = msg.channel.toLowerCase(); //.replace(/ /g,''); coll = Functions.removeEmojis(coll).toLowerCase(); //coll = filter.clean(coll); Functions.getSessionAdminUser(Functions.getSession(socket), coll, function( userpass, adminpass ) { if (adminpass != "" || msg.adminpass == undefined) { msg.adminpass = Functions.hash_pass(adminpass); } else { msg.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(msg.adminpass), true) ); } if (userpass != "" || msg.pass == undefined) { msg.pass = userpass; } else if (msg.hasOwnProperty("pass")) { msg.pass = crypto .createHash("sha256") .update(Functions.decrypt_string(msg.pass)) .digest("base64"); } db.collection(coll + "_settings").find({ id: "config" }, function( err, docs ) { if ( docs.length > 0 && (docs[0].userpass == undefined || docs[0].userpass == "" || (msg.hasOwnProperty("pass") && docs[0].userpass == msg.pass)) ) { Functions.check_inlist( coll, guid, socket, offline, undefined, "place 6" ); if (msg.type == "del") { del(msg, socket, socketid); } else { var id = msg.id; var hash = msg.adminpass; if ( docs !== null && docs.length !== 0 && ((docs[0].vote === true && (hash == docs[0].adminpass || docs[0].adminpass === "")) || docs[0].vote === false) ) { vote(coll, id, guid, socket); } else { socket.emit("toast", "listhaspass"); } } } else { socket.emit("auth_required"); } }); }); } else { var result = { msg: { expected: "object", got: typeof msg } }; socket.emit("update_required", result); } } function shuffle(msg, coll, guid, offline, socket) { var socketid = socket.zoff_id; if (!msg.hasOwnProperty("channel") || typeof msg.channel != "string") { var result = { channel: { expected: "string", got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined }, adminpass: { expected: "string", got: msg.hasOwnProperty("adminpass") ? typeof msg.adminpass : undefined }, pass: { expected: "string", got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined } }; socket.emit("update_required", result); return; } coll = msg.channel.toLowerCase(); //.replace(/ /g,''); coll = Functions.removeEmojis(coll).toLowerCase(); //coll = filter.clean(coll); Functions.getSessionAdminUser(Functions.getSession(socket), coll, function( userpass, adminpass ) { if (adminpass != "" || msg.adminpass == undefined) { msg.adminpass = Functions.hash_pass(adminpass); } else if (msg.adminpass != "") { msg.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(msg.adminpass), true) ); } else { msg.adminpass = ""; } if (userpass != "" || msg.pass == undefined) { msg.pass = userpass; } else if (msg.hasOwnProperty("pass")) { msg.pass = crypto .createHash("sha256") .update(Functions.decrypt_string(msg.pass)) .digest("base64"); } Functions.checkTimeout( "shuffle", 5, coll, coll, "foo", "bar", socket, function() { Functions.check_inlist( coll, guid, socket, offline, undefined, "place 7" ); var hash = msg.adminpass; 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 == msg.pass)) ) { if ( docs !== null && docs.length !== 0 && ((docs[0].adminpass == hash && docs[0].adminpass != "") || docs[0].shuffle === false) ) { db.collection(coll) .find({ now_playing: false }) .forEach(function(err, docs) { if (!docs) { List.send_list(coll, undefined, false, true, false, true); socket.emit("toast", "shuffled"); return; } else { num = Math.floor(Math.random() * 1000000); db.collection(coll).update( { id: docs.id }, { $set: { added: num } } ); } }); } else socket.emit("toast", "wrongpass"); } else { socket.emit("auth_required"); } }); var complete = function(tot, curr) { if (tot == curr) { List.send_list(coll, undefined, false, true, false); List.getNextSong(coll, undefined); } }; } ); }); } function del(params, socket, socketid) { if (params.id) { var coll = Functions.removeEmojis(params.channel).toLowerCase(); //coll = coll.replace(/_/g, "").replace(/ /g,''); //coll = filter.clean(coll); db.collection(coll + "_settings").find(function(err, docs) { if ( docs !== null && docs.length !== 0 && docs[0].adminpass == params.adminpass ) { db.collection(coll).find({ id: params.id }, function(err, docs) { var dont_increment = false; if (docs[0]) { if (docs[0].type == "suggested") { dont_increment = true; } db.collection(coll).remove({ id: params.id }, function(err, docs) { socket.emit("toast", "deletesong"); io.to(coll).emit("channel", { type: "deleted", value: params.id }); if (!dont_increment) db.collection("frontpage_lists").update( { _id: coll, count: { $gt: 0 } }, { $inc: { count: -1 }, $set: { accessed: Functions.get_time() } }, { upsert: true }, function(err, docs) {} ); }); } }); } }); } } function delete_all(msg, coll, guid, offline, socket) { var socketid = socket.zoff_id; if (typeof msg == "object") { if (!msg.hasOwnProperty("channel") || typeof msg.channel != "string") { var result = { channel: { expected: "string", got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined }, adminpass: { expected: "adminpass", got: msg.hasOwnProperty("adminpass") ? typeof msg.adminpass : undefined }, pass: { expected: "string", got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined } }; socket.emit("update_required", result); return; } if (coll == undefined) { coll = msg.channel; } //coll = coll.replace(/ /g,''); coll = Functions.removeEmojis(coll).toLowerCase(); //coll = filter.clean(coll); Functions.getSessionAdminUser(Functions.getSession(socket), coll, function( userpass, adminpass, gotten ) { if (adminpass != "" || msg.adminpass == undefined) { msg.adminpass = Functions.hash_pass(adminpass); } else if (msg.adminpass != "") { msg.adminpass = Functions.hash_pass( Functions.hash_pass(Functions.decrypt_string(msg.adminpass), true) ); } if (userpass != "" || msg.pass == undefined) { msg.pass = userpass; } else { msg.pass = crypto .createHash("sha256") .update(Functions.decrypt_string(msg.pass)) .digest("base64"); } var hash = msg.adminpass; var hash_userpass = msg.pass; db.collection(coll + "_settings").find(function(err, conf) { if (conf.length == 1 && conf) { conf = conf[0]; if ( conf.adminpass == hash && conf.adminpass != "" && (conf.userpass == "" || conf.userpass == undefined || (conf.userpass != "" && conf.userpass != undefined && conf.pass == hash_userpass)) ) { db.collection(coll).remove( { views: { $exists: false }, type: "video" }, { multi: true }, function(err, succ) { List.send_list(coll, false, true, true, true); db.collection("frontpage_lists").update( { _id: coll }, { $set: { count: 0, accessed: Functions.get_time() } }, { upsert: true }, function(err, docs) {} ); socket.emit("toast", "deleted_songs"); } ); } else { socket.emit("toast", "listhaspass"); } } }); }); } else { var result = { msg: { expected: "object", got: typeof msg } }; socket.emit("update_required", result); return; } } function vote(coll, id, guid, socket) { //coll = coll.replace(/ /g,''); db.collection(coll).find( { id: id, now_playing: false, type: "video" }, function(err, docs) { if ( docs !== null && docs.length > 0 && !Functions.contains(docs[0].guids, guid) ) { db.collection(coll).update( { id: id }, { $inc: { votes: 1 }, $set: { added: Functions.get_time() }, $push: { guids: guid } }, function(err, docs) { socket.emit("toast", "voted"); io.to(coll).emit("channel", { type: "vote", value: id, time: Functions.get_time() }); List.getNextSong(coll, undefined); } ); } else { socket.emit("toast", "alreadyvoted"); } } ); } module.exports.addPlaylist = addPlaylist; module.exports.addFromOtherList = addFromOtherList; module.exports.add_function = add_function; module.exports.voteUndecided = voteUndecided; module.exports.shuffle = shuffle; module.exports.del = del; module.exports.delete_all = delete_all; module.exports.vote = vote;