mirror of
				https://github.com/KevinMidboe/zoff.git
				synced 2025-10-29 18:00:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			626 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			626 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var express = require("express");
 | 
						|
var router = express.Router();
 | 
						|
var path = require("path");
 | 
						|
try {
 | 
						|
  var mongo_db_cred = require(path.join(
 | 
						|
    __dirname,
 | 
						|
    "../../config/mongo_config.js"
 | 
						|
  ));
 | 
						|
} catch (e) {
 | 
						|
  console.log(
 | 
						|
    "(!) Missing file - /config/mongo_config.js. Have a look at /config/mongo_config.example.js.  The server won't run without this existing."
 | 
						|
  );
 | 
						|
  process.exit(1);
 | 
						|
}
 | 
						|
var mongojs = require("mongojs");
 | 
						|
var db = mongojs(mongo_db_cred.config);
 | 
						|
var token_db = mongojs("tokens");
 | 
						|
var uniqid = require("uniqid");
 | 
						|
var crypto = require("crypto");
 | 
						|
var ObjectId = mongojs.ObjectId;
 | 
						|
var sIO = require(path.join(__dirname, "../../apps/client.js")).socketIO;
 | 
						|
var projects = require(pathThumbnails + "/handlers/aggregates.js");
 | 
						|
 | 
						|
router.use(function(req, res, next) {
 | 
						|
  next(); // make sure we go to the next routes and don't stop here
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/lists").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    db.collection("frontpage_lists")
 | 
						|
      .find()
 | 
						|
      .sort({ count: -1 }, function(err, docs) {
 | 
						|
        res.json(docs);
 | 
						|
      });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/thumbnails").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    db.collection("suggested_thumbnails").find(function(err, docs) {
 | 
						|
      res.json(docs);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/descriptions").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    db.collection("suggested_descriptions").find(function(err, docs) {
 | 
						|
      res.json(docs);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/rules").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    db.collection("suggested_rules").find(function(err, docs) {
 | 
						|
      res.json(docs);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/approve_thumbnail").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_thumbnails").find({ channel: channel }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      var thumbnail = docs[0].thumbnail;
 | 
						|
      db.collection("frontpage_lists").update(
 | 
						|
        { _id: channel },
 | 
						|
        { $set: { thumbnail: thumbnail } },
 | 
						|
        { upsert: true },
 | 
						|
        function(err, docs) {
 | 
						|
          db.collection(channel + "_settings").update(
 | 
						|
            { views: { $exists: true } },
 | 
						|
            { $set: { thumbnail: thumbnail } },
 | 
						|
            { upsert: true },
 | 
						|
            function(err, docs) {
 | 
						|
              db.collection("suggested_thumbnails").remove(
 | 
						|
                { channel: channel },
 | 
						|
                function(err, docs) {
 | 
						|
                  db.collection(channel + "_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;
 | 
						|
                      sIO.to(channel).emit("conf", docs);
 | 
						|
                      res.send(true);
 | 
						|
                    }
 | 
						|
                  );
 | 
						|
                }
 | 
						|
              );
 | 
						|
            }
 | 
						|
          );
 | 
						|
        }
 | 
						|
      );
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/deny_thumbnail").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_thumbnails").remove({ channel: channel }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      res.send(true);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/approve_rules").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_rules").find({ channel: channel }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      var rules = docs[0].rules;
 | 
						|
      db.collection(channel + "_settings").update(
 | 
						|
        { views: { $exists: true } },
 | 
						|
        { $set: { rules: rules } },
 | 
						|
        { upsert: true },
 | 
						|
        function(err, docs) {
 | 
						|
          db.collection("suggested_rules").remove(
 | 
						|
            { channel: channel },
 | 
						|
            function(err, docs) {
 | 
						|
              db.collection(channel + "_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;
 | 
						|
                  sIO.to(channel).emit("conf", docs);
 | 
						|
                  res.send(true);
 | 
						|
                }
 | 
						|
              );
 | 
						|
            }
 | 
						|
          );
 | 
						|
        }
 | 
						|
      );
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/deny_rules").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_rules").remove({ channel: channel }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      res.send(true);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/remove_rules").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection(channel + "_settings").update(
 | 
						|
      { views: { $exists: true } },
 | 
						|
      { $set: { rules: "" } },
 | 
						|
      function(err, docs) {
 | 
						|
        db.collection(channel + "_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;
 | 
						|
            sIO.to(channel).emit("conf", docs);
 | 
						|
            res.send(true);
 | 
						|
          }
 | 
						|
        );
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/approve_description").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_descriptions").find({ channel: channel }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      var description = docs[0].description;
 | 
						|
      db.collection("frontpage_lists").update(
 | 
						|
        { _id: channel },
 | 
						|
        { $set: { description: description } },
 | 
						|
        { upsert: true },
 | 
						|
        function(err, docs) {
 | 
						|
          db.collection(channel + "_settings").update(
 | 
						|
            { views: { $exists: true } },
 | 
						|
            { $set: { description: description } },
 | 
						|
            function(err, docs) {
 | 
						|
              db.collection("suggested_descriptions").remove(
 | 
						|
                { channel: channel },
 | 
						|
                function(err, docs) {
 | 
						|
                  db.collection(channel + "_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;
 | 
						|
                      sIO.to(channel).emit("conf", docs);
 | 
						|
                      res.send(true);
 | 
						|
                    }
 | 
						|
                  );
 | 
						|
                }
 | 
						|
              );
 | 
						|
            }
 | 
						|
          );
 | 
						|
        }
 | 
						|
      );
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/deny_description").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("suggested_descriptions").remove(
 | 
						|
      { channel: channel },
 | 
						|
      1,
 | 
						|
      function(err, docs) {
 | 
						|
        res.send(true);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/remove_thumbnail").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("frontpage_lists").update(
 | 
						|
      { _id: channel },
 | 
						|
      { $set: { thumbnail: "" } },
 | 
						|
      function(err, docs) {
 | 
						|
        db.collection(channel + "_settings").update(
 | 
						|
          { views: { $exists: true } },
 | 
						|
          { $set: { thumbnail: "" } },
 | 
						|
          function(err, docs) {
 | 
						|
            db.collection(channel + "_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;
 | 
						|
                sIO.to(channel).emit("conf", docs);
 | 
						|
                res.send(true);
 | 
						|
              }
 | 
						|
            );
 | 
						|
          }
 | 
						|
        );
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/remove_description").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var channel = req.body.channel;
 | 
						|
    db.collection("frontpage_lists").update(
 | 
						|
      { _id: channel },
 | 
						|
      { $set: { description: "" } },
 | 
						|
      function(err, docs) {
 | 
						|
        db.collection(channel + "_settings").update(
 | 
						|
          { views: { $exists: true } },
 | 
						|
          { $set: { description: "" } },
 | 
						|
          function(err, docs) {
 | 
						|
            db.collection(channel + "_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;
 | 
						|
                sIO.to(channel).emit("conf", docs);
 | 
						|
                res.send(true);
 | 
						|
              }
 | 
						|
            );
 | 
						|
          }
 | 
						|
        );
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/names").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    db.collection("registered_users").find(
 | 
						|
      { _id: { $exists: true } },
 | 
						|
      { _id: 1, icon: 1 },
 | 
						|
      function(err, docs) {
 | 
						|
        res.json(docs);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/names").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var icon = req.body.icon;
 | 
						|
    var name = req.body.name;
 | 
						|
    db.collection("registered_users").update(
 | 
						|
      { _id: name },
 | 
						|
      { $set: { icon: icon } },
 | 
						|
      function(err, docs) {
 | 
						|
        if (err) res.send(false);
 | 
						|
        else res.send(true);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/names").delete(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var name = req.body.name;
 | 
						|
    db.collection("registered_users").remove({ _id: name }, function(
 | 
						|
      err,
 | 
						|
      docs
 | 
						|
    ) {
 | 
						|
      if (err) res.send(false);
 | 
						|
      else res.send(true);
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/token").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    token_db.collection("tokens").find(function(err, docs) {
 | 
						|
      if (docs.length == 1) {
 | 
						|
        res.json({ token: docs[0].token });
 | 
						|
      } else {
 | 
						|
        var id = new Buffer(makeid()).toString("base64");
 | 
						|
        token_db
 | 
						|
          .collection("tokens")
 | 
						|
          .insert({ token: id }, function(err, docs) {
 | 
						|
            res.json({ token: id });
 | 
						|
          });
 | 
						|
      }
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/api_token").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    token_db
 | 
						|
      .collection("api_token")
 | 
						|
      .find({ token: { $exists: true } }, function(err, all) {
 | 
						|
        res.json(all);
 | 
						|
      });
 | 
						|
  } else {
 | 
						|
    res.sendStatus(403);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/api_token").delete(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var id = req.body.id;
 | 
						|
    token_db
 | 
						|
      .collection("api_token")
 | 
						|
      .remove({ _id: ObjectId(id) }, function(err, success) {
 | 
						|
        if (err) {
 | 
						|
          res.send("failed");
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        res.send("success");
 | 
						|
      });
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/api_token").put(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var id = req.body.id;
 | 
						|
    var limit = req.body.limit;
 | 
						|
    if (limit < 0) {
 | 
						|
      res.sendStatus(500);
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    token_db
 | 
						|
      .collection("api_token")
 | 
						|
      .update({ _id: ObjectId(id) }, { $set: { limit: limit } }, function(
 | 
						|
        err,
 | 
						|
        success
 | 
						|
      ) {
 | 
						|
        if (err) {
 | 
						|
          res.sendStatus(500);
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        res.sendStatus(200);
 | 
						|
      });
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/api_token").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var name = req.body.name;
 | 
						|
    var id = crypto
 | 
						|
      .createHash("sha256")
 | 
						|
      .update(uniqid())
 | 
						|
      .digest("base64");
 | 
						|
    token_db
 | 
						|
      .collection("api_token")
 | 
						|
      .insert({ name: name, token: id, usage: 0 }, function(err, docs) {
 | 
						|
        token_db.collection("api_token").find({ token: id }, function(err, d) {
 | 
						|
          res.json({ token: id, _id: d[0]._id });
 | 
						|
        });
 | 
						|
      });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/delete").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var list = req.body._id;
 | 
						|
    db.collection(list).drop(function(err, docs) {
 | 
						|
      db.collection(list + "_settings").drop(function(err, docs) {
 | 
						|
        db.collection("frontpage_lists").remove({ _id: list }, function(
 | 
						|
          err,
 | 
						|
          docs
 | 
						|
        ) {
 | 
						|
          res.send(true);
 | 
						|
        });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/remove_token").get(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    token_db.collection("tokens").find(function(err, docs) {
 | 
						|
      if (docs.length == 1) {
 | 
						|
        token_db
 | 
						|
          .collection("tokens")
 | 
						|
          .remove({ token: docs[0].token }, function(err, docs) {
 | 
						|
            res.send(true);
 | 
						|
          });
 | 
						|
      } else {
 | 
						|
        res.send(false);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/pinned").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var to_pin = req.body._id;
 | 
						|
    db.collection("frontpage_lists").update(
 | 
						|
      { pinned: 1 },
 | 
						|
      { $set: { pinned: 0 } },
 | 
						|
      function(err, resp) {
 | 
						|
        db.collection("frontpage_lists").update(
 | 
						|
          { _id: to_pin },
 | 
						|
          { $set: { pinned: 1 } },
 | 
						|
          function(err, resp) {
 | 
						|
            res.send(true);
 | 
						|
          }
 | 
						|
        );
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/admin").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var to_remove = req.body._id;
 | 
						|
    db.collection(to_remove + "_settings").update(
 | 
						|
      { views: { $exists: true } },
 | 
						|
      { $set: { adminpass: "" } },
 | 
						|
      function(err, docs) {
 | 
						|
        res.send(true);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
router.route("/api/userpass").post(function(req, res) {
 | 
						|
  if (req.isAuthenticated()) {
 | 
						|
    var to_remove = req.body._id;
 | 
						|
    db.collection(to_remove + "_settings").update(
 | 
						|
      { views: { $exists: true } },
 | 
						|
      { $set: { userpass: "" } },
 | 
						|
      function(err, docs) {
 | 
						|
        res.send(true);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    res.send(false);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
function makeid() {
 | 
						|
  var text = "";
 | 
						|
  var possible =
 | 
						|
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 | 
						|
 | 
						|
  for (var i = 0; i < 20; i++)
 | 
						|
    text += possible.charAt(Math.floor(Math.random() * possible.length));
 | 
						|
 | 
						|
  return text;
 | 
						|
}
 | 
						|
 | 
						|
module.exports = router;
 |