port most backend functionality, further cleanups, basic electron support
This commit is contained in:
@@ -6,12 +6,10 @@ require('../../models/db');
|
||||
var async = require('async');
|
||||
var fs = require('fs');
|
||||
var _ = require("underscore");
|
||||
var mongoose = require("mongoose");
|
||||
var request = require('request');
|
||||
var url = require("url");
|
||||
var path = require("path");
|
||||
var crypto = require('crypto');
|
||||
var qr = require('qr-image');
|
||||
var glob = require('glob');
|
||||
var gm = require('gm');
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
var config = require('config');
|
||||
const db = require('../../models/db');
|
||||
|
||||
var redis = require('../../helpers/redis');
|
||||
var mailer = require('../../helpers/mailer');
|
||||
var uploader = require('../../helpers/uploader');
|
||||
var space_render = require('../../helpers/space-render');
|
||||
@@ -12,13 +11,11 @@ var async = require('async');
|
||||
var moment = require('moment');
|
||||
var fs = require('fs');
|
||||
var _ = require("underscore");
|
||||
var mongoose = require("mongoose");
|
||||
var archiver = require('archiver');
|
||||
var request = require('request');
|
||||
var url = require("url");
|
||||
var path = require("path");
|
||||
var crypto = require('crypto');
|
||||
var qr = require('qr-image');
|
||||
var glob = require('glob');
|
||||
var gm = require('gm');
|
||||
var sanitizeHtml = require('sanitize-html');
|
||||
|
||||
@@ -14,7 +14,6 @@ var phantom = require('../../helpers/phantom');
|
||||
var async = require('async');
|
||||
var fs = require('fs');
|
||||
var _ = require("underscore");
|
||||
var mongoose = require("mongoose");
|
||||
var archiver = require('archiver');
|
||||
var request = require('request');
|
||||
var url = require("url");
|
||||
@@ -52,8 +51,7 @@ var roleMapping = {
|
||||
router.get('/', function(req, res, next) {
|
||||
db.Message.findAll({where:{
|
||||
space_id: req.space._id
|
||||
}})
|
||||
//.populate('user', userMapping)
|
||||
}, include: ['user']})
|
||||
.then(function(messages) {
|
||||
res.status(200).json(messages);
|
||||
});
|
||||
@@ -65,6 +63,7 @@ router.post('/', function(req, res, next) {
|
||||
|
||||
if (req.user) {
|
||||
attrs.user = req.user;
|
||||
attrs.user_id = req.user._id;
|
||||
} else {
|
||||
attrs.user = null;
|
||||
}
|
||||
@@ -72,7 +71,7 @@ router.post('/', function(req, res, next) {
|
||||
var msg = attrs;
|
||||
msg._id = uuidv4();
|
||||
|
||||
db.Message.create(msg, function() {
|
||||
db.Message.create(msg).then(function() {
|
||||
if (msg.message.length <= 1) return;
|
||||
// TODO reimplement notifications
|
||||
res.distributeCreate("Message", msg);
|
||||
@@ -82,19 +81,12 @@ router.post('/', function(req, res, next) {
|
||||
router.delete('/:message_id', function(req, res, next) {
|
||||
db.Message.findOne({where:{
|
||||
"_id": req.params.message_id
|
||||
}}, function(msg) {
|
||||
}}).then(function(msg) {
|
||||
if (!msg) {
|
||||
res.sendStatus(404);
|
||||
} else {
|
||||
msg.destroy(function(err) {
|
||||
if (err) res.status(400).json(err);
|
||||
else {
|
||||
if (msg) {
|
||||
res.distributeDelete("Message", msg);
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}
|
||||
msg.destroy().then(function() {
|
||||
res.distributeDelete("Message", msg);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -17,7 +17,6 @@ var slug = require('slug');
|
||||
var fs = require('fs');
|
||||
var async = require('async');
|
||||
var _ = require("underscore");
|
||||
var mongoose = require("mongoose");
|
||||
var request = require('request');
|
||||
var url = require("url");
|
||||
var path = require("path");
|
||||
@@ -67,6 +66,7 @@ router.get('/', function(req, res, next) {
|
||||
return m.space_id;
|
||||
});
|
||||
|
||||
// TODO port
|
||||
var q = {
|
||||
"space_type": "folder",
|
||||
"$or": [{
|
||||
@@ -81,13 +81,11 @@ router.get('/', function(req, res, next) {
|
||||
}]
|
||||
};
|
||||
|
||||
Space
|
||||
.find(q)
|
||||
.populate('creator', userMapping)
|
||||
.exec(function(err, spaces) {
|
||||
if (err) console.error(err);
|
||||
db.Space
|
||||
.findAll({where: q})
|
||||
.then(function(spaces) {
|
||||
var updatedSpaces = spaces.map(function(s) {
|
||||
var spaceObj = s.toObject();
|
||||
var spaceObj = s; //.toObject();
|
||||
return spaceObj;
|
||||
});
|
||||
|
||||
@@ -104,18 +102,17 @@ router.get('/', function(req, res, next) {
|
||||
return s.space_type == "folder";
|
||||
})
|
||||
var uniqueFolders = _.unique(onlyFolders, (s) => {
|
||||
return s._id.toString();
|
||||
return s._id;
|
||||
})
|
||||
|
||||
res.status(200).json(uniqueFolders);
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
} else if (req.query.search) {
|
||||
|
||||
db.Membership.findAll({where:{
|
||||
user: req.user._id
|
||||
user_id: req.user._id
|
||||
}}).then(memberships => {
|
||||
|
||||
var validMemberships = memberships.filter(function(m) {
|
||||
@@ -131,21 +128,15 @@ router.get('/', function(req, res, next) {
|
||||
|
||||
// TODO FIXME port
|
||||
var q = { where: {
|
||||
"$or": [{"creator_id": req.user._id},
|
||||
{"_id": {"$in": spaceIds}},
|
||||
{"parent_space_id": {"$in": spaceIds}}],
|
||||
name: new RegExp(req.query.search, "i")}
|
||||
};
|
||||
[Op.or]: [{"creator_id": req.user._id},
|
||||
{"_id": {[Op.in]: spaceIds}},
|
||||
{"parent_space_id": {[Op.in]: spaceIds}}],
|
||||
name: {[Op.like]: "%"+req.query.search+"%"}
|
||||
}, include: ['creator']};
|
||||
|
||||
db.Space
|
||||
.findAll(q)
|
||||
//.populate('creator', userMapping)
|
||||
.then(function(spaces) {
|
||||
if (err) console.error(err);
|
||||
var updatedSpaces = spaces.map(function(s) {
|
||||
var spaceObj = s.toObject();
|
||||
return spaceObj;
|
||||
});
|
||||
res.status(200).json(spaces);
|
||||
});
|
||||
});
|
||||
@@ -161,7 +152,7 @@ router.get('/', function(req, res, next) {
|
||||
if (space) {
|
||||
db.getUserRoleInSpace(space, req.user, function(role) {
|
||||
if (role == "none") {
|
||||
if(space.access_mode == "public") {
|
||||
if (space.access_mode == "public") {
|
||||
role = "viewer";
|
||||
}
|
||||
}
|
||||
@@ -170,8 +161,7 @@ router.get('/', function(req, res, next) {
|
||||
db.Space
|
||||
.findAll({where:{
|
||||
parent_space_id: req.query.parent_space_id
|
||||
}})
|
||||
//.populate('creator', userMapping)
|
||||
}, include:['creator']})
|
||||
.then(function(spaces) {
|
||||
res.status(200).json(spaces);
|
||||
});
|
||||
@@ -214,7 +204,7 @@ router.get('/', function(req, res, next) {
|
||||
};
|
||||
|
||||
db.Space
|
||||
.findAll({where: q})
|
||||
.findAll({where: q, include: ['creator']})
|
||||
.then(function(spaces) {
|
||||
var updatedSpaces = spaces.map(function(s) {
|
||||
var spaceObj = db.spaceToObject(s);
|
||||
@@ -414,15 +404,12 @@ router.delete('/:id', function(req, res, next) {
|
||||
|
||||
if (req.spaceRole == "admin") {
|
||||
const attrs = req.body;
|
||||
Space.recursiveDelete(space, function(err) {
|
||||
if (err) res.status(400).json(err);
|
||||
else {
|
||||
res.distributeDelete("Space", space);
|
||||
}
|
||||
space.destroy().then(function() {
|
||||
res.distributeDelete("Space", space);
|
||||
});
|
||||
} else {
|
||||
res.status(403).json({
|
||||
"error": "requires admin status"
|
||||
"error": "requires admin role"
|
||||
});
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -74,14 +74,12 @@ router.post('/', function(req, res) {
|
||||
res.sendStatus(400);
|
||||
})
|
||||
.then(u => {
|
||||
console.log("!!! created user:", u);
|
||||
var homeSpace = {
|
||||
_id: uuidv4(),
|
||||
name: req.i18n.__("home"),
|
||||
space_type: "folder",
|
||||
creator_id: u._id
|
||||
};
|
||||
|
||||
db.Space.create(homeSpace)
|
||||
.error(err => {
|
||||
res.sendStatus(400);
|
||||
@@ -108,8 +106,6 @@ router.post('/', function(req, res) {
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
console.log("!!! hello !!!");
|
||||
|
||||
db.User.findAll({where: {email: email}})
|
||||
.then(users => {
|
||||
@@ -131,19 +127,15 @@ router.get('/current', function(req, res, next) {
|
||||
});
|
||||
|
||||
router.put('/:id', function(req, res, next) {
|
||||
// TODO explicit whitelisting
|
||||
var user = req.user;
|
||||
console.log(req.params.id, user._id);
|
||||
if (user._id == req.params.id) {
|
||||
var newAttr = req.body;
|
||||
newAttr.updated_at = new Date();
|
||||
delete newAttr['_id'];
|
||||
|
||||
User.findOneAndUpdate({"_id": user._id}, {"$set": newAttr}, function(err, updatedUser) {
|
||||
if (err) {
|
||||
res.sendStatus(400);
|
||||
} else {
|
||||
res.status(200).json(updatedUser);
|
||||
}
|
||||
db.User.update(newAttr, {where: {"_id": user._id}}).then(function(updatedUser) {
|
||||
res.status(200).json(newAttr);
|
||||
});
|
||||
} else {
|
||||
res.sendStatus(403);
|
||||
@@ -161,12 +153,8 @@ router.post('/:id/password', function(req, res, next) {
|
||||
bcrypt.genSalt(10, function(err, salt) {
|
||||
bcrypt.hash(pass, salt, function(err, hash) {
|
||||
user.password_hash = hash;
|
||||
user.save(function(err){
|
||||
if(err){
|
||||
res.status(400).json(err);
|
||||
}else{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
user.save().then(function() {
|
||||
res.sendStatus(204);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -195,7 +183,7 @@ router.delete('/:id', (req, res, next) => {
|
||||
}
|
||||
} else {
|
||||
user.remove((err) => {
|
||||
if(err)res.status(400).json(err);
|
||||
if (err) res.status(400).json(err);
|
||||
else res.sendStatus(204);
|
||||
});
|
||||
}
|
||||
@@ -239,19 +227,15 @@ router.post('/:user_id/avatar', (req, res, next) => {
|
||||
if (err) res.status(400).json(err);
|
||||
else {
|
||||
user.avatar_thumb_uri = url;
|
||||
user.save((err, updatedUser) => {
|
||||
if (err) {
|
||||
res.sendStatus(400);
|
||||
} else {
|
||||
fs.unlink(localResizedFilePath, (err) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
res.status(400).json(err);
|
||||
} else {
|
||||
res.status(200).json(updatedUser);
|
||||
}
|
||||
});
|
||||
}
|
||||
user.save().then(() => {
|
||||
fs.unlink(localResizedFilePath, (err) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
res.status(400).json(err);
|
||||
} else {
|
||||
res.status(200).json(user);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -269,31 +253,20 @@ router.post('/feedback', function(req, res, next) {
|
||||
|
||||
router.post('/password_reset_requests', (req, res, next) => {
|
||||
const email = req.query.email;
|
||||
User.findOne({"email": email}).exec((err, user) => {
|
||||
if (err) {
|
||||
res.status(400).json(err);
|
||||
db.User.findOne({where: {"email": email}}).then((user) => {
|
||||
if (user) {
|
||||
crypto.randomBytes(16, (ex, buf) => {
|
||||
user.password_reset_token = buf.toString('hex');
|
||||
user.save().then(updatedUser => {
|
||||
mailer.sendMail(email, req.i18n.__("password_reset_subject"), req.i18n.__("password_reset_body"), {action: {
|
||||
link: config.endpoint + "/password-confirm/" + user.password_reset_token,
|
||||
name: req.i18n.__("password_reset_action")
|
||||
}});
|
||||
res.status(201).json({});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
if (user) {
|
||||
if(user.account_type == "email") {
|
||||
crypto.randomBytes(16, (ex, buf) => {
|
||||
user.password_reset_token = buf.toString('hex');
|
||||
user.save((err, updatedUser) => {
|
||||
if (err) res.status(400).json(err);
|
||||
else {
|
||||
mailer.sendMail(email, req.i18n.__("password_reset_subject"), req.i18n.__("password_reset_body"), {action: {
|
||||
link: config.endpoint + "/password-confirm/" + user.password_reset_token,
|
||||
name: req.i18n.__("password_reset_action")
|
||||
}});
|
||||
res.status(201).json({});
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({"error": "error_unknown_email"});
|
||||
}
|
||||
} else {
|
||||
res.status(404).json({"error": "error_unknown_email"});
|
||||
}
|
||||
res.status(404).json({"error": "error_unknown_email"});
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -302,29 +275,25 @@ router.post('/password_reset_requests/:confirm_token/confirm', function(req, res
|
||||
var password = req.body.password;
|
||||
|
||||
User
|
||||
.findOne({"password_reset_token": req.params.confirm_token})
|
||||
.exec((err, user) => {
|
||||
if (err) {
|
||||
res.sendStatus(400);
|
||||
} else {
|
||||
if(user) {
|
||||
bcrypt.genSalt(10, (err, salt) => {
|
||||
bcrypt.hash(password, salt, function(err, hash) {
|
||||
.findOne({where: {"password_reset_token": req.params.confirm_token}})
|
||||
.then((user) => {
|
||||
if (user) {
|
||||
bcrypt.genSalt(10, (err, salt) => {
|
||||
bcrypt.hash(password, salt, function(err, hash) {
|
||||
|
||||
user.password_hash = hash;
|
||||
user.password_token = null;
|
||||
user.save(function(err, updatedUser){
|
||||
if (err) {
|
||||
res.sendStatus(400);
|
||||
} else {
|
||||
res.sendStatus(201);
|
||||
}
|
||||
});
|
||||
user.password_hash = hash;
|
||||
user.password_token = null;
|
||||
user.save(function(err, updatedUser){
|
||||
if (err) {
|
||||
res.sendStatus(400);
|
||||
} else {
|
||||
res.sendStatus(201);
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9,7 +9,6 @@ const crypto = require('crypto');
|
||||
const router = express.Router();
|
||||
const mailer = require('../helpers/mailer');
|
||||
const _ = require('underscore');
|
||||
const qr = require('qr-image');
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
res.render('index', { title: 'Spaces' });
|
||||
|
||||
Reference in New Issue
Block a user