Session manager modified to catch all requests. Login redirect fix
[osm/UI.git] / skyquake / framework / core / api_utils / utils.js
index 185c7c6..667e7a9 100644 (file)
@@ -50,13 +50,39 @@ var confdPort = function(api_server) {
 };
 
 var projectContextUrl = function(req, url) {
-       if (req.session && req.session.projectId) {
-               return url.replace(/(\/api\/operational\/|\/api\/config\/|\/api\/operations\/)(.*)/, '$1project/' + req.session.projectId + '/$2');
-
+       //NOTE: We need to go into the sessionStore because express-session
+       // does not reliably update the session.
+       // See https://github.com/expressjs/session/issues/450
+       var projectId = (req.session &&
+                                        req.sessionStore &&
+                                        req.sessionStore.sessions &&
+                                        req.sessionStore.sessions[req.session.id] &&
+                                        JSON.parse(req.sessionStore.sessions[req.session.id])['projectId']) ||
+                                        (null);
+       if (projectId) {
+               return url.replace(/(\/api\/operational\/|\/api\/config\/)(.*)/, '$1project/' + projectId + '/$2');
        }
        return url;
 }
 
+var addProjectContextToRPCPayload = function(req, url, inputPayload) {
+       //NOTE: We need to go into the sessionStore because express-session
+       // does not reliably update the session.
+       // See https://github.com/expressjs/session/issues/450
+       var projectId = (req.session &&
+                                        req.sessionStore &&
+                                        req.sessionStore.sessions &&
+                                        req.sessionStore.sessions[req.session.id] &&
+                                        JSON.parse(req.sessionStore.sessions[req.session.id])['projectId']) ||
+                                        (null);
+       if (projectId) {
+               if (url.indexOf('/api/operations/')) {
+                       inputPayload['project-name'] = projectId;
+               }
+       }
+       return inputPayload;
+}
+
 
 var validateResponse = function(callerName, error, response, body, resolve, reject) {
        var res = {};
@@ -170,6 +196,9 @@ if (process.env.LOG_REQUESTS) {
  * @param {Function} res - a handle to the express response function
  */
 var sendErrorResponse = function(error, res) {
+       if (!error.statusCode) {
+               console.error('Status Code has not been set in error object: ', error);
+       }
        res.status(error.statusCode);
        res.send(error);
 }
@@ -254,5 +283,7 @@ module.exports = {
 
     getPortForProtocol: getPortForProtocol,
 
-    projectContextUrl: projectContextUrl
+    projectContextUrl: projectContextUrl,
+
+    addProjectContextToRPCPayload: addProjectContextToRPCPayload
 };