@haxtheweb/haxcms-nodejs
Version:
HAXcms single and multisite nodejs server, api, and administration
63 lines (61 loc) • 2.11 kB
JavaScript
;
const {
HAXCMS
} = require('../lib/HAXCMS.js');
/**
* @OA\Post(
* path="/deleteNode",
* tags={"cms","authenticated","node"},
* @OA\Parameter(
* name="jwt",
* description="JSON Web token, obtain by using /login",
* in="query",
* required=true,
* @OA\Schema(type="string")
* ),
* @OA\Response(
* response="200",
* description="Delete a node"
* )
* )
*/
async function deleteNode(req, res) {
let site = await HAXCMS.loadSite(req.body['site']['name']);
if (req.query['site_token'] && HAXCMS.validateRequestToken(req.query['site_token'], HAXCMS.getActiveUserName() + ':' + req.body['site']['name'])) {
// update the page's content, using manifest to find it
// this ensures that writing is always to what the file system
// determines to be the correct page
let page;
if (page = site.loadNode(req.body['node']['id'])) {
if ((await site.deleteNode(page)) === false) {
res.sendStatus(500);
} else {
// now, we need to look for orphans if we deleted anything
for (var key in site.manifest.items) {
// just to be safe..
let pageUpdate;
if (pageUpdate = site.loadNode(site.manifest.items[key].id)) {
// ensure that parent is valid to rescue orphan items
let parentPage;
if (pageUpdate.parent != null && !(parentPage = site.loadNode(pageUpdate.parent))) {
pageUpdate.parent = null;
// force to bottom of things while still being in old order if lots of things got axed
pageUpdate.order = parseInt(pageUpdate.order) + site.manifest.items.length - 1;
site.updateNode(pageUpdate);
}
}
}
await site.gitCommit('Page deleted: ' + page.title + ' (' + page.id + ')');
res.send({
status: 200,
data: page
});
}
} else {
res.sendStatus(500);
}
} else {
res.sendStatus(403);
}
}
module.exports = deleteNode;