Mano roles in projects
[osm/UI.git] / skyquake / framework / core / modules / api / sessions.js
index 2036030..ca8669b 100644 (file)
@@ -33,10 +33,11 @@ var base64 = require('base-64');
 var APIVersion = '/v2';
 var configurationAPI = require('./configuration');
 
-function logAndReject(mesg, reject) {
+function logAndReject(mesg, reject, errCode) {
     res.errorMessage = {
         error: mesg
     }
+    res.statusCode = errCode || constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST;
     console.log(mesg);
     reject(res);
 }
@@ -45,7 +46,7 @@ function logAndRedirectToLogin(mesg, res, req) {
     var api_server = req.query['api_server'] || (req.protocol + '://' + configurationAPI.globalConfiguration.get().api_server);
     var upload_server = req.protocol + '://' + (configurationAPI.globalConfiguration.get().upload_server || req.hostname);
     console.log(mesg);
-    res.redirect('login.html?api_server=' + api_server + '&upload_server=' + upload_server);
+    res.redirect('login.html?api_server=' + api_server + '&upload_server=' + upload_server + '&referer=' + encodeURIComponent(req.headers.referer));
     res.end();
 }
 
@@ -95,19 +96,26 @@ sessionsAPI.create = function(req, res) {
             } else {
                 // go through projects and get list of projects that this user belongs to.
                 // pick first one as default project?
-
+                var isLCM = false;
                 var projects = JSON.parse(results[1].body).collection['rw-project:project'];
                 projects && projects.map(function(project) {
                     project['project-config'] &&
                     project['project-config']['user'] &&
                     project['project-config']['user'].map(function(user) {
                         if (user['user-name'] == username) {
-                            project_list_for_user.push(project.name);
+                            project_list_for_user.push(project);
+                            user['rw-project-mano:mano-role'] && user['rw-project-mano:mano-role'].map(function(role) {
+                                if(role.role.indexOf('rw-project-mano:lcm') > -1) {
+                                    isLCM = true;
+                                }
+                            })
                         }
                     });
                 });
-
-                req.session.projectId = (project_list_for_user.length > 0) && project_list_for_user.sort() && project_list_for_user[0];
+                if (project_list_for_user.length > 0) {
+                    req.session.projectId = project_list_for_user.sort() && project_list_for_user[0].name;
+                    req.session.isLCM = isLCM;
+                }
             }
 
             req.session.authorization = authorization_header_string;
@@ -116,8 +124,9 @@ sessionsAPI.create = function(req, res) {
                 username: username,
                 // project: req.session.projectId
             };
-            var successMsg = 'User =>' + username + ' successfully logged in.';
-            successMsg += req.session.projectId ? 'Project =>' + req.session.projectId + ' set as default.' : '';
+            req.session.redirect = true;
+            var successMsg = 'User => ' + username + ' successfully logged in.';
+            successMsg += req.session.projectId ? 'Project => ' + req.session.projectId + ' set as default.' : '';
 
             console.log(successMsg);
 
@@ -127,6 +136,13 @@ sessionsAPI.create = function(req, res) {
                     status: successMsg
                 })
             };
+
+            req.session.save(function(err) {
+                if (err) {
+                    console.log('Error saving session to store', err);
+                }
+            })
+
             resolve(response);
 
         }).catch(function(error) {
@@ -142,19 +158,24 @@ sessionsAPI.addProjectToSession = function(req, res) {
     return new Promise(function(resolve, reject) {
         if (req.session && req.session.loggedIn == true) {
             req.session.projectId = req.params.projectId;
-            var successMsg = 'Added project' + req.session.projectId + ' to session' + req.sessionID;
-            console.log(successMsg);
+            req.session.save(function(err) {
+                if (err) {
+                    console.log('Error saving session to store', err);
+                }
+                var successMsg = 'Added project ' + req.session.projectId + ' to session ' + req.sessionID;
+                console.log(successMsg);
+
+                return resolve ({
+                    statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK,
+                    data: JSON.stringify({
+                        status: successMsg
+                    })
+                });
 
-            return resolve ({
-                statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK,
-                data: JSON.stringify({
-                    status: successMsg
-                })
+                var errorMsg = 'Session does not exist or not logged in';
+                logAndReject(errorMsg, reject, constants.HTTP_RESPONSE_CODES.ERROR.NOT_FOUND);
             });
         }
-
-        var errorMsg = 'Session does not exist or not logged in';
-        logAndReject(errorMsg, reject);
     });
 }
 
@@ -162,6 +183,7 @@ sessionsAPI.delete = function(req, res) {
     var api_server = req.query["api_server"];
     var uri = utils.confdPort(api_server);
     var url = uri + '/api/logout';
+    req.returnTo = req.headers.referer;
     return new Promise(function(resolve, reject) {
         Promise.all([
             rp({