UNPKG

slush-y

Version:

A slush generator for Best Practices with AngularJS Fullstack applications.

191 lines (169 loc) 4.98 kB
;(function(){ 'use strict'; angular .module('authentication') .factory('Auth', Auth); /* @inject */ function Auth(User, $storage, authRestangular, serverUrl, $location, $rootScope, $http, $q, logger) { var self = this; var AuthService = authRestangular.all('auth'); var currentUser = {}; var userApi = createUrl(serverUrl, 'users'); var authApi = createUrl(serverUrl, 'auth'); if($storage.get('user_token')){ currentUser = User.one('me').get().$object; } return { login: login, logout: logout, createUser: createUser, changePassword: changePassword, getCurrentUser: getCurrentUser, isLoggedIn: isLoggedIn, isLoggedInAsync: isLoggedInAsync, isAdmin: isAdmin, getToken: getToken, user: currentUser }; /** * Authenticate user and save token * * @param {Object} user - login info * @param {Function} callback - optional * @return {Promise} */ function login(user, cb) { var callback = cb || angular.noop; var deferred = $q.defer(); var LoginData = { email: user.email, password: user.password }; AuthService.all('local').post( LoginData ) .then(function ( response ) { logger.logSuccess('User Logged in'); $storage.setUser( response ); currentUser = User.one('me').get().$object; deferred.resolve(response); }) .catch(function ( err ) { logger.logError('Error Logging in'); logout(); deferred.reject( err ); }.bind(self)); return deferred.promise; } /** * Delete access token and user info * * @param {Function} */ function logout() { $storage.clear('user_token'); currentUser = {}; } /** * Create a new user * * @param {Object} user - user info * @param {Function} callback - optional * @return {Promise} */ function createUser(user, cb) { var callback = cb || angular.noop; var q = $q.defer(); // $http.post(serverUrl + 'users', user) User.post(user) .then(function ( response ) { logger.logSuccess('User '+ response.user.name +' Created'); $storage.setUser( response ); currentUser = User.one('me').get().$object; q.resolve( response ); }) .catch(function (err) { logger.logError('Error creating User' + user.name); logout(); q.reject(err); }); return q.promise; } /** * Change password * * @param {String} oldPassword * @param {String} newPassword * @param {Function} callback - optional * @return {Promise} */ function changePassword(oldPassword, newPassword, cb) { var q = $q.defer() var callback = cb || angular.noop; var passwordData = { oldPassword: oldPassword, newPassword: newPassword }; return $http.put( createUrl(userApi,currentUser._id,'password'), passwordData) .then( function (data){ logger.logSuccess('Password Changed'); q.resolve( data ); }) .catch( function ( error ){ logger.logSuccess('Error Changing Password'); q.reject( error ); }); return q.promise; } /** * Gets all available info on authenticated user * * @return {Object} user */ function getCurrentUser() { return currentUser; } /** * Check if a user is logged in * * @return {Boolean} */ function isLoggedIn() { return currentUser.hasOwnProperty('role'); } /** * Waits for currentUser to resolve before checking if user is logged in */ function isLoggedInAsync( callback ) { if(currentUser.hasOwnProperty('$promise')) { currentUser .then(function() { callback(true); }) .catch(function() { callback(false); }); } else if(currentUser.hasOwnProperty('role')) { callback(true); } else { callback(false); } } /** * Check if a user is an admin * * @return {Boolean} */ function isAdmin() { return currentUser.role === 'admin'; } /** * Get auth token */ function getToken() { return $storage.get('user_token'); } function createUrl(){ var args = Array.prototype.slice.call(arguments); return args.join('/'); } } }).call(this);