You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
5.4 KiB
JavaScript
213 lines
5.4 KiB
JavaScript
import DateUtils from '../../tools/utilities/DateUtils';
|
|
import * as DataEvent from '../../tools/events/DataEvent';
|
|
import RightsManager, {
|
|
TASK_CREATE,
|
|
TASK_UPDATE,
|
|
OBJECT_POST,
|
|
OBJECT_SETTINGS
|
|
} from '../../tools/utilities/RightsManager';
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const multer = require('multer');
|
|
const fs = require('fs-extra');
|
|
const Models = require('../../models');
|
|
const dateUtils = new DateUtils();
|
|
const rightsManager = new RightsManager();
|
|
const uploadPath =
|
|
'./content/user-images/' +
|
|
dateUtils.getDate('year', new Date()) +
|
|
'/' +
|
|
dateUtils.getDate('month', new Date());
|
|
fs.ensureDir(uploadPath, () => {
|
|
//console.log(err) // => null
|
|
// dir has now been created, including the directory it is to be placed in
|
|
});
|
|
var storage = multer.diskStorage({
|
|
destination: function(req, file, cb) {
|
|
cb(null, uploadPath);
|
|
},
|
|
filename: function(req, file, cb) {
|
|
var splice = file.originalname.split(':');
|
|
cb(null, splice[0]);
|
|
}
|
|
});
|
|
var avatar_upload = multer({
|
|
storage: storage
|
|
}).array('avatar_upload');
|
|
var background_upload = multer({
|
|
storage: storage
|
|
}).array('background_upload');
|
|
//** SYNC POSTS */
|
|
router.post('/sync', (req, res) => {
|
|
let payload = req.body;
|
|
Models.User.findById(req.session.user.id).then(user => {
|
|
if (rightsManager.check(user.role, OBJECT_SETTINGS, TASK_UPDATE)) {
|
|
fs.readJson('config/site-settings.json')
|
|
.then(obj => {
|
|
if (user.hande != payload.handle || user.email != payload.email) {
|
|
user.update({
|
|
handle: payload.handle,
|
|
email: payload.email
|
|
})
|
|
.then(() => {
|
|
//console.log('UPDATED');
|
|
})
|
|
.catch(() => {
|
|
//console.log('ERR', err);
|
|
});
|
|
} else {
|
|
//console.log('USER NOT UPDATED');
|
|
}
|
|
obj.url = payload.url;
|
|
obj.title = payload.title;
|
|
obj.description = payload.descriptions;
|
|
obj.private = payload.private;
|
|
obj.theme = payload.theme;
|
|
obj.background = payload.background; //TODO: make this url relative
|
|
//mail stuff
|
|
obj.email.active = payload.mailSettings.activeProtocol;
|
|
obj.email.smtp.domain = payload.mailSettings.smtp.domain;
|
|
obj.email.smtp.email = payload.mailSettings.smtp.email;
|
|
obj.email.smtp.password = payload.mailSettings.smtp.password;
|
|
obj.email.mailgun.domain = payload.mailSettings.mailgun.domain;
|
|
obj.email.mailgun['api-key'] = payload.mailSettings.mailgun.key;
|
|
fs.writeJson('config/site-settings.json', obj)
|
|
.then(() => {
|
|
res.json({
|
|
message: DataEvent.SETTINGS_UPDATED
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
router.get('/nav', function(req, res) {
|
|
fs.readJson('config/site-settings.json')
|
|
.then(obj => {
|
|
fs.writeJson('config/site-settings.json', obj)
|
|
.then(() => {
|
|
res.json(obj.menu);
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
});
|
|
|
|
router.post('/nav-sync', (req, res) => {
|
|
let payload = req.body;
|
|
Models.User.findById(req.session.user.id).then(user => {
|
|
if (rightsManager.check(user.role, OBJECT_SETTINGS, TASK_UPDATE)) {
|
|
fs.readJson('config/site-settings.json')
|
|
.then(obj => {
|
|
obj.menu = payload;
|
|
fs.writeJson('config/site-settings.json', obj)
|
|
.then(() => {
|
|
res.json({
|
|
message: DataEvent.SETTINGS_UPDATED
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
})
|
|
.catch(() => {
|
|
//console.error(err);
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/***
|
|
UPLOAD AVATAR
|
|
*/
|
|
router.post('/add-avatar', function(req, res) {
|
|
//console.log(req.body);
|
|
if (!req.session.user)
|
|
return res.json({
|
|
message: 'You need to be logged in, champ.'
|
|
});
|
|
Models.User.findById(req.session.user.id).then(user => {
|
|
if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE)) {
|
|
avatar_upload(req, res, function(err) {
|
|
if (err) {
|
|
res.json({
|
|
message: err
|
|
});
|
|
throw err;
|
|
} else {
|
|
var avatar = req.files[0].path;
|
|
user.update({
|
|
avatar: avatar.substr(7, avatar.length)
|
|
})
|
|
.then(updated => {
|
|
req.session.user = updated;
|
|
})
|
|
.catch(() => {
|
|
//console.log('ERR', err);
|
|
});
|
|
return res.json({
|
|
message: DataEvent.AVATAR_UPLOADED,
|
|
url: avatar.substr(7, avatar.length)
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
/***
|
|
UPLOAD FEATURE BACKGROUND
|
|
*/
|
|
router.post('/add-feature-background', function(req, res) {
|
|
//console.log(req.body);
|
|
if (!req.session.user)
|
|
return res.json({
|
|
message: 'You need to be logged in, champ.'
|
|
});
|
|
Models.User.findById(req.session.user.id).then(user => {
|
|
if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE)) {
|
|
background_upload(req, res, function(err) {
|
|
if (err) {
|
|
res.json({
|
|
message: err
|
|
});
|
|
throw err;
|
|
} else {
|
|
var bgImage = req.files[0].path;
|
|
return res.json({
|
|
message: DataEvent.SITE_BACKGROUND_UPLOADED,
|
|
url: bgImage.substr(7, bgImage.length)
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
module.exports = router;
|