zupit.service('Zupit.Identity.AuthService', [ '$rootScope', 'Zupit.Core.HttpClient', '$q', '$state', 'config', 'Zupit.Core.NotificationService', 'Zupit.Core.AppService', function ($rootScope, $http, $q, $state, config, notify, app) { return { fetchUser: function() { $http.get('api/identity/me').then(function (ret) { app.user = ret; $rootScope.$broadcast('IDENTITY.CHANGE', ret); app.fetchMenu(); }); }, resolveUser:function() { var deferred = $q.defer(); if (app.user !== null && app.user !== undefined) { deferred.resolve(app.user); } else { $http.get('api/identity/me').then(function(ret) { app.user = ret; $rootScope.$broadcast('IDENTITY.CHANGE', ret); app.fetchMenu(); deferred.resolve(app.user); }); } return deferred.promise; }, login: function (username, password, rememberMe) { var deferred = $q.defer(); var that = this; if (config.authenticationType === 'TOKEN') { var data = "grant_type=password&username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password); //var data = 'grant_type=password&username=' + username + '&password=' + password; $http.post('Token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) { if (rememberMe && typeof (Storage) !== 'undefined') { if (typeof (Storage) !== 'undefined') localStorage.setItem('BearerToken', response['access_token']); else { notify.warning('Local Storage not supported. Remember me functionality cannot work.'); sessionStorage.setItem('BearerToken', response['access_token']); } } else { sessionStorage.setItem('BearerToken', response['access_token']); } app.user = null; that.resolveUser().then(function (user) { deferred.resolve(); }); }, function (response) { deferred.reject(response); }); } if (config.authenticationType === 'COOKIE') { notify.error('Cookie authentication not implemented'); deferred.reject('Cookie authentication not implemented'); } return deferred.promise; }, logout: function (message) { if (config.authenticationType === 'TOKEN') { if (typeof (Storage) !== 'undefined') localStorage.removeItem('BearerToken'); sessionStorage.removeItem('BearerToken'); } if (config.authenticationType === 'COOKIE') { notify.error('Cookie authentication not implemented'); } $http.get('api/identity/me').then(function (ret) { app.user = ret; app.currentForm = null; $rootScope.$broadcast('IDENTITY.CHANGE', ret); if (message) { $state.go('Login', { message: message }); } else { $state.go('Login'); } app.fetchMenu(); }); } } } ]);