/********************************************* * Copyright (c) 2013 AnsibleWorks, Inc. * * User authentication functions * */ angular.module('AuthService', ['ngCookies']) .factory('Authorization', ['$http', '$rootScope', '$location', '$cookieStore', function($http, $rootScope, $location, $cookieStore) { return { setToken: function(token) { // set the session cookie var today = new Date(); today.setTime(today.getTime() + ($AnsibleConfig.session_timeout * 1000)); $cookieStore.remove('token'); $cookieStore.remove('token_expire'); $cookieStore.put('token', token); $cookieStore.put('token_expire', today.getTime()); $rootScope.userLoggedIn = true; }, isTokenValid: function() { // check if token exists and is not expired var response = false; if ( $cookieStore.get('token') && $cookieStore.get('token_expire') ) { var token = $cookieStore.get('token'); var exp = new Date($cookieStore.get('token_expire')); var today = new Date(); if (today < exp) { this.setToken(token); //push expiration into the future while user is active response = true; } } return response; }, didSessionExpire: function() { // use only to test why user was sent to login page. var response = false; if ($cookieStore.get('token_expire')) { var exp = new Date($cookieStore.get('token_expire')); var today = new Date(); if (exp < today) { response = true; } } return response; }, getToken: function() { if ( this.isTokenValid() ) { return $cookieStore.get('token'); } else { return null; } }, retrieveToken: function(username, password) { return $http({ method: 'POST', url: '/api/v1/authtoken/', data: {"username": username, "password": password} }); }, logout: function() { $rootScope.current_user = {}; $cookieStore.remove('token'); $cookieStore.remove('token_expire'); $cookieStore.remove('current_user'); $rootScope.userLoggedIn = false; }, getUser: function() { return $http({ method: 'GET', url: '/api/v1/me/', headers: { 'Authorization': 'Token ' + this.getToken() }, }); }, setUserInfo: function(response) { // store the response values in $rootScope so we can get to them later $rootScope.current_user = response.results[0]; $cookieStore.put('current_user', response.results[0]); //keep in session cookie incase user hits refresh }, restoreUserInfo: function() { $rootScope.current_user = $cookieStore.get('current_user'); }, getUserInfo: function(key) { // Access values returned from the Me API call return ($rootScope.current_user[key]) ? $rootScope.current_user[key] : null; } } }]);