diff --git a/plugins/c9.preview/preview.handler.js b/plugins/c9.preview/preview.handler.js index b10df48b..db108e8c 100644 --- a/plugins/c9.preview/preview.handler.js +++ b/plugins/c9.preview/preview.handler.js @@ -79,15 +79,6 @@ define(function(require, exports, module) { project.getRole(req.session.uid, function(err, role) { if (err) return next(err); - if (role == db.Project.ROLE_NONE) { - if (project.isPublicPreview()) - role = db.Project.ROLE_VISITOR; - else if (req.session.uid == -1) - return next(new error.Unauthorized()); - else - return next(new error.Forbidden("You don't have access rights to preview this workspace")); - } - var wsSession = { role: role, pid: project.id, @@ -95,12 +86,19 @@ define(function(require, exports, module) { type: project.scm }; - if (wsSession.type != "docker" || project.state != db.Project.STATE_READY) - return next(); - roleCache.set(key, wsSession); req.projectSession = wsSession; + if (role == db.Project.ROLE_NONE) { + if (project.isPublicPreview()) + role = db.Project.ROLE_VISITOR; + else + return next(); + } + + if (wsSession.type != "docker" || project.state != db.Project.STATE_READY) + return next(); + project.populate("remote", function(err) { if (err) return next(err); @@ -122,6 +120,21 @@ define(function(require, exports, module) { }); }; } + + function checkRole(db) { + return function(req, res, next) { + var role = req.projectSession.role; + + if (role == db.Project.ROLE_NONE) { + if (req.session.uid == -1) + return next(new error.Unauthorized()); + else + return next(new error.Forbidden("You don't have access rights to preview this workspace")); + } + + return next(); + }; + } function getProxyUrl(getServer) { return function(req, res, next) { @@ -363,6 +376,7 @@ define(function(require, exports, module) { "preview.handler": { getProjectSession: getProjectSession, getRole: getRole, + checkRole: checkRole, getProxyUrl: getProxyUrl, proxyCall: proxyCall } diff --git a/plugins/c9.preview/preview.js b/plugins/c9.preview/preview.js index b47957f3..9c222818 100644 --- a/plugins/c9.preview/preview.js +++ b/plugins/c9.preview/preview.js @@ -55,6 +55,7 @@ define(function(require, exports, module) { require("./lib/middleware/block-dot-files"), handler.getProjectSession(), handler.getRole(db), + handler.checkRole(db), handler.getProxyUrl(function() { return getVfsServers()[0] || null; }),