3 angular.module('dashboardApp')
4 .factory('Auth', function Auth($http, User, $cookies, $q) {
6 * Return a callback or noop function
8 * @param {Function|*} cb - a 'potential' function
11 var safeCb = function(cb) {
12 return (angular.isFunction(cb)) ? cb : angular.noop;
17 if ($cookies.get('token')) {
18 currentUser = User.get();
24 * Authenticate user and save token
26 * @param {Object} user - login info
27 * @param {Function} callback - optional, function(error, user)
30 login: function(user, callback) {
31 return $http.post('/auth/local', {
33 password: user.password
36 $cookies.put('token', res.data.token);
37 currentUser = User.get();
38 return currentUser.$promise;
40 .then(function(user) {
41 safeCb(callback)(null, user);
44 .catch(function(err) {
46 safeCb(callback)(err.data);
47 return $q.reject(err.data);
52 * Delete access token and user info
55 $cookies.remove('token');
62 * @param {Object} user - user info
63 * @param {Function} callback - optional, function(error, user)
66 createUser: function(user, callback) {
67 return User.save(user,
69 $cookies.put('token', data.token);
70 currentUser = User.get();
71 return safeCb(callback)(null, user);
75 return safeCb(callback)(err);
76 }.bind(this)).$promise;
82 * @param {String} oldPassword
83 * @param {String} newPassword
84 * @param {Function} callback - optional, function(error, user)
87 changePassword: function(oldPassword, newPassword, callback) {
88 return User.changePassword({ id: currentUser._id }, {
89 oldPassword: oldPassword,
90 newPassword: newPassword
92 return safeCb(callback)(null);
94 return safeCb(callback)(err);
99 * Gets all available info on a user
100 * (synchronous|asynchronous)
102 * @param {Function|*} callback - optional, funciton(user)
103 * @return {Object|Promise}
105 getCurrentUser: function(callback) {
106 if (arguments.length === 0) {
110 var value = (currentUser.hasOwnProperty('$promise')) ? currentUser.$promise : currentUser;
111 return $q.when(value)
112 .then(function(user) {
113 safeCb(callback)(user);
116 safeCb(callback)({});
122 * Check if a user is logged in
123 * (synchronous|asynchronous)
125 * @param {Function|*} callback - optional, function(is)
126 * @return {Bool|Promise}
128 isLoggedIn: function(callback) {
129 if (arguments.length === 0) {
130 return currentUser.hasOwnProperty('role');
133 return this.getCurrentUser(null)
134 .then(function(user) {
135 var is = user.hasOwnProperty('role');
136 safeCb(callback)(is);
142 * Check if a user is an admin
143 * (synchronous|asynchronous)
145 * @param {Function|*} callback - optional, function(is)
146 * @return {Bool|Promise}
148 isAdmin: function(callback) {
149 if (arguments.length === 0) {
150 return currentUser.role === 'admin';
153 return this.getCurrentUser(null)
154 .then(function(user) {
155 var is = user.role === 'admin';
156 safeCb(callback)(is);
164 * @return {String} - a token string used for authenticating
166 getToken: function() {
167 return $cookies.get('token');