From 586ea62b291de40bc372e2472541a0383cb6b6b3 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Thu, 29 Sep 2016 00:04:24 +0000 Subject: [PATCH] When a user is removed from a project, kill their VFS session --- plugins/c9.vfs.server/vfs.server.js | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/plugins/c9.vfs.server/vfs.server.js b/plugins/c9.vfs.server/vfs.server.js index 3be49599..aa259a99 100644 --- a/plugins/c9.vfs.server/vfs.server.js +++ b/plugins/c9.vfs.server/vfs.server.js @@ -277,7 +277,7 @@ function plugin(options, imports, register) { var vfsid = req.params.vfsid; var scope = req.params.scope; var path = req.params.path; - + var entry = cache.get(vfsid); if (!entry) { var err = new error.PreconditionFailed("VFS connection does not exist"); @@ -335,10 +335,32 @@ function plugin(options, imports, register) { user.save && user.save(function() {}); } } - + + function handlePublish(vfs, messageString) { + var message = JSON.parse(messageString); + switch (message.action) { + case "remove_member": + handleRemoveProjectMember(vfs, message); + break; + default: + break; + } + } + + function handleRemoveProjectMember(vfs, message) { + if (vfs.uid !== message.body.uid) return; + + console.log("Removing ", vfs.id, " for user ", vfs.uid, " project ", vfs.pid, " from the vfs connection cache"); + // Remove after 2s so client has time to recieve final "You've been removed" PubSub message. + setTimeout(function() { + cache.remove(vfs.id); + }, 2000); + } + register(null, { "vfs.server": { - get section() { return section; } + get section() { return section; }, + get handlePublish() { return handlePublish; } } }); }