2015-06-30 19:42:02 +00:00
|
|
|
'use strict';
|
|
|
|
|
2016-04-29 04:57:04 +00:00
|
|
|
angular.module('users').factory('Auth', ['$window',
|
2015-08-25 21:33:52 +00:00
|
|
|
function($window) {
|
|
|
|
|
2015-08-18 21:44:36 +00:00
|
|
|
var userState = {
|
2015-06-30 19:42:02 +00:00
|
|
|
isLoggedIn: false
|
|
|
|
};
|
|
|
|
|
2015-07-02 02:49:35 +00:00
|
|
|
var service = {
|
2015-08-25 21:33:52 +00:00
|
|
|
_currentUser: null,
|
|
|
|
get currentUser(){
|
|
|
|
return this._currentUser;
|
|
|
|
},
|
2015-06-30 19:42:02 +00:00
|
|
|
|
|
|
|
// Note: we can't make the User a dependency of Auth
|
|
|
|
// because that would create a circular dependency
|
|
|
|
// Auth <- $http <- $resource <- LoopBackResource <- User <- Auth
|
|
|
|
ensureHasCurrentUser: function(User) {
|
2015-08-25 21:33:52 +00:00
|
|
|
if (service._currentUser && service._currentUser.username) {
|
|
|
|
return service._currentUser;
|
2017-10-02 10:18:47 +00:00
|
|
|
} else if ($window.user){
|
2015-08-25 21:33:52 +00:00
|
|
|
service._currentUser = $window.user;
|
|
|
|
return service._currentUser;
|
2017-11-02 17:41:36 +00:00
|
|
|
} else {
|
2015-07-01 23:14:39 +00:00
|
|
|
User.getCurrent().then(function(user) {
|
2015-06-30 19:42:02 +00:00
|
|
|
// success
|
2015-08-25 21:33:52 +00:00
|
|
|
service._currentUser = user;
|
2016-04-29 04:57:04 +00:00
|
|
|
userState.isLoggedIn = true;
|
2015-08-25 21:33:52 +00:00
|
|
|
$window.user = service._currentUser;
|
2016-04-29 04:57:04 +00:00
|
|
|
return service._currentUser;
|
2015-06-30 19:42:02 +00:00
|
|
|
},
|
|
|
|
function(response) {
|
|
|
|
userState.isLoggedIn = false;
|
2015-08-25 21:33:52 +00:00
|
|
|
service._currentUser = null;
|
2015-07-01 23:14:39 +00:00
|
|
|
$window.user = null;
|
2015-06-30 20:57:20 +00:00
|
|
|
return null;
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2015-07-01 23:14:39 +00:00
|
|
|
isAuthenticated: function() {
|
2015-08-25 21:33:52 +00:00
|
|
|
return !!service._currentUser;
|
2015-07-01 23:14:39 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
getUserState: function() {
|
2015-06-30 19:42:02 +00:00
|
|
|
return userState;
|
|
|
|
},
|
|
|
|
|
2015-07-07 02:52:55 +00:00
|
|
|
login: function(new_user) {
|
2015-07-01 23:14:39 +00:00
|
|
|
userState.isLoggedIn = true;
|
2015-08-25 21:33:52 +00:00
|
|
|
service._currentUser = new_user;
|
2015-06-30 19:42:02 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
logout: function() {
|
2015-07-01 23:14:39 +00:00
|
|
|
$window.user = null;
|
|
|
|
userState.isLoggedIn = false;
|
2015-08-25 21:33:52 +00:00
|
|
|
service._currentUser = null;
|
2016-04-29 06:00:41 +00:00
|
|
|
}
|
2015-06-30 19:42:02 +00:00
|
|
|
};
|
2015-07-02 02:49:35 +00:00
|
|
|
return service;
|
2016-04-29 04:57:04 +00:00
|
|
|
|
2015-08-25 21:33:52 +00:00
|
|
|
}
|
|
|
|
]);
|