Advertisement
Guest User

Untitled

a guest
Feb 7th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.50 KB | None | 0 0
  1. /*jshint sub:true*/
  2.  
  3. (function (angular) {
  4.  
  5. 'use strict';
  6. angular.module('dome.core')
  7.  
  8. .service('wsInterceptor', function($q, $rootScope, $injector, WSConstant) {
  9.  
  10.  
  11. return {
  12. request: function(config) {
  13.  
  14. var User = $injector.get('User');
  15. if (User.isConnected()) {
  16. config.headers['Authorization'] = 'Bearer ' + User.getToken();
  17.  
  18. if (!$rootScope.needToRefresh)
  19. User.isAlmostExpired();
  20. }else {
  21. // expired
  22. localStorage.removeItem('token');
  23. // localStorage.removeItem('userSelected');
  24. }
  25. return config;
  26.  
  27.  
  28. },
  29. responseError: function(rejection) {
  30.  
  31. if (
  32. (rejection.status === 401 || rejection.status === 401) &&
  33. rejection.config.url.indexOf(WSConstant.webViewAuthentication) === -1
  34. ) {
  35. var User = $injector.get('User');
  36. User.removeUser();
  37. User.logout();
  38. }
  39. return $q.reject(rejection);
  40. }
  41. };
  42. })
  43.  
  44. .config(function ($httpProvider) {
  45. $httpProvider.interceptors.push('wsInterceptor');
  46. $httpProvider.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';
  47. })
  48.  
  49. .factory('User',function ($interval, $http, md5, $q, WSConstant, appSettings, $state, $window, $rootScope, requestWS, RightsService) {
  50.  
  51. function checkConnection() {
  52. var networkState = navigator.connection.type;
  53.  
  54. if(networkState=="none"){
  55.  
  56. window.plugins.toast.showWithOptions(
  57. {
  58. message: "Aucune connexion internet disponible !",
  59. duration: "long",
  60. position: "center",
  61. }
  62.  
  63. );
  64.  
  65. }
  66.  
  67.  
  68. }
  69.  
  70.  
  71. var userData, token, sessionRefresh;
  72.  
  73. var userFactory = {
  74.  
  75.  
  76. getExpirationDate: function () {
  77. if (userFactory.getToken() && typeof userFactory.getToken() === 'string') {
  78.  
  79. token = userFactory.getToken();
  80.  
  81. if (token.split('.').length === 3) {
  82. try {
  83. var base64Url = token.split('.')[1];
  84. var base64 = base64Url.replace('-', '+').replace('_', '/');
  85. var exp = JSON.parse($window.atob(base64)).exp;
  86. if (typeof exp === 'number') {
  87. return exp;
  88. }
  89. }
  90. catch (e) {
  91. return true; // Pass: Non-JWT token that looks like JWT
  92. }
  93. }
  94. return false; // Pass: All other token
  95. }
  96.  
  97. return false;
  98. },
  99.  
  100. refreshToken: function () {
  101. var refreshToken = userFactory.getUserToken().refresh_token;
  102. var url = appSettings.baseUrl + '/oauth/token';
  103.  
  104. var string = JSON.stringify({refreshToken: refreshToken});
  105. var xhr = new XMLHttpRequest();
  106.  
  107. xhr.open('POST',url,true);
  108. xhr.setRequestHeader('Content-type','application/json; charset=utf-8');
  109.  
  110. xhr.onreadystatechange = function () {
  111. if (xhr.readyState === 4 && xhr.status === 200) {
  112. localStorage.setItem('token', xhr.responseText);
  113. }
  114. };
  115. xhr.send(string);
  116. },
  117.  
  118. isConnected: function () {
  119.  
  120. if (typeof userFactory.getExpirationDate() === 'number')
  121. return moment().unix() < userFactory.getExpirationDate();
  122.  
  123. return false;
  124. },
  125.  
  126. isAlmostExpired: function () {
  127.  
  128. var date = userFactory.getExpirationDate();
  129.  
  130. // check if it's a date then check if session is under 30 minutes => refresh token
  131. if (typeof date === 'number' && moment().add('30', 'minutes').unix().valueOf() > date ) {
  132.  
  133. $rootScope.needToRefresh = true;
  134. userFactory.refreshToken();
  135. }
  136. },
  137.  
  138.  
  139. getToken: function () {
  140. return (userFactory.getUserToken()) ? userFactory.getUserToken().token : false;
  141. },
  142.  
  143. getUserToken: function () {
  144.  
  145. if (typeof localStorage.getItem('token') === 'string') {
  146. userData = JSON.parse(localStorage.getItem('token'));
  147. return userData;
  148. }
  149.  
  150. return false;
  151. },
  152.  
  153. /**
  154. *
  155. * @param {object} user
  156. * @param {object} user.username
  157. * @param {object} user.password
  158. */
  159.  
  160.  
  161.  
  162. login: function (user) {
  163. // checkConnection();
  164. var data = angular.copy(user);
  165. var url = appSettings.baseUrl + '/oauth/token';
  166.  
  167. data.password = md5.createHash(data.password || '');
  168.  
  169. data.rememberMe = true;
  170.  
  171. var defer = $q.defer();
  172. $http({
  173. url: url,
  174. method: 'POST',
  175. headers: [{'Content-Type': 'application/json'}],
  176. data: data
  177. }).then(function (data) {
  178.  
  179. if (data.data.statusId === 0) {
  180. $http.defaults.headers.common['Authorization'] = 'Bearer ' + data.data.token;
  181. localStorage.setItem('token', JSON.stringify(data.data));
  182.  
  183. var email= null
  184. if(!angular.isUndefined(data.data.email))
  185. {email = data.data.email;}
  186. localStorage.setItem('email', email) ;
  187.  
  188. angular.element('#error_pop_up').closeModalCustom();
  189. $rootScope.errorText = '';
  190.  
  191. if (angular.isDefined(sessionRefresh)) {
  192. $interval.cancel(sessionRefresh);
  193. sessionRefresh = undefined;
  194. }
  195.  
  196. userFactory.beginRefreshToken();
  197. defer.resolve(data.data);
  198.  
  199. }else {
  200. defer.reject(data.data);
  201. }
  202.  
  203.  
  204. console.log('user.session .login .then: ',data);
  205.  
  206.  
  207. }).catch(function (data) {
  208. console.log('user.session .login .fail: ',data);
  209. defer.reject(data.data);
  210. setTimeout(function(){
  211.  
  212. function onConfirm(buttonIndex) {
  213. (buttonIndex==1) ? location.reload() :navigator.app.exitApp();
  214.  
  215. console.log(buttonIndex);
  216.  
  217. }
  218. var networkState = navigator.connection.type;
  219. if(networkState=="none") {
  220. console.log($state);
  221. navigator.notification.confirm(
  222. 'Le chargement a échoué. Veuillez vérifier votre connexion.', // message
  223. onConfirm, // callback to invoke with index of button pressed
  224. 'Erreur', // title
  225. ['Réessayer','Fermer'] // buttonLabels
  226. );
  227. }
  228.  
  229. }, 3000);
  230.  
  231.  
  232.  
  233.  
  234.  
  235. });
  236.  
  237. return defer.promise;
  238. },
  239.  
  240. loginWebView: function (token, benefId) {
  241.  
  242. var defer = $q.defer();
  243.  
  244. $http({
  245. url: appSettings.serviceUrl + WSConstant.webViewAuthentication,
  246. method: 'POST',
  247. data: {
  248. // Token: token,
  249. benefProfileId: benefId
  250. },
  251. headers: {
  252. 'Authorization': 'Bearer ' + token
  253. }
  254.  
  255. })
  256.  
  257. .then(function (data) {
  258. if (data.data.statusId === 0) {
  259. $http.defaults.headers.common['Authorization'] = 'Bearer ' + data.data.token;
  260. localStorage.setItem('token', JSON.stringify(data.data));
  261. defer.resolve(data.data);
  262. }else {
  263. defer.reject(data.data);
  264. }
  265. }, defer.reject)
  266.  
  267. .catch(function (data) {
  268. defer.reject(data.data);
  269. });
  270.  
  271. return defer.promise;
  272. },
  273.  
  274. getAccountId: function () {
  275. return (userFactory.getUserToken() && userFactory.getUserToken().accountId) ? userFactory.getUserToken().accountId : '';
  276. },
  277.  
  278. setBenefCount: function (users) {
  279. return localStorage.setItem('userCount', (angular.isArray(users)) ? users.length : 0);
  280. },
  281.  
  282. getBenefCount: function () {
  283. return parseInt(localStorage.getItem('userCount'));
  284. },
  285.  
  286.  
  287. getUserList: function (accountId) {
  288.  
  289. var defer = $q.defer();
  290. $http({
  291. url: appSettings.serviceUrl + WSConstant.getProfileList,
  292. method: 'POST',
  293. data: {accountId: accountId}
  294. }).then(function (data) {
  295.  
  296. if (data.data.firstConnexion)
  297. $window.localStorage.setItem('firstConnexion', true);
  298.  
  299. // $rootScope.$broadcast('User:FirstConnexion');
  300. defer.resolve(data.data);
  301.  
  302. }).catch(function (data) {
  303. switch (data.status) {
  304. case 403: defer.reject(data.data);
  305. }
  306. });
  307.  
  308. return defer.promise;
  309. },
  310.  
  311. logout: function () {
  312. localStorage.removeItem('listProcheToPremuim');
  313. localStorage.removeItem('credentials');
  314. localStorage.removeItem('token');
  315. localStorage.removeItem('viewCalender');
  316. localStorage.removeItem('userSelected');
  317. $http.defaults.headers.common['Authorization'] = null;
  318. localStorage.clear();
  319. $state.go('home', {}, {reload: true});
  320. },
  321.  
  322. selectUser: function (user, isPartner) {
  323.  
  324. var defer = $q.defer();
  325. localStorage.setItem('userSelected', JSON.stringify(user));
  326. var profile = {profileId: user.profileId};
  327.  
  328. var urls = [
  329. $http({
  330. url: appSettings.serviceUrl + WSConstant.getProfileDetail,
  331. method: 'POST',
  332. data: profile
  333. })
  334. ];
  335.  
  336. if ( !isPartner) {
  337. urls.push($http({
  338. url: (isPartner ? appSettings.partnerUrl :appSettings.serviceUrl) + WSConstant.selectProfileWS,
  339. method: 'POST',
  340. data: profile
  341. }))
  342. }
  343. $q.all( urls ).then(function (response) {
  344. var authenticatedProfileRoleId = response[1].data.authenticatedProfileRoleId
  345. //On set les droits de l'utilisateur
  346. RightsService.initRights(authenticatedProfileRoleId);
  347.  
  348. localStorage.setItem('userDetails', JSON.stringify(response[0]));
  349. defer.resolve(response);
  350. }, defer.reject);
  351.  
  352. return defer.promise;
  353. },
  354.  
  355. getProfileDetails: function () {
  356. return requestWS.callWS( WSConstant.getProfileDetail, {profileId: userFactory.getUserId() });
  357. },
  358.  
  359. getAvatar: function () {
  360. return (userFactory.getuserDetails() && userFactory.getuserDetails().DOME_profileDetail && userFactory.getuserDetails().DOME_profileDetail.avatarFileId) ? userFactory.getuserDetails().DOME_profileDetail.avatarFileId : false;
  361. },
  362.  
  363. getuserDetails: function () {
  364. return (typeof localStorage.getItem('userDetails') === 'string') ? JSON.parse(localStorage.getItem('userDetails')): false;
  365. },
  366.  
  367. getUserInfo: function () {
  368. return (typeof localStorage.getItem('userSelected') === 'string') ? JSON.parse(localStorage.getItem('userSelected')): false;
  369. },
  370.  
  371. getUserId: function () {
  372. return userFactory.getUserInfo() ? userFactory.getUserInfo().profileId : false;
  373. },
  374.  
  375. removeUser: function () {
  376. localStorage.removeItem('userSelected');
  377. },
  378.  
  379. changePassword: function (oldPassword, newPassword) {
  380. var service = WSConstant.modifyPassword,
  381. data = {
  382. accountId: userFactory.getAccountId(),
  383. passwordOLD: md5.createHash(oldPassword),
  384. passwordNEW: md5.createHash(newPassword)
  385. };
  386. return requestWS.callWS(service, data);
  387. },
  388. newPassword: function (email) {
  389. var service = WSConstant.forgetPassword;
  390. var data = {
  391. login: email
  392. // email: email
  393. }
  394. return requestWS.callWS(service, data);
  395. },
  396.  
  397. beginRefreshToken: function () {
  398. // refresh every 15min (900000)
  399. sessionRefresh = $interval(userFactory.refreshToken, 900000);
  400. }
  401. };
  402.  
  403. return userFactory;
  404. });
  405.  
  406. })(angular);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement