Skip to content

Commit c75a166

Browse files
committed
Allow admins to remove nodes via ui
1 parent 8dae950 commit c75a166

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

routes/nodes.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var ratings = require("../lib/ratings");
1212
var templates = require("../lib/templates");
1313
var events = require("../lib/events");
1414
var collections = require("../lib/collections");
15+
var settings = require("../config");
1516

1617
var app = express();
1718

@@ -53,6 +54,8 @@ function getNode(id, scope, collection, req,res) {
5354
}
5455
npmNodes.get(id).then(function(node) {
5556
node.sessionuser = req.session.user;
57+
node.isAdmin = node.sessionuser && (settings.admins.indexOf(req.session.user.login) != -1);
58+
node.Admins = settings.admins
5659
node.csrfToken = req.csrfToken();
5760
node.pageTitle = req.params.id+" (node)";
5861

@@ -305,6 +308,31 @@ app.get("/add/node",appUtils.csrfProtection(),function(req,res) {
305308
res.send(mustache.render(templates.addNode,context,templates.partials));
306309
});
307310

311+
app.delete("/node/:scope(@[^\\/]{1,})?/:id([^@][^\\/]{1,})", appUtils.csrfProtection(),function(req,res) {
312+
var id = req.params.id;
313+
if (req.params.scope) {
314+
id = req.params.scope+"/"+id;
315+
}
316+
const isValid = validatePackage(id)
317+
if (!isValid.validForNewPackages && !isValid.validForOldPackages) {
318+
res.status(404).send()
319+
return
320+
}
321+
if (!req.session.user || settings.admins.indexOf(req.session.user.login) === -1) {
322+
res.status(404).send()
323+
return
324+
}
325+
npmNodes.remove(id).then(() => {
326+
res.writeHead(303, {
327+
Location: "/"
328+
});
329+
res.end();
330+
}).catch(err => {
331+
res.status(400).send();
332+
})
333+
});
334+
335+
308336
app.post("/add/node",appUtils.csrfProtection(),function(req,res) {
309337
var context = {};
310338
context.sessionuser = req.session.user;

template/node.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ <h4>Actions</h4>
6161
<button id="refresh-button" type="button" class="user-profile-action" style="background: none; color: #aa6767"><span id="refresh-node-label">check for update</span><img id="refresh-node-loader" class="loader" src="/images/loader.gif" /></button>
6262
<div id="refresh-node-error" class="dialog-warning" style="position:relative"></div>
6363
</form>
64+
{{#isAdmin}}
65+
<button id="remove-button" type="submit" class="user-profile-action" style="background: none; color: #aa6767"><span id="remove-node-label">remove from library</span><img id="remove-node-loader" class="loader" src="/images/loader.gif" /></button>
66+
<div id="remove-node-error" class="dialog-warning" style="position:relative"></div>
67+
{{/isAdmin}}
6468
</div>
6569
{{/sessionuser}}
6670
</div>
@@ -167,6 +171,34 @@ <h4>Report this module</h4>
167171
});
168172
});
169173

174+
var removeSubmitted = false;
175+
$('#remove-button').click(function(e) {
176+
if (confirm('Are you sure you want to remove this module?')) {
177+
e.preventDefault();
178+
if (refreshSubmitted) {
179+
return;
180+
}
181+
removeSubmitted = true;
182+
$("#remove-node-error").hide();
183+
$("#remove-node-label").hide();
184+
$("#remove-button").addClass("submitted");
185+
$("#remove-node-loader").show();
186+
$.ajax({
187+
url: window.location.pathname + '?_csrf={{csrfToken}}',
188+
type: 'DELETE',
189+
success: function(data) {
190+
window.location = '/';
191+
}
192+
}).fail(function(err) {
193+
removeSubmitted = false;
194+
console.log("ERROR",err);
195+
$("#remove-button").removeClass("submitted");
196+
$("#remove-node-loader").hide();
197+
$("#remove-node-label").show();
198+
$("#remove-node-error").text(err.responseText).show();
199+
});
200+
}
201+
});
170202
});
171203

172204
</script>

0 commit comments

Comments
 (0)