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.
206 lines
5.1 KiB
JavaScript
206 lines
5.1 KiB
JavaScript
import DateUtils from '../../tools/utilities/DateUtils';
|
|
import StringUtils from '../../tools/utilities/StringUtils';
|
|
import * as DataEvent from '../../tools/events/DataEvent';
|
|
import sanitize from 'sanitize-html';
|
|
import RightsManager, {
|
|
TASK_CREATE,
|
|
TASK_UPDATE,
|
|
OBJECT_POST
|
|
} from '../../tools/utilities/RightsManager';
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const multer = require('multer');
|
|
const md = require('markdown-it')('commonmark');
|
|
const fs = require('fs-extra');
|
|
const Models = require('../../models');
|
|
const dateUtils = new DateUtils();
|
|
const rightsManager = new RightsManager();
|
|
const uploadPath =
|
|
'./content/blog-images/' +
|
|
dateUtils.getDate('year', new Date()) +
|
|
'/' +
|
|
dateUtils.getDate('month', new Date());
|
|
const Sequelize = require('sequelize');
|
|
const Op = Sequelize.Op;
|
|
const _ = require('lodash');
|
|
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 feature_upload = multer({
|
|
storage: storage
|
|
}).array('feature_image');
|
|
var post_upload = multer({
|
|
storage: storage
|
|
}).array('post_image');
|
|
//** 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_POST, TASK_UPDATE)) {
|
|
for (let index = 0; index < payload.length; index++) {
|
|
const item = payload[index];
|
|
Models.FreshPost.findOne({
|
|
where: {
|
|
post: {
|
|
[Op.contains]: {
|
|
uuid: item.post.uuid
|
|
}
|
|
}
|
|
}
|
|
})
|
|
.then(found => {
|
|
let buffed = sanitize(item.post.plaintext, {
|
|
allowedTags: ['del', 'a', 'iframe', 'img'],
|
|
allowedAttributes: {
|
|
a: ['href', 'name', 'target'],
|
|
img: ['src'],
|
|
iframe: [
|
|
'height',
|
|
'width',
|
|
'src',
|
|
'frameborder',
|
|
'allow',
|
|
'allowfullscreen'
|
|
]
|
|
}
|
|
});
|
|
buffed = new StringUtils().decodeHTML(buffed);
|
|
item.post.plaintext = buffed;
|
|
item.post.html = md.render(buffed, {
|
|
html: true,
|
|
xhtmlOut: true
|
|
});
|
|
if (!_.isEqual(item.post, found.post)) {
|
|
found
|
|
.update(item)
|
|
.then(() => {
|
|
//console.log('UPDATED', updated);
|
|
})
|
|
.catch(() => {
|
|
//console.log("***ERROR***", err);
|
|
});
|
|
} else {
|
|
//chilld
|
|
}
|
|
})
|
|
.catch(() => {
|
|
//console.log("***ERRRORZ****", err);
|
|
Models.FreshPost.create(item).then(() => {
|
|
//console.log(fresh)
|
|
});
|
|
});
|
|
}
|
|
res.json({
|
|
message: 'postsSynced'
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
router.get('/json/:filter?', function(req, res) {
|
|
var filter = req.params.filter;
|
|
Models.FreshPost.findAll({
|
|
order: [['id', 'DESC']]
|
|
})
|
|
.then(function(posts) {
|
|
let newlist = [];
|
|
for (let index = 0; index < posts.length; index++) {
|
|
let item = posts[index].post;
|
|
switch (filter) {
|
|
case 'not-deleted':
|
|
if (typeof item.deleted == 'undefined' || item.deleted == false) {
|
|
newlist.push(posts[index]);
|
|
} else {
|
|
continue;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
newlist.push(posts[index]);
|
|
break;
|
|
}
|
|
}
|
|
res.json(newlist);
|
|
})
|
|
.catch(() => {
|
|
//next(err);
|
|
});
|
|
});
|
|
/***
|
|
POST IMAGE
|
|
*/
|
|
router.post('/add-post-image', 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)) {
|
|
post_upload(req, res, function(err) {
|
|
if (err) {
|
|
//console.log('Error in Saving Entry: ' + err);
|
|
res.json({
|
|
message: err
|
|
});
|
|
throw err;
|
|
} else {
|
|
var postImage = req.files[0].path;
|
|
return res.json({
|
|
message: DataEvent.POST_IMAGE_ADDED,
|
|
url: postImage.substr(7, postImage.length)
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
router.post('/add-feature-image', 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)) {
|
|
feature_upload(req, res, function(err) {
|
|
if (err) {
|
|
//console.log('Error in Saving Entry: ' + err);
|
|
res.json({
|
|
message: err
|
|
});
|
|
throw err;
|
|
} else {
|
|
var postImage = req.files[0].path;
|
|
return res.json({
|
|
message: DataEvent.FEATURE_IMAGE_ADDED,
|
|
url: postImage.substr(7, postImage.length)
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
res.json({
|
|
message: "Nah. You can't do that. Talk to the admin, sport."
|
|
});
|
|
}
|
|
});
|
|
});
|
|
module.exports = router;
|