tellform/public/modules/users/services/principal.client.service.js
2015-06-30 00:28:29 -07:00

132 lines
4 KiB
JavaScript
Executable file

'use strict';
angular.module('users').factory('Principal', ['$window', '$http', '$q', '$timeout', '$state',
function($window, $http, $q, $timeout, $state) {
var service = {
_currentUser: null,
isIdentityResolved: function() {
if(service._currentUser === null) return false
return true;
},
isAuthenticated: function() {
return !!service._currentUser;
},
isInRole: function(role) {
if (!service.isAuthenticated() || !service._currentUser.roles) return false;
return service._currentUser.roles.indexOf(role) !== -1;
},
isInAnyRole: function(roles) {
if (!service.isAuthenticated() || !service._currentUser.roles) return false;
for (var i = 0; i < roles.length; i++) {
if (this.isInRole(roles[i])) return true;
}
return false;
},
authenticate: function(user) {
service._currentUser = user;
// store the user in $window
if (user) $window.user = user;
else $window.user = null;
},
signin: function(credentials) {
var deferred = $q.defer();
$http.post('/auth/signin', credentials).success(function(response) {
console.log(response);
// If successful we assign the response to the global user model
service.authenticate(response);
deferred.resolve(response);
}).error(function(error) {
deferred.reject(error.message || error);
});
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(error) {
deferred.reject(error.message || error);
});
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(null);
service.authenticate(null);
}).error(function(error) {
deferred.reject(error.message || error);
});
return deferred.promise;
},
identity: function() {
if (service.isAuthenticated()) {
return service._currentUser;
} else if($window.user){
service.authenticate($window.user);
return service._currentUser;
}else {
return $http.get('/user/me')
.success(function(response) {
service.authenticate(response.data.user);
return response.data.user;
})
.error(function() {
service.authenticate(null);
// $state.go('signin');
return null;
});
}
// var deferred = $q.defer();
// console.log($window.user);
// console.log(service.isAuthenticated());
// // check and see if we have retrieved the user data from the server. if we have, reuse it by immediately resolving
// if (service.isAuthenticated() === true ) {
// deferred.resolve(service.currentUser);
// }else if($window.user){
// service.authenticate($window.user);
// deferred.resolve(service._currentUser);
// }else {
// // otherwise, retrieve the user data from the server, update the user object, and then resolve.
// $http.get('/users/me')
// .success(function(response) {
// service.authenticate(response);
// deferred.resolve(response);
// })
// .error(function() {
// service.authenticate(null);
// deferred.reject("User's session has expired");
// });
// }
// return deferred.promise;
}
};
return service;
}
]);