2015-06-30 19:42:02 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
angular.module('users').factory('User', ['$window', '$q', '$timeout', '$http', '$state',
|
|
|
|
function($window, $q, $timeout, $http, $state) {
|
|
|
|
|
|
|
|
var userService = {
|
|
|
|
getCurrent: function() {
|
2015-06-30 20:57:20 +00:00
|
|
|
var deferred = $q.defer();
|
2015-06-30 19:42:02 +00:00
|
|
|
|
|
|
|
$http.get('/users/me')
|
|
|
|
.success(function(response) {
|
|
|
|
deferred.resolve(response);
|
|
|
|
})
|
|
|
|
.error(function() {
|
2015-07-01 23:14:39 +00:00
|
|
|
deferred.reject('User\'s session has expired');
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
2015-06-30 20:57:20 +00:00
|
|
|
|
|
|
|
return deferred.promise;
|
2015-06-30 19:42:02 +00:00
|
|
|
},
|
|
|
|
login: function(credentials) {
|
|
|
|
|
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.post('/auth/signin', credentials).then(function(response) {
|
|
|
|
deferred.resolve(response.data);
|
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
2015-08-25 21:33:52 +00:00
|
|
|
|
|
|
|
return deferred.promise;
|
2015-06-30 19:42:02 +00:00
|
|
|
},
|
2016-04-29 06:00:41 +00:00
|
|
|
logout: function() {
|
2015-08-25 21:33:52 +00:00
|
|
|
|
2015-06-30 19:42:02 +00:00
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.get('/auth/signout').then(function(response) {
|
2015-06-30 19:42:02 +00:00
|
|
|
deferred.resolve(null);
|
2017-03-27 20:32:06 +00:00
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
|
|
|
},
|
2016-04-29 06:00:41 +00:00
|
|
|
signup: function(credentials) {
|
2015-06-30 19:42:02 +00:00
|
|
|
|
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.post('/auth/signup', credentials).then(function(response) {
|
2015-06-30 19:42:02 +00:00
|
|
|
// If successful we assign the response to the global user model
|
2017-03-27 20:32:06 +00:00
|
|
|
deferred.resolve(response.data);
|
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
|
|
|
},
|
|
|
|
|
2016-04-29 06:00:41 +00:00
|
|
|
resendVerifyEmail: function(_email) {
|
2015-08-25 21:33:52 +00:00
|
|
|
|
2015-07-27 18:11:43 +00:00
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.post('/auth/verify', {email: _email}).then(function(response) {
|
|
|
|
deferred.resolve(response.data);
|
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-07-27 18:11:43 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
|
|
|
},
|
|
|
|
|
2016-04-29 06:00:41 +00:00
|
|
|
validateVerifyToken: function(token) {
|
2015-08-25 21:33:52 +00:00
|
|
|
|
|
|
|
//DAVID: TODO: The valid length of a token should somehow be linked to server config values
|
|
|
|
//DAVID: TODO: SEMI-URGENT: Should we even be doing this?
|
|
|
|
var validTokenRe = /^([A-Za-z0-9]{48})$/g;
|
|
|
|
if( !validTokenRe.test(token) ) throw new Error('Error token: '+token+' is not a valid verification token');
|
|
|
|
|
2015-07-27 20:33:43 +00:00
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.get('/auth/verify/'+token).then(function(response) {
|
|
|
|
deferred.resolve(response.data);
|
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data);
|
2015-07-27 20:33:43 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
|
|
|
},
|
|
|
|
|
2015-08-25 21:33:52 +00:00
|
|
|
resetPassword: function(passwordDetails, token) {
|
|
|
|
|
2015-06-30 19:42:02 +00:00
|
|
|
var deferred = $q.defer();
|
2017-03-30 22:14:19 +00:00
|
|
|
$http.post('/auth/reset/'+token, passwordDetails).then(function(response) {
|
|
|
|
deferred.resolve(response);
|
2017-03-27 20:32:06 +00:00
|
|
|
}, function(error) {
|
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Submit forgotten password account id
|
|
|
|
askForPasswordReset: function(credentials) {
|
2015-08-25 21:33:52 +00:00
|
|
|
|
2015-06-30 19:42:02 +00:00
|
|
|
var deferred = $q.defer();
|
2017-03-27 20:32:06 +00:00
|
|
|
$http.post('/auth/forgot', credentials).then(function(response) {
|
2015-06-30 19:42:02 +00:00
|
|
|
// Show user success message and clear form
|
2017-03-27 20:32:06 +00:00
|
|
|
deferred.resolve(response.data);
|
|
|
|
}, function(error) {
|
2015-06-30 19:42:02 +00:00
|
|
|
// Show user error message
|
2017-03-27 20:32:06 +00:00
|
|
|
deferred.reject(error.data.message || error.data);
|
2015-06-30 19:42:02 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return deferred.promise;
|
2016-04-29 06:00:41 +00:00
|
|
|
}
|
2015-06-30 19:42:02 +00:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
return userService;
|
2016-04-29 06:00:41 +00:00
|
|
|
|
2015-06-30 19:42:02 +00:00
|
|
|
}
|
|
|
|
]);
|