(function() { "use strict"; angular .module('codeAPLEBOX.client.models.auth') .factory('Auth', Auth); /* @ngInject */ function Auth($cookies, User, $q, $location, appConfig, $log, $window) { var safeCb = function(cb) { return (angular.isFunction(cb)) ? cb : angular.noop; }; var currentUser = {}; var userRoles = appConfig.userRoles || []; var memo = {} var myMemo = {} // $log.debug('auth service init'); if($cookies.get('token')) { var checkEmployee = $cookies.get('checkeEmployee') if(checkEmployee == 'false'){ currentUser = User.getMe_Customer(); }else{ currentUser = User.getMe(); } // $log.debug('hasTokenInCookie: ' + true); }else{ currentUser = {}; } var checkLog = false; return { /*setMemo: function (arg) { memo = arg; return "ok"; }, getMemo: function () { return memo; }, setMyMemo: function (arg) { myMemo = arg; return "ok"; }, getMyMemo: function () { return myMemo; },*/ /* Start Employee */ certifiedPassword: function (user) { var deferred = $q.defer(); User.certifiedPassword({ accountNumber: user.accountNumber, password: user.password }).then(function(info) { var data = info.data; deferred.resolve(data); }).catch(function(err) { this.logout(); deferred.reject(err); }); return deferred.promise; }, login: function (user) { var deferred = $q.defer(); User.login({ accountNumber: user.accountNumber, password: user.password }).then(function(info) { var data = info.data; if (data.infoCode == 'ok'){ $cookies.put('token', data.token); $cookies.put('checkeEmployee', true); currentUser = User.getMe(); deferred.resolve(data); } else { checkLog = false; deferred.resolve(data); } }).catch(function(err) { this.logout(); deferred.reject(err); }); return deferred.promise; }, logout: function (request) { if(request != null){ var deferred = $q.defer(); User.removeLoginIp({ accountNumber: request.accountNumber }).then(function(info) { currentUser = {}; memo = {}; myMemo = {}; $cookies.remove('token'); $cookies.remove('csrftoken'); $cookies.remove('employeeInfo'); $cookies.remove('customerInfo'); deferred.resolve("logout OK!!!"); }).catch(function(err) { deferred.reject(err); }); return deferred.promise; }else{ currentUser = {}; memo = {}; myMemo = {}; $cookies.remove('token'); $cookies.remove('localIp'); $cookies.remove('csrftoken'); $cookies.remove('employeeInfo'); $cookies.remove('customerInfo'); var data= "로그아웃"; return data; } }, /* End Employee */ /* Start Customer */ login_customer: function (user) { var deferred = $q.defer(); User.login_customer({ accountID: user.accountID, password: user.password }).then(function(info) { var data = info.data; if (data.infoCode == 'ok'){ $cookies.put('token', data.token); $cookies.put('checkeEmployee', false); currentUser = User.getMe_Customer(); deferred.resolve(data); } else { checkLog = false; deferred.resolve(data); } }).catch(function(err) { this.logout_customer(); deferred.reject(err); }); return deferred.promise; }, logout_customer: function (request) { if(request != null){ var deferred = $q.defer(); User.removeLoginIp({ accountID: request.accountID }).then(function(info) { currentUser = {}; memo = {}; myMemo = {}; $cookies.remove('token'); $cookies.remove('csrftoken'); $cookies.remove('employeeInfo'); $cookies.remove('customerInfo'); deferred.resolve("logout OK!!!"); }).catch(function(err) { deferred.reject(err); }); return deferred.promise; }else{ currentUser = {}; memo = {}; myMemo = {}; $cookies.remove('token'); $cookies.remove('localIp'); $cookies.remove('csrftoken'); $cookies.remove('employeeInfo'); $cookies.remove('customerInfo'); var data= "로그아웃"; return data; } }, /* End Customer */ /** * Check if a user has a specified role or higher * (synchronous|asynchronous) * * @param {String} role - the role to check against * @param {Function|*} callback - optional, function(has) * @return {Bool|Promise} */ hasRole: function (role, callback) { var hasRole = function(r, h) { // return userRoles.indexOf(r) >= userRoles.indexOf(h); return (r == h) };/* if (arguments.length < 2) { return hasRole(currentUser.role, role); }*/ return this.getCurrentUser(null) .then(function (user) { var has = (user.hasOwnProperty('role')) ? hasRole(user.role, role) : false; safeCb(callback)(has); return has; }); }, /** * Check if a user is logged in * (synchronous|asynchronous) * * @param {Function|*} callback - optional, function(is) * @return {Bool|Promise} */ isLoggedIn: function (callback) { var deferred = $q.defer(); if (arguments.length === 0) { deferred.resolve(currentUser.hasOwnProperty('role')); return deferred.promise; } return this.getCurrentUser(null) .then(function(user){ var is = user.hasOwnProperty('role'); safeCb(callback)(is); return is; }) }, getCurrentUser: function (callback) { var deferred = $q.defer(); if (arguments.length === 0) { deferred.resolve(currentUser); return deferred.promise; } var value = (currentUser.hasOwnProperty('$promise')) ? currentUser.$promise : currentUser; return $q.when(value) .then(function(user){ if(user.hasOwnProperty('data')){ safeCb(callback)(user.data); return user.data; }else{ safeCb(callback)({}); return {}; } }, function(){ safeCb(callback)({}); return {}; }); }, isValidToken: function (user) { var deferred = $q.defer(); User.isValidToken() .then(function(info) { if(typeof info.data === 'undefined' || info.data == null){ var error = new Error('Error in isValidToken'); error.checkClient = true; error.errorCode = 'C.4'; deferred.reject(error); }else{ var data= info.data; deferred.resolve(data); } }).catch(function(err) { this.logout(); deferred.reject(err); }); return deferred.promise; }, } } })();