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