split computing the role and enforcing it so we can cache more

pull/295/merge
Fabian Jakobs 2016-05-30 14:34:50 +00:00
rodzic c4eea5501b
commit c2e82981b7
2 zmienionych plików z 27 dodań i 12 usunięć

Wyświetl plik

@ -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
}

Wyświetl plik

@ -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;
}),