'use strict'; angular.module('users').factory('AuthenticationService', function($http, $timeout, $q) { var error; var service = { // Information about the current user currentUser: null, login: function(credentials) { var login = $http.post('/auth/signin', credentials); login.success(function(data) { service.currentUser = data.user; // $flash.clear(); }).error(function(error) { error = error.error ? error.error : error; console.error(error.message || error); }); return login; }, logout: function() { var logout = $http.get('/auth/logout'); logout.success(function() { service.currentUser = null; console.log("You've successfully logged out"); }); return logout; }, signup: function(credentials) { var signup = $http.post('/auth/signup', credentials) signup.success(function(response) { console.log("You've successfully created an account"); }).error(function(response) { error = error.error ? error.error : error; console.error(error.message || error); }); return signup; }, // Ask the backend to see if a user is already authenticated - // this may be from a previous session. identity: function() { if (service.isAuthenticated()) { return $q.when(service.currentUser); } else { return $http.get('/user/me').then(function(response) { service.currentUser = response.data.user; return service.currentUser; }); } }, // Is the current user authenticated? isAuthenticated: function() { return !!service.currentUser; }, isInRole: function(role) { return service.isAuthenticated() (service.currentUser.roles.indexOf(role) !== -1); }, isInAnyRole: function(roles) { if ( !service.isAuthenticated() || !service.currentUser.roles) return false; var roles = service.currentUser.roles; for (var i = 0; i < roles.length; i++) { if (this.isInRole(roles[i])) return true; } return false; }, }; return service; }); // .factory('Principal', ['$window', '$http', '$q', '$timeout', '$state', // function($window, $http, $q, $timeout, $state) { // var _identity, // _authenticated = false; // return { // isIdentityResolved: function() { // return angular.isDefined(_identity); // }, // isAuthenticated: function() { // return _authenticated; // }, // isInRole: function(role) { // if (!_authenticated || !_identity.roles) return false; // return _identity.roles.indexOf(role) !== -1; // }, // isInAnyRole: function(roles) { // if (!_authenticated || !_identity.roles) return false; // for (var i = 0; i < roles.length; i++) { // if (this.isInRole(roles[i])) return true; // } // return false; // }, // authenticate: function(user) { // _identity = user; // _authenticated = (user !== null); // // for this demo, we'll store the identity in localStorage. For you, it could be a cookie, sessionStorage, whatever // if (user) $window.user = user; // else $window.user = null; // }, // signin: function(credentials) { // var deferred = $q.defer(); // var self = this; // $http.post('/auth/signin', credentials).success(function(response) { // // If successful we assign the response to the global user model // self.authenticate(response); // deferred.resolve(response); // }).error(function(response) { // _authenticated = false; // deferred.reject({ error: response.message }); // }); // return deferred.promise; // }, // signup: function(credentials) { // var deferred = $q.defer(); // $http.post('/auth/signup', credentials).success(function(response) { // // If successful we assign the response to the global user model // deferred.resolve(response); // }).error(function(response) { // deferred.reject({ error: response.message }); // }); // return deferred.promise; // }, // signout: function() { // var deferred = $q.defer(); // $http.get('/auth/signout').success(function(response) { // // If successful we assign the response to the global user model // deferred.resolve({}); // }).error(function(response) { // deferred.reject({ error: response.message }); // }); // _authenticated = false; // _identity = undefined; // return deferred.promise; // }, // identity: function() { // var self = this; // var deferred = $q.defer(); // // check and see if we have retrieved the user data from the server. if we have, reuse it by immediately resolving // if (angular.isDefined(_identity)) { // deferred.resolve(_identity); // return deferred.promise; // }else if($window.user){ // // console.log($window.user); // // self.authenticate($window.user); // // var user = $window.user; // _identity = $window.user; // self.authenticate(_identity); // deferred.resolve(_identity); // return deferred.promise; // }else { // // otherwise, retrieve the user data from the server, update the user object, and then resolve. // $http.get('/users/me', { ignoreErrors: true }) // .success(function(response) { // self.authenticate(response); // $window.user = response; // deferred.resolve(_identity); // }) // .error(function() { // _identity = null; // _authenticated = false; // $window.user = null; // $state.path('signin'); // deferred.resolve(_identity); // }); // return deferred.promise; // } // }, // getUser: function(){ // this.identity(false).then( function(user){ // return user; // }); // } // }; // } // ]);