From 19cb97b9c458417caa43bbbd85a7187788cb867a Mon Sep 17 00:00:00 2001 From: Ro Date: Tue, 19 Nov 2019 17:17:39 -0800 Subject: [PATCH] started new api for retrieving markdown pages, dashboard displaying files for editing --- brain/api/content/posts.js | 2 +- brain/api/content/settings.js | 2 +- brain/api/v1/auth.js | 3 -- brain/api/v1/pages.js | 55 +++++++++++++++++++++++++++++++++++ brain/app.js | 18 ++++++------ brain/routes/dash/index.js | 18 ++++++++---- brain/routes/dash/posts.js | 1 - package-lock.json | 52 ++++++++++++++++++++++++++++----- package.json | 1 + 9 files changed, 124 insertions(+), 28 deletions(-) create mode 100644 brain/api/v1/pages.js diff --git a/brain/api/content/posts.js b/brain/api/content/posts.js index 051a386..2889ba3 100644 --- a/brain/api/content/posts.js +++ b/brain/api/content/posts.js @@ -15,7 +15,7 @@ const fs = require('fs-extra'); const dateUtils = new DateUtils(); const rightsManager = new RightsManager(); const uploadPath = - './content/blog-images/' + + './public/assets/images/blog/' + dateUtils.getDate('year', new Date()) + '/' + dateUtils.getDate('month', new Date()); diff --git a/brain/api/content/settings.js b/brain/api/content/settings.js index 0f468a7..d80792b 100644 --- a/brain/api/content/settings.js +++ b/brain/api/content/settings.js @@ -13,7 +13,7 @@ const fs = require('fs-extra'); const dateUtils = new DateUtils(); const rightsManager = new RightsManager(); const uploadPath = - './content/user-images/' + + './public/assets/images/user/' + dateUtils.getDate('year', new Date()) + '/' + dateUtils.getDate('month', new Date()); diff --git a/brain/api/v1/auth.js b/brain/api/v1/auth.js index a91958b..b63d87b 100644 --- a/brain/api/v1/auth.js +++ b/brain/api/v1/auth.js @@ -16,7 +16,6 @@ router.get('/', function(req, res) { jwt.verify(token, 'super-secret-string', function(err, decoded) { if (err) return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' }); - res.status(200).send(decoded); }); }); @@ -24,7 +23,6 @@ router.get('/', function(req, res) { * Login Member and return token */ router.post('/login', function(req, res) { - let form = req.body; fs.readJson('config/folks.json').then(folks => { let found = _.find(folks, { handle: req.body.handle }); if (found) { @@ -42,7 +40,6 @@ router.post('/login', function(req, res) { let session = req.session; session.user = found; session.token = token; - res.json({ type: DataEvent.REQUEST_GOOD, message: 'Yes', token: session.token }); } else { res.json({ diff --git a/brain/api/v1/pages.js b/brain/api/v1/pages.js new file mode 100644 index 0000000..67d27c7 --- /dev/null +++ b/brain/api/v1/pages.js @@ -0,0 +1,55 @@ +import DateUtils from '../../utils/tools/DateUtils'; +import Pages from '../../utils/content/Pages'; +import StringUtils from '../../utils/tools/StringUtils'; +import * as DataEvent from '../../utils/events/DataEvent'; +import sanitize from 'sanitize-html'; +import RightsManager, { + TASK_CREATE, + TASK_UPDATE, + OBJECT_POST +} from '../../utils/tools/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 dateUtils = new DateUtils(); +const rightsManager = new RightsManager(); +const pagesUtil = new Pages(); +const uploadPath = + './public/assets/images/blog/' + + dateUtils.getDate('year', new Date()) + + '/' + + dateUtils.getDate('month', new Date()); +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'); + +/*** + Retrieve Pages +*/ +router.get('/', (req, res) => { + pagesUtil.retrieve().then(result => { + res.json(result); + }); +}); + +module.exports = router; diff --git a/brain/app.js b/brain/app.js index 93b74ea..a2de3f2 100644 --- a/brain/app.js +++ b/brain/app.js @@ -44,25 +44,25 @@ app.use(flash()); //var front = require('./routes/front/index')(session); var dash = require('./routes/dash/index'); var postDashboard = require('./routes/dash/posts'); -var settingsDashboard = require('./routes/dash/settings'); -var navDashboard = require('./routes/dash/nav'); +//var settingsDashboard = require('./routes/dash/settings'); +//var navDashboard = require('./routes/dash/nav'); //api -var postLibrary = require('./api/content/posts'); -var settings = require('./api/content/settings'); -var mailer = require('./api/mail/mailer'); +var pages = require('./api/v1/pages'); +//var settings = require('./api/content/settings'); +//var mailer = require('./api/mail/mailer'); var auth = require('./api/v1/auth'); // API PATHS -//app.use('/api/post', postLibrary); +app.use('/api/v1/page', pages); //app.use('/api/settings', settings); -app.use('/api/mail', mailer); +//app.use('/api/mail', mailer); app.use('/api/v1/auth', auth); // PAGES //app.use('/', front); app.use('/@/dashboard', dash); app.use('/@/dashboard/posts', postDashboard); -app.use('/@/dashboard/settings', settingsDashboard); -app.use('/@/dashboard/navigation', navDashboard); +//app.use('/@/dashboard/settings', settingsDashboard); +//app.use('/@/dashboard/navigation', navDashboard); //app.use('/mailer', mailer); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/brain/routes/dash/index.js b/brain/routes/dash/index.js index 9250bb1..a6c7ad7 100644 --- a/brain/routes/dash/index.js +++ b/brain/routes/dash/index.js @@ -1,17 +1,23 @@ +import Pages from '../../utils/content/Pages'; + const express = require('express'); const router = express.Router(); const settings = require('../../../config/site-settings.json'); + //-------------------------- // Index //-------------------------- router.get('/', function(req, res) { - let loggedIn = false; - - if (req.session.user) loggedIn = true; + let pages = new Pages(); + pages.retrieve().then(result => { + let pageData = []; + if (req.session.user) { + pageData = { title: settings.title, status: true, pages: result }; + } else { + pageData = { title: settings.title, status: false, pages: result }; + } - res.render(settings.admin_theme + '/index', { - title: settings.title, - auth_status: loggedIn + res.render(settings.admin_theme + '/index', pageData); }); }); diff --git a/brain/routes/dash/posts.js b/brain/routes/dash/posts.js index f5b958b..c607194 100644 --- a/brain/routes/dash/posts.js +++ b/brain/routes/dash/posts.js @@ -12,7 +12,6 @@ const dateUtils = new DateUtils(); router.get('/list/:filter?/:page?', function(req, res) { var pageNum = req.params.page; var filter = req.params.filter; - if (pageNum == '' || pageNum == null) pageNum = 1; if (filter == '' || filter == null) filter = 'all'; /* diff --git a/package-lock.json b/package-lock.json index 2937d6a..8798df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4216,14 +4216,22 @@ } }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -4233,9 +4241,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -4517,6 +4525,22 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -4874,6 +4898,15 @@ "uc.micro": "^1.0.5" } }, + "markdown-yaml-metadata-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/markdown-yaml-metadata-parser/-/markdown-yaml-metadata-parser-2.0.3.tgz", + "integrity": "sha512-0VKi80rjcMTq3zBUwAzzYGa4Lp4pp+DE4hQW21cbhLVTLXygSxl9euAA6k+xiRvNubWIOjUEnoSiNgPcCuD27Q==", + "requires": { + "js-yaml": "^3.13.1", + "ramda": "^0.26.1" + } + }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -5816,6 +5849,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" + }, "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", diff --git a/package.json b/package.json index 83a7227..6b199ed 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "lodash": "^4.17.15", "mailgun-js": "^0.18.0", "markdown-it": "^8.4.1", + "markdown-yaml-metadata-parser": "^2.0.3", "memorystore": "^1.6.1", "morgan": "latest", "multer": "latest",