Advertisement
EiEich

Untitled

Jun 16th, 2021
637
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var User = require(__dirname + '/schema.js');
  2. User.find({}, function(err, docs){
  3.     if(!Array.isArray(docs)) return;
  4.     for (var i = 0; i < docs.length; i++) {
  5.         let modified = false;
  6.         if(docs[i].avatarUrl == '/api/user/default.png'){
  7.             docs[i].avatarUrl = '/assets/default.png';
  8.             docs[i].markModified('avatarUrl');
  9.             modified = true;
  10.         }
  11.         if(modified) docs[i].save(function(){});
  12.     }
  13. });
  14. module.exports = function(waw) {
  15.     waw.serve(process.cwd()+'/client/dist/client');
  16.     let pages = ['/', '/profile', '/friends', '/groups', '/sign', '/changepass', '/groups'];
  17.     waw.url(process.cwd()+'/client/dist/client/index.html', pages);
  18.     waw.User = User;
  19.     /*
  20.     *   Set is on users from config
  21.     */
  22.         const set_is = (email, is)=>{
  23.             User.findOne({
  24.                 email: email
  25.             }, function(err, user){
  26.                 if(!user) return;
  27.                 if(!user.is) user.is={};
  28.                 user.is[is] = true;
  29.                 user.markModified('is');
  30.                 user.save((err)=>{
  31.                     if(err) console.log(err);
  32.                 });
  33.             });
  34.         }
  35.         if(waw.config.user && waw.config.user.is){
  36.             for(let is in waw.config.user.is){
  37.                 let emails = waw.config.user.is[is].split(' ');
  38.                 for (var i = 0; i < emails.length; i++) {
  39.                     set_is(emails[i], is);
  40.                 }
  41.             }
  42.         }
  43.     /*
  44.     *   Routing
  45.     */
  46.         waw.crud('user', {
  47.             get: {
  48.                 query: function(req){
  49.                     return {
  50.                         domain: req.get('host')
  51.                     };
  52.                 },
  53.                 select: function(){
  54.                     return '-password';
  55.                 }
  56.             },
  57.             fetch: [{
  58.                 query: function(req, res, next) {
  59.                     return {
  60.                         _id: req.user._id,
  61.                         domain: req.get('host')
  62.                     }
  63.                 },
  64.                 select: function(){
  65.                     return '-password';
  66.                 }
  67.             }, {
  68.                 name: 'other',
  69.                 query: function(req, res, next) {
  70.                     return {
  71.                         _id: req.body._id,
  72.                         domain: req.get('host')
  73.                     }
  74.                 },
  75.                 select: function(){
  76.                     return '-password';
  77.                 }
  78.             }],
  79.             update: [{
  80.                 ensure: function(req, res, next){
  81.                     if(req.user){
  82.                         req.body.is = req.user.is;
  83.                         if(req.body.remove){
  84.                             req.body.is[req.body.remove] = false;
  85.                         }
  86.                         return next();
  87.                     }
  88.                     req.session.data = req.body.data;
  89.                     res.json(true);
  90.                 },
  91.                 query: function(req, res, next) {
  92.                     return {
  93.                         _id: req.user._id,
  94.                         domain: req.get('host')
  95.                     }
  96.                 }
  97.             }, {
  98.                 name: 'admin',
  99.                 ensure: function(req, res, next){
  100.                     if(req.user.is.admin) next();
  101.                     else res.send(false);
  102.                 },
  103.                 query: function(req, res){
  104.                     return {
  105.                         _id: req.body._id,
  106.                         domain: req.get('host')
  107.                     }
  108.                 }
  109.             }],
  110.             delete: [{
  111.                 ensure: function(req, res){
  112.                     if(req.user){
  113.                         for (var i = req.user.domain.length - 1; i >= 0; i--) {
  114.                             if(req.user.domain[i] == req.get('host')){
  115.                                 req.user.domain.splice(i, 1);
  116.                             }
  117.                         }
  118.                         req.user.save(function(){
  119.                             res.send(true);
  120.                         });
  121.                     }else res.send(false);
  122.                 }
  123.             }, {
  124.                 name: 'admin',
  125.                 ensure: function(req, res, next){
  126.                     if(req.user.is.admin){
  127.                         User.findOne({
  128.                             _id: req.body._id
  129.                         }, function(err, doc){
  130.                             if(err || !doc) return res.send(false);
  131.                             for (var i = doc.domain.length - 1; i >= 0; i--) {
  132.                                 if(doc.domain[i] == req.get('host')){
  133.                                     doc.domain.splice(i, 1);
  134.                                 }
  135.                             }
  136.                             doc.save(function(){
  137.                                 res.send(true);
  138.                             });
  139.                         });
  140.                     }else res.send(false);
  141.                 }
  142.             }]
  143.         });
  144.         var router = waw.router('/api/user');
  145.         router.post("/avatar", function(req, res) {
  146.             req.user.avatarUrl = '/api/user/avatar/' + req.user._id + '.jpg?' + Date.now();
  147.             waw.parallel([function(next) {
  148.                 req.user.save(next);
  149.             }, function(next) {
  150.                 waw.dataUrlToLocation(req.body.dataUrl, __dirname + '/files/', req.user._id + '.jpg', next);
  151.             }], function() {
  152.                 res.json(req.user.avatarUrl);
  153.             });
  154.         });
  155.         router.get("/avatar/:file", function(req, res) {
  156.             res.sendFile(__dirname + '/files/' + req.params.file);
  157.         });
  158.     /*
  159.     *   End of User Management
  160.     */
  161. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement