|
|
|
@ -31,117 +31,89 @@ var post_upload = multer({
|
|
|
|
|
storage: storage
|
|
|
|
|
}).array('post_image');
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
Retrieve Pages
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* Retrives list of Pages
|
|
|
|
|
* @public
|
|
|
|
|
*/
|
|
|
|
|
router.get('/', (req, res) => {
|
|
|
|
|
book.getPage().then(result => {
|
|
|
|
|
res.json(result);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
Update Page
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* Add/Update Page
|
|
|
|
|
*/
|
|
|
|
|
router.post('/write/:task?', feature_upload, (req, res) => {
|
|
|
|
|
if (req.session.user) {
|
|
|
|
|
//Get enctrypted hashed token from header request
|
|
|
|
|
let hash = req.headers['x-access-token'];
|
|
|
|
|
//Checks if token is a proper hash, if not reject
|
|
|
|
|
if (!isTokenValid(req.session.token, hash)) {
|
|
|
|
|
res.json({
|
|
|
|
|
type: DataEvent.API_REQUEST_LAME,
|
|
|
|
|
message: 'Invalid Token. Auth Blocked'
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
//console.log('TOKEN IS GOOD');
|
|
|
|
|
var member = req.session.user;
|
|
|
|
|
jwt.verify(req.session.token, member.key, function(err, decoded) {
|
|
|
|
|
if (err) {
|
|
|
|
|
console('NOPE', err);
|
|
|
|
|
authCheck(req)
|
|
|
|
|
.then(() => {
|
|
|
|
|
let body = _.mapValues(req.body);
|
|
|
|
|
let feature = '';
|
|
|
|
|
let task = '';
|
|
|
|
|
req.params.task === 'new'
|
|
|
|
|
? (task = DataEvent.API_PAGE_CREATE)
|
|
|
|
|
: (task = DataEvent.API_PAGE_WRITE);
|
|
|
|
|
if (req.files.length > 0) {
|
|
|
|
|
var path = req.files[0].path;
|
|
|
|
|
feature = '/' + path.substring(7, path.length);
|
|
|
|
|
} else {
|
|
|
|
|
var url = body.feature_image;
|
|
|
|
|
url != null || url != undefined || url != ''
|
|
|
|
|
? (feature = url.substring(21, url.length))
|
|
|
|
|
: (feature = '');
|
|
|
|
|
}
|
|
|
|
|
console.log('YUP', decoded);
|
|
|
|
|
body.feature = feature;
|
|
|
|
|
body.deleted = false;
|
|
|
|
|
book.editPage(body, body.page_uuid, task, req.session.user)
|
|
|
|
|
.then(result => {
|
|
|
|
|
if (result.type === DataEvent.PAGE_CREATE) {
|
|
|
|
|
fs.readJSON('site/settings.json').then(settings => {
|
|
|
|
|
settings.library_stats.current_index = ++settings.library_stats
|
|
|
|
|
.current_index;
|
|
|
|
|
settings.library_stats.total_pages = ++settings.library_stats
|
|
|
|
|
.total_pages;
|
|
|
|
|
fs.writeJSON('site/settings.json', settings);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
res.json(result);
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
res.json(err);
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
res.json(err);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var feature = '';
|
|
|
|
|
if (req.files.length > 0) {
|
|
|
|
|
var path = req.files[0].path;
|
|
|
|
|
feature = '/' + path.substring(7, path.length);
|
|
|
|
|
} else {
|
|
|
|
|
var url = req.body.feature_image;
|
|
|
|
|
url != null || url != undefined || url != ''
|
|
|
|
|
? (feature = url.substring(21, url.length))
|
|
|
|
|
: (feature = '');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var pageWrite =
|
|
|
|
|
'---\n' +
|
|
|
|
|
'id: ' +
|
|
|
|
|
req.body.page_id +
|
|
|
|
|
'\n' +
|
|
|
|
|
'uuid: ' +
|
|
|
|
|
req.body.page_uuid +
|
|
|
|
|
'\n' +
|
|
|
|
|
'title: ' +
|
|
|
|
|
req.body.title +
|
|
|
|
|
'\n' +
|
|
|
|
|
'feature: ' +
|
|
|
|
|
feature +
|
|
|
|
|
'\n' +
|
|
|
|
|
'layout: ' +
|
|
|
|
|
'page' +
|
|
|
|
|
'\n' +
|
|
|
|
|
'tags: ' +
|
|
|
|
|
req.body.tags +
|
|
|
|
|
'\n' +
|
|
|
|
|
'author: ' +
|
|
|
|
|
req.session.user.handle +
|
|
|
|
|
'\n' +
|
|
|
|
|
'created: ' +
|
|
|
|
|
moment(req.body.created).format() +
|
|
|
|
|
'\n' +
|
|
|
|
|
'updated: ' +
|
|
|
|
|
moment(Date.now()).format() +
|
|
|
|
|
'\n' +
|
|
|
|
|
'menu: ' +
|
|
|
|
|
req.body.pinToMenu +
|
|
|
|
|
'\n' +
|
|
|
|
|
'featured: ' +
|
|
|
|
|
req.body.featureStatus +
|
|
|
|
|
'\n' +
|
|
|
|
|
'published: ' +
|
|
|
|
|
req.body.publishedStatus +
|
|
|
|
|
'\n' +
|
|
|
|
|
'slug: ' +
|
|
|
|
|
req.body.slug +
|
|
|
|
|
'\n' +
|
|
|
|
|
'---\n\n' +
|
|
|
|
|
req.body.content;
|
|
|
|
|
fs.writeFile('content/pages/' + req.body.slug + '.md', pageWrite, err => {
|
|
|
|
|
// throws an error, you could also catch it here
|
|
|
|
|
if (err) res.json({ type: DataEvent.PAGE_ERROR, message: err });
|
|
|
|
|
/**
|
|
|
|
|
* Soft deletes Page
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// success case, the file was saved
|
|
|
|
|
if (req.params.task === 'new') {
|
|
|
|
|
// if new file, update settings index and page count
|
|
|
|
|
fs.readJSON('site/settings.json').then(settings => {
|
|
|
|
|
settings.library_stats.current_index = ++settings.library_stats.current_index;
|
|
|
|
|
settings.library_stats.total_pages = ++settings.library_stats.total_pages;
|
|
|
|
|
fs.writeJSON('site/settings.json', settings);
|
|
|
|
|
});
|
|
|
|
|
res.json({
|
|
|
|
|
type: DataEvent.PAGE_ADDED,
|
|
|
|
|
message: 'New Page Created',
|
|
|
|
|
id: req.body.page_uuid
|
|
|
|
|
router.post('/delete', (req, res) => {
|
|
|
|
|
if (req.session.user) {
|
|
|
|
|
authCheck(req)
|
|
|
|
|
.then(() => {
|
|
|
|
|
book.editPage([], req.body.id, DataEvent.API_PAGE_DELETE, req.session.user)
|
|
|
|
|
.then(result => {
|
|
|
|
|
res.json(result);
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
res.json(err);
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
res.json(err);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
res.json({ type: DataEvent.PAGE_UPDATED, message: 'Page saved, boss' });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Uploads image from a Page content
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
router.post('/add-post-image', post_upload, function(req, res) {
|
|
|
|
|
//console.log(req.body);
|
|
|
|
|
var image = req.files[0].path;
|
|
|
|
@ -157,3 +129,39 @@ module.exports = router;
|
|
|
|
|
function isTokenValid(token, hashedToken) {
|
|
|
|
|
return bCrypt.compareSync(token, hashedToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function authCheck(req) {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
let hash = req.headers['x-access-token'];
|
|
|
|
|
let response = [];
|
|
|
|
|
//Checks if token is a proper hash, if not reject
|
|
|
|
|
if (!isTokenValid(req.session.token, hash)) {
|
|
|
|
|
response = {
|
|
|
|
|
status: false,
|
|
|
|
|
type: DataEvent.API_REQUEST_LAME,
|
|
|
|
|
message: 'No Token Present. Auth Blocked'
|
|
|
|
|
};
|
|
|
|
|
reject(response);
|
|
|
|
|
//res.json();
|
|
|
|
|
} else {
|
|
|
|
|
var member = req.session.user;
|
|
|
|
|
jwt.verify(req.session.token, member.key, function(err, decoded) {
|
|
|
|
|
if (err) {
|
|
|
|
|
response = {
|
|
|
|
|
status: false,
|
|
|
|
|
type: DataEvent.API_REQUEST_LAME,
|
|
|
|
|
message: 'Invalid Token. Auth Blocked'
|
|
|
|
|
};
|
|
|
|
|
reject(response);
|
|
|
|
|
}
|
|
|
|
|
response = {
|
|
|
|
|
status: true,
|
|
|
|
|
type: DataEvent.API_REQUEST_GOOD,
|
|
|
|
|
message: 'Token Verified',
|
|
|
|
|
token: decoded
|
|
|
|
|
};
|
|
|
|
|
resolve(response);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|