fipamo/brain/api/content/posts.js

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;