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', function(req, res) { Models.FreshPost.findAll({ order: [['id', 'DESC']] }) .then(function(posts) { let newlist = []; for (let index = 0; index < posts.length; index++) { let item = posts[index].post; if (typeof item.deleted == 'undefined' || item.deleted == false) { newlist.push(posts[index]); } else { continue; } } 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;