mirror of
				https://github.com/KevinMidboe/zoff.git
				synced 2025-10-29 18:00:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			934 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			934 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var cookieParser = require("cookie-parser");
 | |
| var cookie = require("cookie");
 | |
| 
 | |
| var Functions = require(pathThumbnails + "/handlers/functions.js");
 | |
| var ListChange = require(pathThumbnails + "/handlers/list_change.js");
 | |
| var Chat = require(pathThumbnails + "/handlers/chat.js");
 | |
| var List = require(pathThumbnails + "/handlers/list.js");
 | |
| var Suggestions = require(pathThumbnails + "/handlers/suggestions.js");
 | |
| var ListSettings = require(pathThumbnails + "/handlers/list_settings.js");
 | |
| var Frontpage = require(pathThumbnails + "/handlers/frontpage.js");
 | |
| var Search = require(pathThumbnails + "/handlers/search.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");
 | |
| 
 | |
| module.exports = function() {
 | |
|   io.on("connection", function(socket) {
 | |
|     try {
 | |
|       var parsedCookies = cookie.parse(socket.handshake.headers.cookie);
 | |
|       socket.cookie_id = parsedCookies["_uI"];
 | |
|       //return socket.guid;
 | |
|     } catch (e) {
 | |
|       socket.cookie_id = "empty";
 | |
|     }
 | |
|     socket.zoff_id = socket.id;
 | |
|     socket.emit("get_list");
 | |
|     var guid = socket.cookie_id;
 | |
|     if (guid == "empty" || guid == null || guid == undefined)
 | |
|       guid = Functions.hash_pass(
 | |
|         socket.handshake.headers["user-agent"] +
 | |
|           socket.handshake.address +
 | |
|           socket.handshake.headers["accept-language"]
 | |
|       );
 | |
| 
 | |
|     socket.guid = guid;
 | |
|     socket.on("close", function() {});
 | |
| 
 | |
|     socket.on("pinging", function() {
 | |
|       socket.emit("ok");
 | |
|     });
 | |
| 
 | |
|     var ping_timeout;
 | |
|     var socketid = socket.zoff_id;
 | |
|     var coll;
 | |
|     var in_list = false;
 | |
|     var name = "";
 | |
|     var short_id;
 | |
|     Chat.get_name(guid, { announce: false, socket: socket });
 | |
|     var offline = false;
 | |
|     var chromecast_object = false;
 | |
| 
 | |
|     socket.emit("guid", guid);
 | |
| 
 | |
|     socket.on("self_ping", function(msg) {
 | |
|       var channel = msg.channel;
 | |
|       if (channel.indexOf("?") > -1) {
 | |
|         channel = channel.substring(0, channel.indexOf("?"));
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       //channel = channel.replace(/ /g,'');
 | |
|       if (offline) {
 | |
|         db.collection("connected_users").update(
 | |
|           { _id: "offline_users" },
 | |
|           { $addToSet: { users: guid } },
 | |
|           { upsert: true },
 | |
|           function(err, docs) {}
 | |
|         );
 | |
|       } else {
 | |
|         db.collection("connected_users").update(
 | |
|           { _id: channel },
 | |
|           { $addToSet: { users: guid } },
 | |
|           { upsert: true },
 | |
|           function(err, docs) {
 | |
|             db.collection("frontpage_lists").update(
 | |
|               { _id: channel },
 | |
|               { $inc: { viewers: 1 } },
 | |
|               { upsert: true },
 | |
|               function() {}
 | |
|             );
 | |
|           }
 | |
|         );
 | |
|       }
 | |
|       if (channel != "" && channel != undefined) {
 | |
|         db.collection("connected_users").update(
 | |
|           { _id: "total_users" },
 | |
|           { $addToSet: { total_users: guid + channel } },
 | |
|           { upsert: true },
 | |
|           function(err, docs) {}
 | |
|         );
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     socket.on("logout", function() {
 | |
|       Functions.removeSessionAdminPass(
 | |
|         Functions.getSession(socket),
 | |
|         coll,
 | |
|         function() {}
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("next_song", function(obj) {
 | |
|       if (obj == undefined || !obj.hasOwnProperty("channel")) return;
 | |
|       db.collection(obj.channel + "_settings").find(function(e, docs) {
 | |
|         if (docs.length == 0) return;
 | |
|         var pass = "";
 | |
|         if (obj.hasOwnProperty("pass")) {
 | |
|           pass = crypto
 | |
|             .createHash("sha256")
 | |
|             .update(Functions.decrypt_string(obj.pass))
 | |
|             .digest("base64");
 | |
|         }
 | |
|         if (
 | |
|           docs.length > 0 &&
 | |
|           (docs[0].userpass == undefined ||
 | |
|             docs[0].userpass == "" ||
 | |
|             docs[0].userpass == pass)
 | |
|         ) {
 | |
|           List.getNextSong(obj.channel, socket);
 | |
|         }
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     socket.on("chromecast", function(msg) {
 | |
|       try {
 | |
|         if (
 | |
|           typeof msg == "object" &&
 | |
|           msg.hasOwnProperty("guid") &&
 | |
|           msg.hasOwnProperty("socket_id") &&
 | |
|           msg.hasOwnProperty("channel") &&
 | |
|           typeof msg.guid == "string" &&
 | |
|           typeof msg.channel == "string" &&
 | |
|           typeof msg.socket_id == "string" &&
 | |
|           msg.channel != ""
 | |
|         ) {
 | |
|           if (msg.hasOwnProperty("channel")) {
 | |
|             msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|           }
 | |
|           db.collection("connected_users").find({ _id: msg.channel }, function(
 | |
|             err,
 | |
|             connected_users_channel
 | |
|           ) {
 | |
|             if (
 | |
|               connected_users_channel.length > 0 &&
 | |
|               connected_users_channel[0].users.indexOf(msg.guid) > -1
 | |
|             ) {
 | |
|               coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|               coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|               //coll = filter.clean(coll);
 | |
|               if (coll.indexOf("?") > -1) {
 | |
|                 coll = coll.substring(0, coll.indexOf("?"));
 | |
|               }
 | |
|               Functions.setChromecastHost(
 | |
|                 socket.cookie_id,
 | |
|                 msg.socket_id,
 | |
|                 msg.channel,
 | |
|                 function(results) {}
 | |
|               );
 | |
|               //socket.cookie_id = msg.guid;
 | |
|               guid = msg.guid;
 | |
|               socketid = msg.socket_id;
 | |
|               socket.zoff_id = socketid;
 | |
| 
 | |
|               in_list = true;
 | |
|               chromecast_object = true;
 | |
|               socket.join(coll);
 | |
|             }
 | |
|           });
 | |
|         }
 | |
|       } catch (e) {
 | |
|         return;
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     socket.on("get_id", function() {
 | |
|       socket.emit("id_chromecast", {
 | |
|         cookie_id: Functions.getSession(socket),
 | |
|         guid: guid
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     socket.on("error_video", function(msg) {
 | |
|       try {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|         var _list = msg.channel; //.replace(/ /g,'');
 | |
|         if (_list.length == 0) return;
 | |
|         if (_list.indexOf("?") > -1) {
 | |
|           _list = _list.substring(0, _list.indexOf("?"));
 | |
|           msg.channel = _list;
 | |
|         }
 | |
|         coll = Functions.removeEmojis(_list).toLowerCase();
 | |
|         //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|         //coll = filter.clean(coll);
 | |
|       } catch (e) {
 | |
|         return;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Search.check_error_video(msg, coll);
 | |
|     });
 | |
| 
 | |
|     socket.on("get_spread", function() {
 | |
|       db.collection("connected_users").find({ _id: "total_users" }, function(
 | |
|         err,
 | |
|         tot
 | |
|       ) {
 | |
|         db.collection("connected_users").find(
 | |
|           { _id: "offline_users" },
 | |
|           function(err, off) {
 | |
|             db.collection("connected_users").find(
 | |
|               { _id: { $ne: "total_users" }, _id: { $ne: "offline_users" } },
 | |
|               function(err, users_list) {
 | |
|                 if (tot.length > 0 && off.length == 0) {
 | |
|                   socket.emit("spread_listeners", {
 | |
|                     offline: 0,
 | |
|                     total: tot[0].total_users.length,
 | |
|                     online_users: users_list
 | |
|                   });
 | |
|                 } else if (tot.length > 0 && off.length > 0) {
 | |
|                   socket.emit("spread_listeners", {
 | |
|                     offline: off[0].users.length,
 | |
|                     total: tot[0].total_users.length,
 | |
|                     online_users: users_list
 | |
|                   });
 | |
|                 }
 | |
|               }
 | |
|             );
 | |
|           }
 | |
|         );
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     socket.on("suggest_thumbnail", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Suggestions.thumbnail(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("suggest_description", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Suggestions.description(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("suggest_rules", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Suggestions.rules(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("namechange", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Chat.namechange(msg, guid, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("removename", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       if (typeof msg != "object" || !msg.hasOwnProperty("channel")) {
 | |
|         var result = {
 | |
|           channel: {
 | |
|             expected: "string",
 | |
|             got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined
 | |
|           }
 | |
|         };
 | |
|         socket.emit("update_required", result);
 | |
|         return;
 | |
|       }
 | |
|       Chat.removename(guid, msg.channel, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("offline", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       if (
 | |
|         !msg.hasOwnProperty("status") ||
 | |
|         !msg.hasOwnProperty("channel") ||
 | |
|         typeof msg.status != "boolean" ||
 | |
|         typeof msg.channel != "string"
 | |
|       ) {
 | |
|         var result = {
 | |
|           status: {
 | |
|             expected: "boolean",
 | |
|             got: msg.hasOwnProperty("status") ? typeof msg.status : undefined
 | |
|           },
 | |
|           channel: {
 | |
|             expected: "string",
 | |
|             got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined
 | |
|           }
 | |
|         };
 | |
|         socket.emit("update_required", result);
 | |
|         return;
 | |
|       }
 | |
|       var status = msg.status;
 | |
|       var channel = Functions.encodeChannelName(msg.channel); //.replace(/ /g,'');
 | |
|       if (status) {
 | |
|         in_list = false;
 | |
|         offline = true;
 | |
|         if (channel != "") coll = channel;
 | |
|         if (coll !== undefined) {
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = filter.clean(coll);
 | |
|           db.collection("connected_users").findAndModify(
 | |
|             {
 | |
|               query: { _id: coll },
 | |
|               update: { $pull: { users: guid } },
 | |
|               upsert: true
 | |
|             },
 | |
|             function(err, updated, d) {
 | |
|               if (d.n == 1) {
 | |
|                 var num = 0;
 | |
|                 if (updated && updated.users) {
 | |
|                   num = updated.users.length;
 | |
|                 }
 | |
|                 io.to(coll).emit("viewers", num);
 | |
|                 db.collection("frontpage_lists").update(
 | |
|                   { _id: coll, viewers: { $gt: 0 } },
 | |
|                   { $inc: { viewers: -1 } },
 | |
|                   function(err, docs) {}
 | |
|                 );
 | |
|                 db.collection("connected_users").update(
 | |
|                   { _id: "total_users" },
 | |
|                   { $pull: { total_users: guid + coll } },
 | |
|                   function(err, docs) {
 | |
|                     db.collection("connected_users").update(
 | |
|                       { _id: "offline_users" },
 | |
|                       { $addToSet: { users: guid } },
 | |
|                       { upsert: true },
 | |
|                       function(err, docs) {
 | |
|                         if (
 | |
|                           docs.nModified == 1 &&
 | |
|                           (coll != undefined && coll != "")
 | |
|                         ) {
 | |
|                           db.collection("connected_users").update(
 | |
|                             { _id: "total_users" },
 | |
|                             { $addToSet: { total_users: guid + coll } },
 | |
|                             function(err, docs) {}
 | |
|                           );
 | |
|                         }
 | |
|                       }
 | |
|                     );
 | |
|                   }
 | |
|                 );
 | |
|               }
 | |
|               Functions.remove_name_from_db(guid, coll);
 | |
|             }
 | |
|           );
 | |
|         }
 | |
| 
 | |
|         Functions.remove_unique_id(short_id);
 | |
|       } else {
 | |
|         offline = false;
 | |
|         db.collection("connected_users").update(
 | |
|           { _id: "offline_users" },
 | |
|           { $pull: { users: guid } },
 | |
|           function(err, docs) {
 | |
|             Functions.check_inlist(
 | |
|               coll,
 | |
|               guid,
 | |
|               socket,
 | |
|               offline,
 | |
|               undefined,
 | |
|               "place 3"
 | |
|             );
 | |
|           }
 | |
|         );
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     socket.on("get_history", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       if (
 | |
|         !msg.hasOwnProperty("channel") ||
 | |
|         !msg.hasOwnProperty("all") ||
 | |
|         typeof msg.channel != "string" ||
 | |
|         typeof msg.all != "boolean"
 | |
|       ) {
 | |
|         var result = {
 | |
|           all: {
 | |
|             expected: "boolean",
 | |
|             got: msg.hasOwnProperty("all") ? typeof msg.all : undefined
 | |
|           },
 | |
|           channel: {
 | |
|             expected: "string",
 | |
|             got: msg.hasOwnProperty("channel") ? typeof msg.channel : undefined
 | |
|           },
 | |
|           pass: {
 | |
|             expected: "string",
 | |
|             got: msg.hasOwnProperty("pass") ? typeof msg.pass : undefined
 | |
|           }
 | |
|         };
 | |
|         socket.emit("update_required", result);
 | |
|         return;
 | |
|       }
 | |
|       Chat.get_history(msg.channel, msg.all, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("chat", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Chat.chat(msg, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("all,chat", function(data) {
 | |
|       if (data.hasOwnProperty("channel") && data.channel.indexOf("?") > -1) {
 | |
|         var _list = data.channel.substring(0, data.channel.indexOf("?"));
 | |
|         data.channel = _list;
 | |
|       }
 | |
|       if (data.hasOwnProperty("channel")) {
 | |
|         data.channel = Functions.encodeChannelName(data.channel);
 | |
|       }
 | |
|       Chat.all_chat(data, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("frontpage_lists", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       Frontpage.frontpage_lists(msg, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("import_zoff", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       ListChange.addFromOtherList(msg, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("now_playing", function(list, fn) {
 | |
|       List.now_playing(list, fn, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("id", function(arr) {
 | |
|       if (arr.hasOwnProperty("channel") && arr.channel.indexOf("?") > -1) {
 | |
|         var _list = arr.channel.substring(0, arr.channel.indexOf("?"));
 | |
|         arr.channel = _list;
 | |
|       }
 | |
|       if (arr.hasOwnProperty("channel")) {
 | |
|         arr.channel = Functions.encodeChannelName(arr.channel);
 | |
|       }
 | |
|       if (typeof arr == "object")
 | |
|         io.to(arr.id).emit(arr.id.toLowerCase(), {
 | |
|           type: arr.type,
 | |
|           value: arr.value
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     socket.on("list", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       try {
 | |
|         //var _list = msg.channel.replace(/ /g,'');
 | |
|         var _list = msg.channel;
 | |
|         if (_list.length == 0) return;
 | |
|         if (_list.indexOf("?") > -1) {
 | |
|           _list = _list.substring(0, _list.indexOf("?"));
 | |
|           msg.channel = _list;
 | |
|         }
 | |
|         coll = Functions.removeEmojis(_list).toLowerCase();
 | |
|         //coll = coll.replace(/_/g, "");
 | |
|         //
 | |
|         //coll = filter.clean(coll);
 | |
|       } catch (e) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       if (msg.hasOwnProperty("offline") && msg.offline) {
 | |
|         offline = true;
 | |
|       }
 | |
|       List.list(msg, guid, coll, offline, socket);
 | |
|       Functions.get_short_id(socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("end", function(obj) {
 | |
|       if (obj.hasOwnProperty("channel") && obj.channel.indexOf("?") > -1) {
 | |
|         var _list = obj.channel.substring(0, obj.channel.indexOf("?"));
 | |
|         obj.channel = _list;
 | |
|       }
 | |
|       if (obj.hasOwnProperty("channel")) {
 | |
|         obj.channel = Functions.encodeChannelName(obj.channel);
 | |
|         try {
 | |
|           coll = obj.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|           if (coll.length == 0) return;
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|           //coll = filter.clean(coll);
 | |
|         } catch (e) {
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       List.end(obj, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("addPlaylist", function(arr) {
 | |
|       if (arr.hasOwnProperty("channel") && arr.channel.indexOf("?") > -1) {
 | |
|         var _list = arr.channel.substring(0, arr.channel.indexOf("?"));
 | |
|         arr.channel = _list;
 | |
|       }
 | |
|       if (arr.hasOwnProperty("channel")) {
 | |
|         arr.channel = Functions.encodeChannelName(arr.channel);
 | |
|       }
 | |
|       ListChange.addPlaylist(arr, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("add", function(arr) {
 | |
|       if (arr.hasOwnProperty("list") && arr.list.indexOf("?") > -1) {
 | |
|         var _list = arr.list.substring(0, arr.list.indexOf("?"));
 | |
|         arr.list = _list;
 | |
|       }
 | |
|       if (arr.hasOwnProperty("list")) {
 | |
|         arr.list = Functions.encodeChannelName(arr.list);
 | |
|       }
 | |
|       if (
 | |
|         coll !== undefined &&
 | |
|         ((arr.hasOwnProperty("offsiteAdd") && !arr.offsiteAdd) ||
 | |
|           !arr.hasOwnProperty("offsiteAdd"))
 | |
|       ) {
 | |
|         try {
 | |
|           coll = arr.list; //.replace(/ /g,'');
 | |
|           if (coll.length == 0) return;
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|           //coll = filter.clean(coll);
 | |
|         } catch (e) {
 | |
|           return;
 | |
|         }
 | |
|       } else if (arr.hasOwnProperty("offsiteAdd") && arr.offsiteAdd) {
 | |
|         arr.list = Functions.removeEmojis(arr.list).toLowerCase();
 | |
|       }
 | |
|       ListChange.add_function(arr, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("delete_all", function(msg) {
 | |
|       try {
 | |
|         if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|           var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|           msg.channel = _list;
 | |
|         }
 | |
|         if (msg.hasOwnProperty("channel")) {
 | |
|           msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|         }
 | |
|         coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|         if (coll.length == 0) return;
 | |
|         coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|         //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|         //coll = filter.clean(coll);
 | |
|       } catch (e) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       ListChange.delete_all(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("vote", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       if (coll !== undefined) {
 | |
|         try {
 | |
|           coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|           if (coll.length == 0) return;
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|           //coll = filter.clean(coll);
 | |
|         } catch (e) {
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
|       ListChange.voteUndecided(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("password", function(inp) {
 | |
|       if (inp.hasOwnProperty("channel") && inp.channel.indexOf("?") > -1) {
 | |
|         var _list = inp.channel.substring(0, inp.channel.indexOf("?"));
 | |
|         inp.channel = _list;
 | |
|       }
 | |
|       if (inp.hasOwnProperty("channel")) {
 | |
|         inp.channel = Functions.encodeChannelName(inp.channel);
 | |
|       }
 | |
|       //if(coll != undefined) coll.replace(/ /g,'');
 | |
|       ListSettings.password(inp, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("skip", function(list) {
 | |
|       if (list.hasOwnProperty("channel") && list.channel.indexOf("?") > -1) {
 | |
|         var _list = list.channel.substring(0, list.channel.indexOf("?"));
 | |
|         list.channel = _list;
 | |
|         coll = list.channel;
 | |
|       }
 | |
|       if (list.hasOwnProperty("channel")) {
 | |
|         list.channel = Functions.encodeChannelName(list.channel);
 | |
|       }
 | |
|       //if(coll != undefined) coll.replace(/ /g,'');
 | |
|       List.skip(list, guid, coll, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("conf", function(conf) {
 | |
|       if (conf.hasOwnProperty("channel") && conf.channel.indexOf("?") > -1) {
 | |
|         var _list = conf.channel.substring(0, conf.channel.indexOf("?"));
 | |
|         conf.channel = _list;
 | |
|         coll = conf.channel;
 | |
|       }
 | |
|       if (conf.hasOwnProperty("channel")) {
 | |
|         conf.channel = Functions.encodeChannelName(conf.channel);
 | |
|         coll = conf.channel;
 | |
|       }
 | |
|       //if(coll != undefined) coll.replace(/ /g,'');
 | |
|       ListSettings.conf_function(conf, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("shuffle", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       try {
 | |
|         coll = msg.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|         if (coll.length == 0) return;
 | |
|         coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|         //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|         //coll = filter.clean(coll);
 | |
|       } catch (e) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       ListChange.shuffle(msg, coll, guid, offline, socket);
 | |
|     });
 | |
| 
 | |
|     socket.on("change_channel", function(obj) {
 | |
|       if (obj == undefined && coll != undefined) {
 | |
|         obj = {};
 | |
|         obj.channel = coll;
 | |
|       } else if (
 | |
|         obj != undefined &&
 | |
|         obj.hasOwnProperty("channel") &&
 | |
|         obj.channel.indexOf("?") > -1
 | |
|       ) {
 | |
|         var _list = obj.channel.substring(0, obj.channel.indexOf("?"));
 | |
|         obj.channel = _list;
 | |
|       }
 | |
|       if (obj == undefined && coll == undefined) {
 | |
|         return;
 | |
|       }
 | |
|       if (obj.hasOwnProperty("channel")) {
 | |
|         obj.channel = Functions.encodeChannelName(obj.channel);
 | |
|       }
 | |
|       if (
 | |
|         coll === undefined &&
 | |
|         obj !== undefined &&
 | |
|         obj.channel !== undefined
 | |
|       ) {
 | |
|         try {
 | |
|           coll = obj.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|           if (coll.length == 0) return;
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|           //coll = filter.clean(coll);
 | |
|         } catch (e) {
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         true,
 | |
|         "left 1"
 | |
|       );
 | |
|       in_list = false;
 | |
|     });
 | |
| 
 | |
|     socket.on("disconnect", function() {
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         false,
 | |
|         "left 2"
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("disconnected", function() {
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         false,
 | |
|         "left 3"
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("left_channel", function(msg) {
 | |
|       if (msg.hasOwnProperty("channel") && msg.channel.indexOf("?") > -1) {
 | |
|         var _list = msg.channel.substring(0, msg.channel.indexOf("?"));
 | |
|         msg.channel = _list;
 | |
|       }
 | |
|       if (msg.hasOwnProperty("channel")) {
 | |
|         msg.channel = Functions.encodeChannelName(msg.channel);
 | |
|       }
 | |
|       if (
 | |
|         msg.hasOwnProperty("channel") &&
 | |
|         msg.channel != "" &&
 | |
|         typeof msg.channel == "string"
 | |
|       ) {
 | |
|         coll = msg.channel; //.replace(/ /g,'');
 | |
|         coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|         //coll = filter.clean(coll);
 | |
|         Functions.left_channel(
 | |
|           coll,
 | |
|           guid,
 | |
|           short_id,
 | |
|           in_list,
 | |
|           socket,
 | |
|           false,
 | |
|           "left 4"
 | |
|         );
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     socket.on("reconnect_failed", function() {
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         false,
 | |
|         "left 5"
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("connect_timeout", function() {
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         false,
 | |
|         "left 6"
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("error", function() {
 | |
|       Functions.left_channel(
 | |
|         coll,
 | |
|         guid,
 | |
|         short_id,
 | |
|         in_list,
 | |
|         socket,
 | |
|         false,
 | |
|         "left 7"
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     socket.on("pos", function(obj) {
 | |
|       if (
 | |
|         obj != undefined &&
 | |
|         obj.hasOwnProperty("channel") &&
 | |
|         obj.channel.indexOf("?") > -1
 | |
|       ) {
 | |
|         var _list = obj.channel.substring(0, obj.channel.indexOf("?"));
 | |
|         obj.channel = _list;
 | |
|       }
 | |
|       if (obj != undefined && obj.hasOwnProperty("channel")) {
 | |
|         obj.channel = Functions.encodeChannelName(obj.channel);
 | |
|       }
 | |
|       if (obj == undefined && coll == undefined) {
 | |
|         return;
 | |
|       }
 | |
|       if (coll !== undefined) {
 | |
|         try {
 | |
|           coll = obj.channel.toLowerCase(); //.replace(/ /g,'');
 | |
|           if (coll.length == 0) return;
 | |
|           coll = Functions.removeEmojis(coll).toLowerCase();
 | |
|           //coll = coll.replace(/_/g, "");
 | |
| 
 | |
|           //coll = filter.clean(coll);
 | |
|         } catch (e) {
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (!obj.hasOwnProperty("channel") || typeof obj.channel != "string") {
 | |
|         var result = {
 | |
|           channel: {
 | |
|             expected: "string",
 | |
|             got: obj.hasOwnProperty("channel") ? typeof obj.channel : undefined
 | |
|           },
 | |
|           pass: {
 | |
|             expected: "string",
 | |
|             got: obj.hasOwnProperty("pass") ? typeof obj.pass : undefined
 | |
|           }
 | |
|         };
 | |
|         socket.emit("update_required", result);
 | |
|         return;
 | |
|       }
 | |
|       if (coll == undefined) return;
 | |
|       db.collection(coll + "_settings").find(function(err, docs) {
 | |
|         Functions.getSessionAdminUser(
 | |
|           Functions.getSession(socket),
 | |
|           coll,
 | |
|           function(userpass, adminpass) {
 | |
|             if (userpass != "" || obj.pass == undefined) {
 | |
|               obj.pass = userpass;
 | |
|             } else {
 | |
|               obj.pass = crypto
 | |
|                 .createHash("sha256")
 | |
|                 .update(Functions.decrypt_string(obj.pass))
 | |
|                 .digest("base64");
 | |
|             }
 | |
|             if (
 | |
|               docs.length > 0 &&
 | |
|               (docs[0].userpass == undefined ||
 | |
|                 docs[0].userpass == "" ||
 | |
|                 (obj.hasOwnProperty("pass") && docs[0].userpass == obj.pass))
 | |
|             ) {
 | |
|               Functions.check_inlist(
 | |
|                 coll,
 | |
|                 guid,
 | |
|                 socket,
 | |
|                 offline,
 | |
|                 undefined,
 | |
|                 "place 4"
 | |
|               );
 | |
|               List.send_play(coll, socket);
 | |
|             } else {
 | |
|               socket.emit("auth_required");
 | |
|             }
 | |
|           }
 | |
|         );
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   //send_ping();
 | |
| };
 | |
| 
 | |
| /*
 | |
| function send_ping() {
 | |
| db.collection("connected_users").update({users: {$exists: true}}, {$set: {users: []}}, {multi: true}, function(err, docs){
 | |
| db.collection("connected_users").update({"_id": "total_users"}, {$add: {total_users: 0}}, {multi: true}, function(err, docs){
 | |
| db.collection("frontpage_lists").update({viewers: {$ne: 0}}, {$set: {"viewers": 0}}, {multi: true}, function(err, docs) {
 | |
| io.emit("self_ping");
 | |
| setTimeout(send_ping, 25000);
 | |
| });
 | |
| });
 | |
| });
 | |
| }*/
 |