@osimatic/helpers-js 1.0.62 → 1.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/index.js +2 -2
  2. package/jwt.js +71 -1
  3. package/network.js +23 -8
  4. package/package.json +1 -1
package/index.js CHANGED
@@ -32,7 +32,7 @@ const { ShoppingCart } = require('./shopping_cart');
32
32
  const { FlashMessage } = require('./flash_message');
33
33
  const { CountDown } = require('./count_down');
34
34
  const { ImportFromCsv } = require('./import_from_csv');
35
- const { JwtToken, JwtSession } = require('./jwt');
35
+ const { JwtToken, JwtSession, ApiTokenSession } = require('./jwt');
36
36
  const { ListBox } = require('./list_box');
37
37
  const { WebRTC } = require('./web_rtc');
38
38
  const { EventBus } = require('./event_bus');
@@ -47,7 +47,7 @@ const { WebSocket } = require('./web_socket');
47
47
  module.exports = {
48
48
  Array, Object, Number, String,
49
49
  HTTPRequest, Cookie, UrlAndQueryString, IBAN, BankCard, AudioMedia, UserMedia, PersonName, Email, TelephoneNumber, DateTime, TimestampUnix, SqlDate, SqlTime, SqlDateTime, Duration, File, CSV, Img, FormHelper, Country, PostalAddress, GeographicCoordinates, SocialNetwork,
50
- Browser, DataTable, Pagination, Navigation, DetailsSubArray, SelectAll, MultipleActionInTable, FormDate, InputPeriod, ShoppingCart, FlashMessage, CountDown, ImportFromCsv, JwtToken, JwtSession, ListBox, WebRTC, WebSocket, EventBus,
50
+ Browser, DataTable, Pagination, Navigation, DetailsSubArray, SelectAll, MultipleActionInTable, FormDate, InputPeriod, ShoppingCart, FlashMessage, CountDown, ImportFromCsv, JwtToken, JwtSession, ApiTokenSession, ListBox, WebRTC, WebSocket, EventBus,
51
51
  sleep, refresh, chr, ord, trim, empty,
52
52
  GoogleCharts, GoogleRecaptcha, GoogleMap, OpenStreetMap
53
53
  };
package/jwt.js CHANGED
@@ -93,4 +93,74 @@ class JwtSession {
93
93
  }
94
94
  }
95
95
 
96
- module.exports = { JwtToken, JwtSession };
96
+ class ApiTokenSession {
97
+ static denyAccessUnlessGranted(roles) {
98
+ let hasRole = false;
99
+
100
+ roles.forEach(role => {
101
+ if (ApiTokenSession.isGranted(role)) {
102
+ hasRole = true;
103
+ }
104
+ });
105
+
106
+ return hasRole;
107
+ }
108
+
109
+ static getToken() {
110
+ return localStorage.getItem('api_token');
111
+ }
112
+ static setToken(token) {
113
+ localStorage.setItem('api_token', token);
114
+ }
115
+
116
+ static getTokenData() {
117
+ let tokenData = localStorage.getItem('token_data');
118
+ if (null == tokenData) {
119
+ return null;
120
+ }
121
+ return JSON.parse(tokenData);
122
+ }
123
+ static setTokenData(data) {
124
+ localStorage.setItem('token_data', JSON.stringify(data));
125
+ }
126
+
127
+ static logout() {
128
+ localStorage.removeItem('api_token');
129
+ localStorage.removeItem('token_data');
130
+ }
131
+
132
+ static getData(key) {
133
+ let tokenData = ApiTokenSession.getTokenData();
134
+ if (tokenData == null) {
135
+ return null;
136
+ }
137
+
138
+ if (typeof tokenData[key] != 'undefined') {
139
+ return tokenData[key];
140
+ }
141
+ return null;
142
+ }
143
+
144
+ static isAnonymous() {
145
+ return ApiTokenSession.getToken() == null;
146
+ }
147
+
148
+ static isGranted(role) {
149
+ if (ApiTokenSession.getToken() == null) {
150
+ return false;
151
+ }
152
+
153
+ let roles = [];
154
+ if (null !== ApiTokenSession.getData('role')) {
155
+ roles = ApiTokenSession.getData('role');
156
+ }
157
+ if (null !== ApiTokenSession.getData('roles')) {
158
+ roles = ApiTokenSession.getData('roles');
159
+ }
160
+ roles = Array.isArray(roles) ? roles : [roles];
161
+
162
+ return roles.indexOf(role) !== -1;
163
+ }
164
+ }
165
+
166
+ module.exports = { JwtToken, JwtSession, ApiTokenSession };
package/network.js CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  class HTTPRequest {
3
2
  static init() {
4
3
  require('whatwg-fetch'); //fetch polyfill loaded in window.fetch
@@ -123,6 +122,21 @@ class HTTPRequest {
123
122
  console.error('Request failure. Status: '+status+' ; HTTP Code: '+jqxhr.responseJSON.code+(null!=errorThrown && ''!==errorThrown ? ' ; Error message: '+errorThrown : ''), jqxhr.responseJSON);
124
123
  }
125
124
 
125
+ static isExpiredToken(response, json) {
126
+ if (response.status !== 401) {
127
+ return false;
128
+ }
129
+
130
+ return (
131
+ response.statusText === 'Expired JWT Token'
132
+ || (typeof json['message'] != 'undefined' && json['message'] === 'Expired JWT Token')
133
+ || (typeof json['error'] != 'undefined' && json['error'] === 'expired_token')
134
+ || (typeof json['error'] != 'undefined' && json['error'] === 'authentification_failure')
135
+ || (json === 'expired_token')
136
+ || (json === 'authentification_failure')
137
+ );
138
+ }
139
+
126
140
  static async get(url, data, successCallback, errorCallback) {
127
141
  url += (!url.includes('?') ? '?' : '') + this.formatQueryString(data);
128
142
  data = null;
@@ -138,10 +152,8 @@ class HTTPRequest {
138
152
  let jsonData = {};
139
153
  try {
140
154
  jsonData = await response.json();
141
- //console.log(url, jsonData);
142
- //console.log(response.status, response.statusText, jsonData['error']);
143
155
 
144
- if (response.status === 401 && (response.statusText === 'Expired JWT Token' || typeof jsonData['error'] != 'undefined' && jsonData['error'] === 'expired_token')) {
156
+ if (HTTPRequest.isExpiredToken(response, jsonData)) {
145
157
  HTTPRequest.refreshToken(() => HTTPRequest.get(url, data, successCallback, errorCallback));
146
158
  return;
147
159
  }
@@ -179,7 +191,7 @@ class HTTPRequest {
179
191
  }
180
192
  },
181
193
  error: (jqxhr, status, errorThrown) => {
182
- if (jqxhr.status === 401 && (jqxhr.statusText === 'Expired JWT Token' || (typeof jqxhr.responseJSON['message'] != 'undefined' && jqxhr.responseJSON['message'] === 'Expired JWT Token') || (typeof jqxhr.responseJSON['error'] != 'undefined' && jqxhr.responseJSON['error'] === 'expired_token' ))) {
194
+ if (HTTPRequest.isExpiredToken(jqxhr, jqxhr.responseJSON)) {
183
195
  HTTPRequest.refreshToken(() => HTTPRequest.get(url, data, successCallback, errorCallback));
184
196
  return;
185
197
  }
@@ -266,7 +278,7 @@ class HTTPRequest {
266
278
  $.ajax(Object.assign({...ajaxOptions}, {
267
279
  success: (data, status, jqxhr) => File.download(data, jqxhr.getResponseHeader('Content-Type'), jqxhr.getResponseHeader('Content-Disposition')),
268
280
  error: (jqxhr, status, errorThrown) => {
269
- if (jqxhr.status === 401 && (jqxhr.statusText === 'Expired JWT Token' || (typeof jqxhr.responseJSON['message'] != 'undefined' && jqxhr.responseJSON['message'] === 'Expired JWT Token') || (typeof jqxhr.responseJSON['error'] != 'undefined' && jqxhr.responseJSON['error'] === 'expired_token' ))) {
281
+ if (HTTPRequest.isExpiredToken(jqxhr, jqxhr.responseJSON)) {
270
282
  HTTPRequest.refreshToken(() => HTTPRequest.download(url, data, errorCallback, completeCallback, method));
271
283
  return;
272
284
  }
@@ -303,7 +315,7 @@ class HTTPRequest {
303
315
  }
304
316
  //console.log(url, jsonData);
305
317
 
306
- if (response.status === 401 && url !== HTTPRequest.refreshTokenUrl && (response.statusText === 'Expired JWT Token' || (typeof jsonData['error'] != 'undefined' && jsonData['error'] === 'expired_token'))) {
318
+ if (url !== HTTPRequest.refreshTokenUrl && HTTPRequest.isExpiredToken(response, jsonData)) {
307
319
  HTTPRequest.refreshToken(() => HTTPRequest.post(url, formData, successCallback, errorCallback, formErrorCallback));
308
320
  return;
309
321
  }
@@ -351,7 +363,7 @@ class HTTPRequest {
351
363
  }
352
364
  },
353
365
  error: (jqxhr, status, errorThrown) => {
354
- if (url !== HTTPRequest.refreshTokenUrl && jqxhr.status === 401 && (jqxhr.statusText === 'Expired JWT Token' || (typeof jqxhr.responseJSON['message'] != 'undefined' && jqxhr.responseJSON['message'] === 'Expired JWT Token') || (typeof jqxhr.responseJSON['error'] != 'undefined' && jqxhr.responseJSON['error'] === 'expired_token' ))) {
366
+ if (url !== HTTPRequest.refreshTokenUrl && HTTPRequest.isExpiredToken(jqxhr, jqxhr.responseJSON)) {
355
367
  HTTPRequest.refreshToken(() => HTTPRequest.post(url, formData, successCallback, errorCallback, formErrorCallback));
356
368
  return;
357
369
  }
@@ -386,6 +398,9 @@ class HTTPRequest {
386
398
  (data) => {
387
399
  JwtSession.setToken(data.token);
388
400
  JwtSession.setRefreshToken(data.refresh_token);
401
+
402
+ HTTPRequest.setAuthorizationHeader(JwtSession.getToken());
403
+
389
404
  onCompleteCallback();
390
405
  },
391
406
  () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osimatic/helpers-js",
3
- "version": "1.0.62",
3
+ "version": "1.0.65",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"