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;
 |