mirror of
				https://github.com/KevinMidboe/zoff.git
				synced 2025-10-29 18:00:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			947 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			947 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 = 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("join_silent", 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);
 | 
						|
      } else {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      List.join_silent(msg, socket);
 | 
						|
    });
 | 
						|
 | 
						|
    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);
 | 
						|
});
 | 
						|
});
 | 
						|
});
 | 
						|
}*/
 |