From c75a16635af3d49e87186bf110ba51d8ec461232 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Sat, 20 Jul 2024 11:35:13 +0100 Subject: [PATCH] Allow admins to remove nodes via ui --- routes/nodes.js | 28 ++++++++++++++++++++++++++++ template/node.html | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/routes/nodes.js b/routes/nodes.js index 7f8599d..b89e1ad 100644 --- a/routes/nodes.js +++ b/routes/nodes.js @@ -12,6 +12,7 @@ var ratings = require("../lib/ratings"); var templates = require("../lib/templates"); var events = require("../lib/events"); var collections = require("../lib/collections"); +var settings = require("../config"); var app = express(); @@ -53,6 +54,8 @@ function getNode(id, scope, collection, req,res) { } npmNodes.get(id).then(function(node) { node.sessionuser = req.session.user; + node.isAdmin = node.sessionuser && (settings.admins.indexOf(req.session.user.login) != -1); + node.Admins = settings.admins node.csrfToken = req.csrfToken(); node.pageTitle = req.params.id+" (node)"; @@ -305,6 +308,31 @@ app.get("/add/node",appUtils.csrfProtection(),function(req,res) { res.send(mustache.render(templates.addNode,context,templates.partials)); }); +app.delete("/node/:scope(@[^\\/]{1,})?/:id([^@][^\\/]{1,})", appUtils.csrfProtection(),function(req,res) { + var id = req.params.id; + if (req.params.scope) { + id = req.params.scope+"/"+id; + } + const isValid = validatePackage(id) + if (!isValid.validForNewPackages && !isValid.validForOldPackages) { + res.status(404).send() + return + } + if (!req.session.user || settings.admins.indexOf(req.session.user.login) === -1) { + res.status(404).send() + return + } + npmNodes.remove(id).then(() => { + res.writeHead(303, { + Location: "/" + }); + res.end(); + }).catch(err => { + res.status(400).send(); + }) +}); + + app.post("/add/node",appUtils.csrfProtection(),function(req,res) { var context = {}; context.sessionuser = req.session.user; diff --git a/template/node.html b/template/node.html index 2c3da84..4e31317 100644 --- a/template/node.html +++ b/template/node.html @@ -61,6 +61,10 @@

Actions

+ {{#isAdmin}} + +
+ {{/isAdmin}} {{/sessionuser}} @@ -167,6 +171,34 @@

Report this module

}); }); + var removeSubmitted = false; + $('#remove-button').click(function(e) { + if (confirm('Are you sure you want to remove this module?')) { + e.preventDefault(); + if (refreshSubmitted) { + return; + } + removeSubmitted = true; + $("#remove-node-error").hide(); + $("#remove-node-label").hide(); + $("#remove-button").addClass("submitted"); + $("#remove-node-loader").show(); + $.ajax({ + url: window.location.pathname + '?_csrf={{csrfToken}}', + type: 'DELETE', + success: function(data) { + window.location = '/'; + } + }).fail(function(err) { + removeSubmitted = false; + console.log("ERROR",err); + $("#remove-button").removeClass("submitted"); + $("#remove-node-loader").hide(); + $("#remove-node-label").show(); + $("#remove-node-error").text(err.responseText).show(); + }); + } + }); });