mainApp.factory('Identity',[ '$http', '$cookies', '$rootScope', function($http, $cookies, $rootScope){ /* Create profile structure to store informations * about current session */ var profile={}; profile.username=null; profile.projectname=null; var token=null; /* * @returns {boolean} Return true if a cookie is found (and load it in profile) false else */ var isAlreadyLogin=function(){ // Load cookies var profileInCookie=$cookies.getObject('profile'); var tokenPart_0InCookie=$cookies.getObject('token.part_0'); var tokenPart_1InCookie=$cookies.getObject('token.part_1'); // Check if cookie is defined if(typeof profileInCookie !== 'undefined' && typeof tokenPart_0InCookie !== 'undefined' && typeof tokenPart_1InCookie !== 'undefined' ){ //if(token!==null){ // If yes, put it into variables angular.extend(profile, profileInCookie); token=tokenPart_0InCookie+tokenPart_1InCookie; //} // Return I'm Login return true; } // Show the login overlay $rootScope.$broadcast("logoutEvent"); // Return I'm not Login return false; } /* * Destroy profile cookies */ var logout=function(){ $cookies.remove('profile'); $cookies.remove('token.part_0'); $cookies.remove('token.part_1'); token=null; profile.username=null; profile.projectname=null; // Reload Page //location.reload(); $rootScope.$broadcast("logoutEvent"); } /** * * @param {string} response The response to parse * @param {boolean} to check if the request is send or not * @returns {requestParserResult} Formated data */ var parseLoginAnswer=function(response, failedToSendRequest){ // Defined return object var requestParserResult={}; requestParserResult.status=1; requestParserResult.failReason=null; if (typeof response.data.token !== 'undefined') { // Set status code requestParserResult.status=0; // Find the middle of the token to split it var middle=parseInt(response.data.token.length/2); // Create expire date (cookie expire in 55 mins) var expireDate=new Date(); expireDate.setMinutes(expireDate.getMinutes()+55); // Save profile $cookies.putObject('profile', profile, {'expires': expireDate}); // Save first part of token $cookies.putObject('token.part_0', response.data.token.substring(0, middle), {'expires': expireDate}); // Save second part of token $cookies.putObject('token.part_1', response.data.token.substring(middle, response.data.token.length), {'expires': expireDate}); // Put token in var token=response.data.token; } else if(failedToSendRequest){ requestParserResult.failReason="Failed to send request"; } else{ requestParserResult.failReason="Please check your username, password and project name !"; } return requestParserResult; }; /** * Function to connect to OpenStack * * @param {object} $http Angular $http service * @param {string} username The user name * @param {string} password The user password * @param {string} projectname The user project name * @param {function} function to call when data is avalaible */ var login=function(username, password,projectname,callback){ // Set profile information (early) profile.username=username; profile.projectname=projectname; var result=$http.post('../server/index.php', $.param({"task" : "Authenticate", "user" : username, "password" : password, "project" : projectname})); // Wait and handle the response result.then(function (response){ callback(parseLoginAnswer(response, false)); },function(response){ callback(parseLoginAnswer(response, true)); }); }; /* * Get the profile */ var getProfile=function(){ return profile; } /* * Get the token */ var getToken=function(){ return token; } // Return services objects return { login: login, getProfile: getProfile, isAlreadyLogin: isAlreadyLogin, logout:logout, getToken:getToken }; }]);