@nakedcreativity/membrs-angular-helper 0.0.21 → 0.0.22
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.
- package/esm2020/lib/auth.interceptor.mjs +25 -0
- package/esm2020/lib/config.interface.mjs +2 -0
- package/esm2020/lib/config.service.mjs +7 -0
- package/esm2020/lib/membrs.module.mjs +146 -0
- package/esm2020/lib/membrs.service.mjs +101 -0
- package/esm2020/lib/router.config.mjs +19 -0
- package/esm2020/lib/token.mjs +5 -0
- package/esm2020/nakedcreativity-membrs-angular-helper.mjs +5 -0
- package/esm2020/public-api.mjs +5 -0
- package/fesm2015/nakedcreativity-membrs-angular-helper.mjs +297 -0
- package/fesm2015/nakedcreativity-membrs-angular-helper.mjs.map +1 -0
- package/{fesm2015/nakedcreativity-membrs-angular-helper.js → fesm2020/nakedcreativity-membrs-angular-helper.mjs} +78 -42
- package/fesm2020/nakedcreativity-membrs-angular-helper.mjs.map +1 -0
- package/lib/auth.interceptor.d.ts +3 -0
- package/lib/membrs.module.d.ts +7 -0
- package/lib/membrs.service.d.ts +3 -0
- package/nakedcreativity-membrs-angular-helper.d.ts +1 -2
- package/package.json +20 -8
- package/bundles/nakedcreativity-membrs-angular-helper.umd.js +0 -296
- package/bundles/nakedcreativity-membrs-angular-helper.umd.js.map +0 -1
- package/bundles/nakedcreativity-membrs-angular-helper.umd.min.js +0 -2
- package/bundles/nakedcreativity-membrs-angular-helper.umd.min.js.map +0 -1
- package/esm2015/lib/auth.interceptor.js +0 -22
- package/esm2015/lib/config.interface.js +0 -1
- package/esm2015/lib/config.service.js +0 -7
- package/esm2015/lib/membrs.module.js +0 -114
- package/esm2015/lib/membrs.service.js +0 -102
- package/esm2015/lib/router.config.js +0 -19
- package/esm2015/lib/token.js +0 -5
- package/esm2015/nakedcreativity-membrs-angular-helper.js +0 -6
- package/esm2015/public-api.js +0 -5
- package/fesm2015/nakedcreativity-membrs-angular-helper.js.map +0 -1
- package/nakedcreativity-membrs-angular-helper.metadata.json +0 -1
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@auth0/angular-jwt'), require('@angular/common/http'), require('rxjs'), require('@angular/common'), require('@uirouter/angular'), require('rxjs/operators')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define('@nakedcreativity/membrs-angular-helper', ['exports', '@angular/core', '@auth0/angular-jwt', '@angular/common/http', 'rxjs', '@angular/common', '@uirouter/angular', 'rxjs/operators'], factory) :
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.nakedcreativity = global.nakedcreativity || {}, global.nakedcreativity['membrs-angular-helper'] = {}), global.ng.core, global.angularJwt, global.ng.common.http, global.rxjs, global.ng.common, global.angular, global.rxjs.operators));
|
|
5
|
-
}(this, (function (exports, i0, angularJwt, i1, rxjs, common, angular, operators) { 'use strict';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* This is not a real service, but it looks like it from the outside.
|
|
9
|
-
* It's just an InjectionTToken used to import the config object, provided from the outside
|
|
10
|
-
*/
|
|
11
|
-
var MembrsConfigService = new i0.InjectionToken("MembrsConfig");
|
|
12
|
-
|
|
13
|
-
var jwtService = new angularJwt.JwtHelperService();
|
|
14
|
-
var MembrsService = /** @class */ (function () {
|
|
15
|
-
function MembrsService(http, config) {
|
|
16
|
-
this.http = http;
|
|
17
|
-
this.config = config;
|
|
18
|
-
this._lsKey = 'membrs';
|
|
19
|
-
this._loggedInObservable = new rxjs.BehaviorSubject(false);
|
|
20
|
-
console.log('membrs constructor');
|
|
21
|
-
// if the token exists in local storage, retrieve it back to the service
|
|
22
|
-
if (localStorage.getItem(this._lsKey)) {
|
|
23
|
-
this.token = localStorage.getItem(this._lsKey);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
MembrsService.prototype.reissue = function (token) {
|
|
27
|
-
var _this = this;
|
|
28
|
-
return new Promise(function (resolve, reject) {
|
|
29
|
-
if (!token && !_this._token) {
|
|
30
|
-
reject('NOT_LOGGED_IN');
|
|
31
|
-
}
|
|
32
|
-
if (token)
|
|
33
|
-
_this.token = token;
|
|
34
|
-
// check stored token has not expired, or needs to be reissued soon
|
|
35
|
-
var reissueIn = _this._decoded.exp - Math.floor(Date.now() / 1000);
|
|
36
|
-
// token has expired
|
|
37
|
-
if (reissueIn < 0) {
|
|
38
|
-
reject('NOT_LOGGED_IN');
|
|
39
|
-
}
|
|
40
|
-
// token expiring soon
|
|
41
|
-
if (reissueIn < 300) {
|
|
42
|
-
_this.http.post(_this.config.apiProtocol + _this.config.api + '/token/' + _this._token, {}).subscribe(function (response) {
|
|
43
|
-
if (response.token) {
|
|
44
|
-
_this.token = response.token;
|
|
45
|
-
_this._loggedInObservable.next(true);
|
|
46
|
-
resolve(_this._token);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
reject('NOT_LOGGED_IN');
|
|
50
|
-
}
|
|
51
|
-
}, function (error) {
|
|
52
|
-
reject('NOT_LOGGED_IN');
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
_this._loggedInObservable.next(true);
|
|
57
|
-
resolve(_this._token);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
Object.defineProperty(MembrsService.prototype, "token", {
|
|
62
|
-
get: function () {
|
|
63
|
-
return this._token;
|
|
64
|
-
},
|
|
65
|
-
set: function (token) {
|
|
66
|
-
this._token = token;
|
|
67
|
-
localStorage.setItem(this._lsKey, token);
|
|
68
|
-
this._decoded = jwtService.decodeToken(this._token);
|
|
69
|
-
},
|
|
70
|
-
enumerable: false,
|
|
71
|
-
configurable: true
|
|
72
|
-
});
|
|
73
|
-
MembrsService.prototype.deleteToken = function () {
|
|
74
|
-
localStorage.removeItem(this._lsKey);
|
|
75
|
-
};
|
|
76
|
-
MembrsService.prototype.isLoggedIn = function () {
|
|
77
|
-
return this.token ? true : false;
|
|
78
|
-
};
|
|
79
|
-
Object.defineProperty(MembrsService.prototype, "profile", {
|
|
80
|
-
get: function () {
|
|
81
|
-
return this._decoded;
|
|
82
|
-
},
|
|
83
|
-
enumerable: false,
|
|
84
|
-
configurable: true
|
|
85
|
-
});
|
|
86
|
-
Object.defineProperty(MembrsService.prototype, "admin", {
|
|
87
|
-
get: function () {
|
|
88
|
-
return this.profile.permission == 1;
|
|
89
|
-
},
|
|
90
|
-
enumerable: false,
|
|
91
|
-
configurable: true
|
|
92
|
-
});
|
|
93
|
-
Object.defineProperty(MembrsService.prototype, "isLoggedInObservable", {
|
|
94
|
-
get: function () {
|
|
95
|
-
return this._loggedInObservable;
|
|
96
|
-
},
|
|
97
|
-
enumerable: false,
|
|
98
|
-
configurable: true
|
|
99
|
-
});
|
|
100
|
-
MembrsService.prototype.logout = function () {
|
|
101
|
-
var _this = this;
|
|
102
|
-
return new Promise(function (resolve, reject) {
|
|
103
|
-
_this.http.delete(_this.config.apiProtocol + _this.config.api + '/token/' + _this._token).subscribe(function (response) {
|
|
104
|
-
_this._token = null;
|
|
105
|
-
localStorage.removeItem(_this._lsKey);
|
|
106
|
-
resolve(_this.config.login);
|
|
107
|
-
//this.router.stateService.go('dashboard')
|
|
108
|
-
}, function (error) {
|
|
109
|
-
reject(error);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
};
|
|
113
|
-
return MembrsService;
|
|
114
|
-
}());
|
|
115
|
-
MembrsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MembrsService_Factory() { return new MembrsService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(MembrsConfigService)); }, token: MembrsService, providedIn: "root" });
|
|
116
|
-
MembrsService.decorators = [
|
|
117
|
-
{ type: i0.Injectable, args: [{
|
|
118
|
-
providedIn: 'root'
|
|
119
|
-
},] }
|
|
120
|
-
];
|
|
121
|
-
MembrsService.ctorParameters = function () { return [
|
|
122
|
-
{ type: i1.HttpClient },
|
|
123
|
-
{ type: undefined, decorators: [{ type: i0.Inject, args: [MembrsConfigService,] }] }
|
|
124
|
-
]; };
|
|
125
|
-
|
|
126
|
-
function routerConfigFn(router, injector) {
|
|
127
|
-
var transitionService = router.transitionService;
|
|
128
|
-
var stateService = router.stateService;
|
|
129
|
-
var config = injector.get(MembrsConfigService);
|
|
130
|
-
var membrsService = injector.get(MembrsService);
|
|
131
|
-
stateService.defaultErrorHandler(function (error) {
|
|
132
|
-
console.log('Default error handler - Membrs Angular Helper');
|
|
133
|
-
console.log(error);
|
|
134
|
-
if (error.detail == 'NOT_LOGGED_IN') {
|
|
135
|
-
membrsService.deleteToken();
|
|
136
|
-
window.location.href = config.login;
|
|
137
|
-
}
|
|
138
|
-
if (error.detail == 'INSUFFICIENT_PERMISSIONS')
|
|
139
|
-
stateService.go(config.defaultState);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function retrieveToken() {
|
|
144
|
-
console.log('retrieve from ls');
|
|
145
|
-
return localStorage.getItem('membrs');
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
var validateResolve = {
|
|
149
|
-
token: 'reissue',
|
|
150
|
-
deps: [angular.Transition, angular.UIRouter, MembrsService, MembrsConfigService],
|
|
151
|
-
resolveFn: validateResolveFn
|
|
152
|
-
};
|
|
153
|
-
var reissueResolve = {
|
|
154
|
-
token: 'reissue',
|
|
155
|
-
deps: [angular.Transition, angular.UIRouter, MembrsService, MembrsConfigService],
|
|
156
|
-
resolveFn: reissueResolveFn
|
|
157
|
-
};
|
|
158
|
-
var reissueState = {
|
|
159
|
-
name: 'reissue',
|
|
160
|
-
url: '/reissue?token',
|
|
161
|
-
views: {},
|
|
162
|
-
resolve: [
|
|
163
|
-
reissueResolve
|
|
164
|
-
]
|
|
165
|
-
};
|
|
166
|
-
function reissueResolveFn(transition, router, membrsService, membrsConfig) {
|
|
167
|
-
//console.log(membrsService)
|
|
168
|
-
return new Promise(function (resolve, reject) {
|
|
169
|
-
console.log('reissue promise resolve');
|
|
170
|
-
console.log(transition.params().token);
|
|
171
|
-
membrsService.reissue(transition.params().token).then(function (response) {
|
|
172
|
-
console.log('redirect to default state');
|
|
173
|
-
router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
|
|
174
|
-
reject();
|
|
175
|
-
}).catch(function (error) {
|
|
176
|
-
console.log('error in reissue resolve');
|
|
177
|
-
console.log(error);
|
|
178
|
-
//window.location.href = environment.login
|
|
179
|
-
reject(error);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
function validateResolveFn(transition, router, membrsService, membrsConfig) {
|
|
184
|
-
//console.log(membrsService)
|
|
185
|
-
return new Promise(function (resolve, reject) {
|
|
186
|
-
console.log('validate promise resolve');
|
|
187
|
-
membrsService.reissue().then(function (response) {
|
|
188
|
-
resolve(null);
|
|
189
|
-
}).catch(function (error) {
|
|
190
|
-
console.log('error in validateResolveFn');
|
|
191
|
-
console.log(error);
|
|
192
|
-
window.location.href = membrsConfig.login;
|
|
193
|
-
reject(error);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
function jwtOptionsFactory(config) {
|
|
198
|
-
console.log('jwt options factory');
|
|
199
|
-
console.log(config);
|
|
200
|
-
return {
|
|
201
|
-
tokenGetter: function () {
|
|
202
|
-
console.log('token getter', localStorage.getItem('membrs'));
|
|
203
|
-
return localStorage.getItem('membrs');
|
|
204
|
-
},
|
|
205
|
-
allowedDomains: [config.api]
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
/** The top level state(s) */
|
|
209
|
-
var STATES = [
|
|
210
|
-
reissueState
|
|
211
|
-
];
|
|
212
|
-
var MembrsModule = /** @class */ (function () {
|
|
213
|
-
function MembrsModule() {
|
|
214
|
-
}
|
|
215
|
-
MembrsModule.forRoot = function (config) {
|
|
216
|
-
var moduleProviders = angular.UIRouterModule.forChild({
|
|
217
|
-
states: STATES,
|
|
218
|
-
config: routerConfigFn
|
|
219
|
-
}).providers;
|
|
220
|
-
moduleProviders.push(angularJwt.JwtModule.forRoot({
|
|
221
|
-
config: {
|
|
222
|
-
tokenGetter: retrieveToken,
|
|
223
|
-
allowedDomains: []
|
|
224
|
-
}
|
|
225
|
-
}).providers);
|
|
226
|
-
moduleProviders.push(MembrsService);
|
|
227
|
-
moduleProviders.push({ provide: MembrsConfigService, useValue: config });
|
|
228
|
-
return {
|
|
229
|
-
ngModule: MembrsModule,
|
|
230
|
-
providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
|
|
231
|
-
};
|
|
232
|
-
};
|
|
233
|
-
return MembrsModule;
|
|
234
|
-
}());
|
|
235
|
-
MembrsModule.decorators = [
|
|
236
|
-
{ type: i0.NgModule, args: [{
|
|
237
|
-
imports: [
|
|
238
|
-
common.CommonModule,
|
|
239
|
-
i1.HttpClientModule,
|
|
240
|
-
angularJwt.JwtModule
|
|
241
|
-
// JwtModule.forRoot({
|
|
242
|
-
// config: {
|
|
243
|
-
// tokenGetter: retrieveToken
|
|
244
|
-
// }
|
|
245
|
-
// })
|
|
246
|
-
// UIRouterModule.forChild({
|
|
247
|
-
// states: STATES,
|
|
248
|
-
// config: routerConfigFn,
|
|
249
|
-
// }),
|
|
250
|
-
// JwtModule.forRoot({})
|
|
251
|
-
]
|
|
252
|
-
},] }
|
|
253
|
-
];
|
|
254
|
-
|
|
255
|
-
var TokenInterceptor = /** @class */ (function () {
|
|
256
|
-
function TokenInterceptor() {
|
|
257
|
-
}
|
|
258
|
-
TokenInterceptor.prototype.intercept = function (request, next) {
|
|
259
|
-
//this.busyService.busy()
|
|
260
|
-
request = request.clone({
|
|
261
|
-
setHeaders: {
|
|
262
|
-
Authorization: localStorage.getItem('membrs')
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
return next.handle(request).pipe(operators.finalize(function () {
|
|
266
|
-
//this.busyService.finished()
|
|
267
|
-
}));
|
|
268
|
-
};
|
|
269
|
-
return TokenInterceptor;
|
|
270
|
-
}());
|
|
271
|
-
TokenInterceptor.decorators = [
|
|
272
|
-
{ type: i0.Injectable }
|
|
273
|
-
];
|
|
274
|
-
TokenInterceptor.ctorParameters = function () { return []; };
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Generated bundle index. Do not edit.
|
|
278
|
-
*/
|
|
279
|
-
|
|
280
|
-
exports.MembrsModule = MembrsModule;
|
|
281
|
-
exports.MembrsService = MembrsService;
|
|
282
|
-
exports.STATES = STATES;
|
|
283
|
-
exports.TokenInterceptor = TokenInterceptor;
|
|
284
|
-
exports.jwtOptionsFactory = jwtOptionsFactory;
|
|
285
|
-
exports.reissueResolve = reissueResolve;
|
|
286
|
-
exports.reissueResolveFn = reissueResolveFn;
|
|
287
|
-
exports.reissueState = reissueState;
|
|
288
|
-
exports.retrieveToken = retrieveToken;
|
|
289
|
-
exports.validateResolve = validateResolve;
|
|
290
|
-
exports.validateResolveFn = validateResolveFn;
|
|
291
|
-
exports.ɵa = MembrsConfigService;
|
|
292
|
-
|
|
293
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
294
|
-
|
|
295
|
-
})));
|
|
296
|
-
//# sourceMappingURL=nakedcreativity-membrs-angular-helper.umd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nakedcreativity-membrs-angular-helper.umd.js","sources":["../../../projects/membrs/src/lib/config.service.ts","../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/router.config.ts","../../../projects/membrs/src/lib/token.ts","../../../projects/membrs/src/lib/membrs.module.ts","../../../projects/membrs/src/lib/auth.interceptor.ts","../../../projects/membrs/src/nakedcreativity-membrs-angular-helper.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MembrsConfig } from './config.interface';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\nexport const MembrsConfigService = new InjectionToken<MembrsConfig>(\"MembrsConfig\");\n","import { Injectable, Inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { HttpClient } from '@angular/common/http'\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { BehaviorSubject } from 'rxjs';\nconst jwtService = new JwtHelperService()\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class MembrsService {\n\n _token: string;\n _decoded: any;\n _lsKey: string = 'membrs';\n _loggedInObservable: BehaviorSubject<Boolean> = new BehaviorSubject(false)\n\n constructor(private http: HttpClient, @Inject(MembrsConfigService) private config: MembrsConfig) {\n\n console.log('membrs constructor')\n // if the token exists in local storage, retrieve it back to the service\n if(localStorage.getItem(this._lsKey)){\n this.token = localStorage.getItem(this._lsKey)\n }\n \n }\n\n reissue(token?:string){\n\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\n reject('NOT_LOGGED_IN')\n }\n\n if(token)\n this.token = token\n\n // check stored token has not expired, or needs to be reissued soon\n var reissueIn = this._decoded.exp - Math.floor(Date.now()/1000)\n \n // token has expired\n if(reissueIn < 0){\n reject('NOT_LOGGED_IN')\n }\n \n // token expiring soon\n if(reissueIn < 300){\n\n this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n\n if(response.token){\n this.token = response.token\n this._loggedInObservable.next(true)\n resolve(this._token)\n }else {\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n this._loggedInObservable.next(true)\n resolve(this._token)\n }\n \n })\n \n }\n\n set token(token){\n this._token = token\n localStorage.setItem(this._lsKey, token)\n this._decoded = jwtService.decodeToken(this._token)\n }\n\n deleteToken(){\n localStorage.removeItem(this._lsKey)\n }\n\n isLoggedIn(){\n return this.token ? true : false\n }\n\n get profile(){\n return this._decoded\n }\n\n get token(){\n return this._token\n }\n\n get admin (){\n return this.profile.permission == 1\n }\n\n get isLoggedInObservable(){\n return this._loggedInObservable\n }\n \n logout(){\n return new Promise((resolve, reject)=>{\n this.http.delete(this.config.apiProtocol+this.config.api+'/token/'+this._token).subscribe((response:any)=>{\n this._token = null;\n localStorage.removeItem(this._lsKey)\n resolve(this.config.login)\n //this.router.stateService.go('dashboard')\n }, error=>{\n reject(error)\n })\n })\n \n }\n\n\n}\n","import { UIRouter } from '@uirouter/core';\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { Injector } from '@angular/core';\nimport { MembrsService } from './membrs.service';\n\nexport function routerConfigFn(router: UIRouter, injector: Injector) {\n\n const transitionService = router.transitionService;\n const stateService = router.stateService\n const config:MembrsConfig = injector.get(MembrsConfigService)\n const membrsService = injector.get(MembrsService)\n\n \tstateService.defaultErrorHandler(function(error) {\n\t\t \n\t\tconsole.log('Default error handler - Membrs Angular Helper')\n\t\tconsole.log(error)\n\t\t\t\n\t\tif(error.detail == 'NOT_LOGGED_IN'){\n\t\t\tmembrsService.deleteToken()\n\t\t\twindow.location.href = config.login;\n\t\t}\n\n\t\tif(error.detail == 'INSUFFICIENT_PERMISSIONS')\n\t\t\tstateService.go(config.defaultState)\n\n\t});\n\t\n}","export function retrieveToken() {\n console.log('retrieve from ls')\n return localStorage.getItem('membrs');\n}","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MembrsService } from './membrs.service';\nimport { JwtModule, JWT_OPTIONS } from \"@auth0/angular-jwt\";\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { UIRouterModule } from '@uirouter/angular'\n\nimport { Ng2StateDeclaration } from '@uirouter/angular';\nimport { Transition, UIRouter } from '@uirouter/angular'\n\nimport { routerConfigFn } from './router.config';\nimport { MembrsConfig } from './config.interface';\nimport { MembrsConfigService } from './config.service';\nimport { retrieveToken } from './token';\n\nexport const validateResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: validateResolveFn\n}\n\nexport const reissueResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: reissueResolveFn\n}\n\nexport const reissueState:Ng2StateDeclaration = {\n\tname: 'reissue', \n\turl: '/reissue?token',\n\tviews: { },\n\tresolve: [\n reissueResolve\n\t]\n}\n\nexport function reissueResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('reissue promise resolve')\n console.log(transition.params().token)\n membrsService.reissue(transition.params().token).then((response)=>{\n console.log('redirect to default state')\n router.stateService.go(membrsConfig.defaultState, {}, {inherit:false})\n reject()\n }).catch(error=>{\n console.log('error in reissue resolve')\n console.log(error)\n //window.location.href = environment.login\n reject(error)\n })\n\n\t})\n}\n\nexport function validateResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('validate promise resolve')\n \n membrsService.reissue().then((response)=>{\n resolve(null)\n }).catch(error=>{\n console.log('error in validateResolveFn')\n console.log(error)\n window.location.href = membrsConfig.login\n reject(error)\n })\n\n})\n}\n\nexport function jwtOptionsFactory(config) {\n console.log('jwt options factory')\n console.log(config)\n return {\n tokenGetter: () => {\n console.log('token getter', localStorage.getItem('membrs'))\n return localStorage.getItem('membrs');\n },\n allowedDomains: [config.api]\n }\n}\n\n\n/** The top level state(s) */\nexport const STATES = [\n reissueState\n]\n\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n JwtModule\n // JwtModule.forRoot({\n // config: {\n // tokenGetter: retrieveToken\n // }\n // })\n // UIRouterModule.forChild({\n // states: STATES,\n // config: routerConfigFn,\n // }),\n // JwtModule.forRoot({})\n ]\n})\n\n\n\nexport class MembrsModule { \n static forRoot(config: MembrsConfig): ModuleWithProviders<MembrsModule> {\n\n\n const moduleProviders = UIRouterModule.forChild({\n states: STATES,\n config: routerConfigFn\n }).providers\n\n moduleProviders.push(JwtModule.forRoot({\n config: {\n tokenGetter: retrieveToken,\n allowedDomains: []\n }\n }).providers)\n \n moduleProviders.push(MembrsService)\n moduleProviders.push({provide: MembrsConfigService,useValue: config});\n \n \n return {\n ngModule: MembrsModule, \n providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]\n };\n \n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n//import { NgBusyService } from '@nakedcreativity/ng-busy';\nimport { finalize } from 'rxjs/operators';\n\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor() {}\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n \n //this.busyService.busy()\n request = request.clone({\n setHeaders: {\n Authorization: localStorage.getItem('membrs')\n }\n });\n return next.handle(request).pipe(finalize(()=>{\n //this.busyService.finished()\n }));\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MembrsConfig as ɵb} from './lib/config.interface';\nexport {MembrsConfigService as ɵa} from './lib/config.service';"],"names":["InjectionToken","JwtHelperService","BehaviorSubject","Injectable","HttpClient","Inject","Transition","UIRouter","UIRouterModule","JwtModule","NgModule","CommonModule","HttpClientModule","finalize"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@angular/core"),require("@auth0/angular-jwt"),require("@angular/common/http"),require("rxjs"),require("@angular/common"),require("@uirouter/angular"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@nakedcreativity/membrs-angular-helper",["exports","@angular/core","@auth0/angular-jwt","@angular/common/http","rxjs","@angular/common","@uirouter/angular","rxjs/operators"],o):o(((e="undefined"!=typeof globalThis?globalThis:e||self).nakedcreativity=e.nakedcreativity||{},e.nakedcreativity["membrs-angular-helper"]={}),e.ng.core,e.angularJwt,e.ng.common.http,e.rxjs,e.ng.common,e.angular,e.rxjs.operators)}(this,(function(e,o,t,n,r,i,s,l){"use strict";var a=new o.InjectionToken("MembrsConfig"),u=new t.JwtHelperService,c=function(){function e(e,o){this.http=e,this.config=o,this._lsKey="membrs",this._loggedInObservable=new r.BehaviorSubject(!1),console.log("membrs constructor"),localStorage.getItem(this._lsKey)&&(this.token=localStorage.getItem(this._lsKey))}return e.prototype.reissue=function(e){var o=this;return new Promise((function(t,n){e||o._token||n("NOT_LOGGED_IN"),e&&(o.token=e);var r=o._decoded.exp-Math.floor(Date.now()/1e3);r<0&&n("NOT_LOGGED_IN"),r<300?o.http.post(o.config.apiProtocol+o.config.api+"/token/"+o._token,{}).subscribe((function(e){e.token?(o.token=e.token,o._loggedInObservable.next(!0),t(o._token)):n("NOT_LOGGED_IN")}),(function(e){n("NOT_LOGGED_IN")})):(o._loggedInObservable.next(!0),t(o._token))}))},Object.defineProperty(e.prototype,"token",{get:function(){return this._token},set:function(e){this._token=e,localStorage.setItem(this._lsKey,e),this._decoded=u.decodeToken(this._token)},enumerable:!1,configurable:!0}),e.prototype.deleteToken=function(){localStorage.removeItem(this._lsKey)},e.prototype.isLoggedIn=function(){return!!this.token},Object.defineProperty(e.prototype,"profile",{get:function(){return this._decoded},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"admin",{get:function(){return 1==this.profile.permission},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isLoggedInObservable",{get:function(){return this._loggedInObservable},enumerable:!1,configurable:!0}),e.prototype.logout=function(){var e=this;return new Promise((function(o,t){e.http.delete(e.config.apiProtocol+e.config.api+"/token/"+e._token).subscribe((function(t){e._token=null,localStorage.removeItem(e._lsKey),o(e.config.login)}),(function(e){t(e)}))}))},e}();function g(e,o){e.transitionService;var t=e.stateService,n=o.get(a),r=o.get(c);t.defaultErrorHandler((function(e){console.log("Default error handler - Membrs Angular Helper"),console.log(e),"NOT_LOGGED_IN"==e.detail&&(r.deleteToken(),window.location.href=n.login),"INSUFFICIENT_PERMISSIONS"==e.detail&&t.go(n.defaultState)}))}function f(){return console.log("retrieve from ls"),localStorage.getItem("membrs")}c.ɵprov=o.ɵɵdefineInjectable({factory:function(){return new c(o.ɵɵinject(n.HttpClient),o.ɵɵinject(a))},token:c,providedIn:"root"}),c.decorators=[{type:o.Injectable,args:[{providedIn:"root"}]}],c.ctorParameters=function(){return[{type:n.HttpClient},{type:void 0,decorators:[{type:o.Inject,args:[a]}]}]};var p={token:"reissue",deps:[s.Transition,s.UIRouter,c,a],resolveFn:h},d={token:"reissue",deps:[s.Transition,s.UIRouter,c,a],resolveFn:v},m={name:"reissue",url:"/reissue?token",views:{},resolve:[d]};function v(e,o,t,n){return new Promise((function(r,i){console.log("reissue promise resolve"),console.log(e.params().token),t.reissue(e.params().token).then((function(e){console.log("redirect to default state"),o.stateService.go(n.defaultState,{},{inherit:!1}),i()})).catch((function(e){console.log("error in reissue resolve"),console.log(e),i(e)}))}))}function h(e,o,t,n){return new Promise((function(e,o){console.log("validate promise resolve"),t.reissue().then((function(o){e(null)})).catch((function(e){console.log("error in validateResolveFn"),console.log(e),window.location.href=n.login,o(e)}))}))}var b=[m],k=function(){function e(){}return e.forRoot=function(o){var n=s.UIRouterModule.forChild({states:b,config:g}).providers;return n.push(t.JwtModule.forRoot({config:{tokenGetter:f,allowedDomains:[]}}).providers),n.push(c),n.push({provide:a,useValue:o}),{ngModule:e,providers:n}},e}();k.decorators=[{type:o.NgModule,args:[{imports:[i.CommonModule,n.HttpClientModule,t.JwtModule]}]}];var y=function(){function e(){}return e.prototype.intercept=function(e,o){return e=e.clone({setHeaders:{Authorization:localStorage.getItem("membrs")}}),o.handle(e).pipe(l.finalize((function(){})))},e}();y.decorators=[{type:o.Injectable}],y.ctorParameters=function(){return[]},e.MembrsModule=k,e.MembrsService=c,e.STATES=b,e.TokenInterceptor=y,e.jwtOptionsFactory=function(e){return console.log("jwt options factory"),console.log(e),{tokenGetter:function(){return console.log("token getter",localStorage.getItem("membrs")),localStorage.getItem("membrs")},allowedDomains:[e.api]}},e.reissueResolve=d,e.reissueResolveFn=v,e.reissueState=m,e.retrieveToken=f,e.validateResolve=p,e.validateResolveFn=h,e.ɵa=a,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=nakedcreativity-membrs-angular-helper.umd.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../projects/membrs/src/lib/config.service.ts","../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/router.config.ts","../../../projects/membrs/src/lib/token.ts","../../../projects/membrs/src/lib/membrs.module.ts","../../../projects/membrs/src/lib/auth.interceptor.ts"],"names":["MembrsConfigService","InjectionToken","jwtService","JwtHelperService","MembrsService","http","config","this","_lsKey","_loggedInObservable","BehaviorSubject","console","log","localStorage","getItem","token","prototype","reissue","_this","Promise","resolve","reject","_token","reissueIn","_decoded","exp","Math","floor","Date","now","post","apiProtocol","api","subscribe","response","next","error","Object","defineProperty","setItem","decodeToken","deleteToken","removeItem","isLoggedIn","profile","permission","logout","delete","login","routerConfigFn","router","injector","transitionService","stateService","get","membrsService","defaultErrorHandler","detail","window","location","href","go","defaultState","retrieveToken","Injectable","args","providedIn","HttpClient","Inject","validateResolve","deps","Transition","UIRouter","resolveFn","validateResolveFn","reissueResolve","reissueResolveFn","reissueState","name","url","views","transition","membrsConfig","params","then","inherit","catch","STATES","MembrsModule","forRoot","moduleProviders","UIRouterModule","forChild","states","providers","push","JwtModule","tokenGetter","allowedDomains","provide","useValue","ngModule","NgModule","imports","CommonModule","HttpClientModule","TokenInterceptor","intercept","request","clone","setHeaders","Authorization","handle","pipe","finalize"],"mappings":"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","sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MembrsConfig } from './config.interface';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\nexport const MembrsConfigService = new InjectionToken<MembrsConfig>(\"MembrsConfig\");\n","import { Injectable, Inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { HttpClient } from '@angular/common/http'\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { BehaviorSubject } from 'rxjs';\nconst jwtService = new JwtHelperService()\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class MembrsService {\n\n _token: string;\n _decoded: any;\n _lsKey: string = 'membrs';\n _loggedInObservable: BehaviorSubject<Boolean> = new BehaviorSubject(false)\n\n constructor(private http: HttpClient, @Inject(MembrsConfigService) private config: MembrsConfig) {\n\n console.log('membrs constructor')\n // if the token exists in local storage, retrieve it back to the service\n if(localStorage.getItem(this._lsKey)){\n this.token = localStorage.getItem(this._lsKey)\n }\n \n }\n\n reissue(token?:string){\n\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\n reject('NOT_LOGGED_IN')\n }\n\n if(token)\n this.token = token\n\n // check stored token has not expired, or needs to be reissued soon\n var reissueIn = this._decoded.exp - Math.floor(Date.now()/1000)\n \n // token has expired\n if(reissueIn < 0){\n reject('NOT_LOGGED_IN')\n }\n \n // token expiring soon\n if(reissueIn < 300){\n\n this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n\n if(response.token){\n this.token = response.token\n this._loggedInObservable.next(true)\n resolve(this._token)\n }else {\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n this._loggedInObservable.next(true)\n resolve(this._token)\n }\n \n })\n \n }\n\n set token(token){\n this._token = token\n localStorage.setItem(this._lsKey, token)\n this._decoded = jwtService.decodeToken(this._token)\n }\n\n deleteToken(){\n localStorage.removeItem(this._lsKey)\n }\n\n isLoggedIn(){\n return this.token ? true : false\n }\n\n get profile(){\n return this._decoded\n }\n\n get token(){\n return this._token\n }\n\n get admin (){\n return this.profile.permission == 1\n }\n\n get isLoggedInObservable(){\n return this._loggedInObservable\n }\n \n logout(){\n return new Promise((resolve, reject)=>{\n this.http.delete(this.config.apiProtocol+this.config.api+'/token/'+this._token).subscribe((response:any)=>{\n this._token = null;\n localStorage.removeItem(this._lsKey)\n resolve(this.config.login)\n //this.router.stateService.go('dashboard')\n }, error=>{\n reject(error)\n })\n })\n \n }\n\n\n}\n","import { UIRouter } from '@uirouter/core';\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { Injector } from '@angular/core';\nimport { MembrsService } from './membrs.service';\n\nexport function routerConfigFn(router: UIRouter, injector: Injector) {\n\n const transitionService = router.transitionService;\n const stateService = router.stateService\n const config:MembrsConfig = injector.get(MembrsConfigService)\n const membrsService = injector.get(MembrsService)\n\n \tstateService.defaultErrorHandler(function(error) {\n\t\t \n\t\tconsole.log('Default error handler - Membrs Angular Helper')\n\t\tconsole.log(error)\n\t\t\t\n\t\tif(error.detail == 'NOT_LOGGED_IN'){\n\t\t\tmembrsService.deleteToken()\n\t\t\twindow.location.href = config.login;\n\t\t}\n\n\t\tif(error.detail == 'INSUFFICIENT_PERMISSIONS')\n\t\t\tstateService.go(config.defaultState)\n\n\t});\n\t\n}","export function retrieveToken() {\n console.log('retrieve from ls')\n return localStorage.getItem('membrs');\n}","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MembrsService } from './membrs.service';\nimport { JwtModule, JWT_OPTIONS } from \"@auth0/angular-jwt\";\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { UIRouterModule } from '@uirouter/angular'\n\nimport { Ng2StateDeclaration } from '@uirouter/angular';\nimport { Transition, UIRouter } from '@uirouter/angular'\n\nimport { routerConfigFn } from './router.config';\nimport { MembrsConfig } from './config.interface';\nimport { MembrsConfigService } from './config.service';\nimport { retrieveToken } from './token';\n\nexport const validateResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: validateResolveFn\n}\n\nexport const reissueResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: reissueResolveFn\n}\n\nexport const reissueState:Ng2StateDeclaration = {\n\tname: 'reissue', \n\turl: '/reissue?token',\n\tviews: { },\n\tresolve: [\n reissueResolve\n\t]\n}\n\nexport function reissueResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('reissue promise resolve')\n console.log(transition.params().token)\n membrsService.reissue(transition.params().token).then((response)=>{\n console.log('redirect to default state')\n router.stateService.go(membrsConfig.defaultState, {}, {inherit:false})\n reject()\n }).catch(error=>{\n console.log('error in reissue resolve')\n console.log(error)\n //window.location.href = environment.login\n reject(error)\n })\n\n\t})\n}\n\nexport function validateResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('validate promise resolve')\n \n membrsService.reissue().then((response)=>{\n resolve(null)\n }).catch(error=>{\n console.log('error in validateResolveFn')\n console.log(error)\n window.location.href = membrsConfig.login\n reject(error)\n })\n\n})\n}\n\nexport function jwtOptionsFactory(config) {\n console.log('jwt options factory')\n console.log(config)\n return {\n tokenGetter: () => {\n console.log('token getter', localStorage.getItem('membrs'))\n return localStorage.getItem('membrs');\n },\n allowedDomains: [config.api]\n }\n}\n\n\n/** The top level state(s) */\nexport const STATES = [\n reissueState\n]\n\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n JwtModule\n // JwtModule.forRoot({\n // config: {\n // tokenGetter: retrieveToken\n // }\n // })\n // UIRouterModule.forChild({\n // states: STATES,\n // config: routerConfigFn,\n // }),\n // JwtModule.forRoot({})\n ]\n})\n\n\n\nexport class MembrsModule { \n static forRoot(config: MembrsConfig): ModuleWithProviders<MembrsModule> {\n\n\n const moduleProviders = UIRouterModule.forChild({\n states: STATES,\n config: routerConfigFn\n }).providers\n\n moduleProviders.push(JwtModule.forRoot({\n config: {\n tokenGetter: retrieveToken,\n allowedDomains: []\n }\n }).providers)\n \n moduleProviders.push(MembrsService)\n moduleProviders.push({provide: MembrsConfigService,useValue: config});\n \n \n return {\n ngModule: MembrsModule, \n providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]\n };\n \n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n//import { NgBusyService } from '@nakedcreativity/ng-busy';\nimport { finalize } from 'rxjs/operators';\n\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor() {}\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n \n //this.busyService.busy()\n request = request.clone({\n setHeaders: {\n Authorization: localStorage.getItem('membrs')\n }\n });\n return next.handle(request).pipe(finalize(()=>{\n //this.busyService.finished()\n }));\n }\n}"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
//import { NgBusyService } from '@nakedcreativity/ng-busy';
|
|
3
|
-
import { finalize } from 'rxjs/operators';
|
|
4
|
-
export class TokenInterceptor {
|
|
5
|
-
constructor() { }
|
|
6
|
-
intercept(request, next) {
|
|
7
|
-
//this.busyService.busy()
|
|
8
|
-
request = request.clone({
|
|
9
|
-
setHeaders: {
|
|
10
|
-
Authorization: localStorage.getItem('membrs')
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
return next.handle(request).pipe(finalize(() => {
|
|
14
|
-
//this.busyService.finished()
|
|
15
|
-
}));
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
TokenInterceptor.decorators = [
|
|
19
|
-
{ type: Injectable }
|
|
20
|
-
];
|
|
21
|
-
TokenInterceptor.ctorParameters = () => [];
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvam9yZGFuY2hpdHR5L0dpdC9tZW1icnMtYXdzL215LW1lbWJycy9wcm9qZWN0cy9tZW1icnMvc3JjLyIsInNvdXJjZXMiOlsibGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzQywyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTFDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsZ0JBQWUsQ0FBQztJQUNoQixTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUVwRCx5QkFBeUI7UUFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdEIsVUFBVSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUM5QztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUUsRUFBRTtZQUM1Qyw2QkFBNkI7UUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OztZQWRGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbi8vaW1wb3J0IHsgTmdCdXN5U2VydmljZSB9IGZyb20gJ0BuYWtlZGNyZWF0aXZpdHkvbmctYnVzeSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIFxuICAgIC8vdGhpcy5idXN5U2VydmljZS5idXN5KClcbiAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZW1icnMnKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKGZpbmFsaXplKCgpPT57XG4gICAgICAvL3RoaXMuYnVzeVNlcnZpY2UuZmluaXNoZWQoKVxuICAgIH0pKTtcbiAgfVxufSJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvam9yZGFuY2hpdHR5L0dpdC9tZW1icnMtYXdzL215LW1lbWJycy9wcm9qZWN0cy9tZW1icnMvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWVtYnJzQ29uZmlnIHtcbiAgICBncmFwaFFMOiBzdHJpbmcsXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXBpUHJvdG9jb2w6IHN0cmluZyxcbiAgICBsb2dpbjogc3RyaW5nLFxuICAgIGRlZmF1bHRTdGF0ZTogc3RyaW5nXG59Il19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* This is not a real service, but it looks like it from the outside.
|
|
4
|
-
* It's just an InjectionTToken used to import the config object, provided from the outside
|
|
5
|
-
*/
|
|
6
|
-
export const MembrsConfigService = new InjectionToken("MembrsConfig");
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2pvcmRhbmNoaXR0eS9HaXQvbWVtYnJzLWF3cy9teS1tZW1icnMvcHJvamVjdHMvbWVtYnJzL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFlLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogVGhpcyBpcyBub3QgYSByZWFsIHNlcnZpY2UsIGJ1dCBpdCBsb29rcyBsaWtlIGl0IGZyb20gdGhlIG91dHNpZGUuXG4gKiBJdCdzIGp1c3QgYW4gSW5qZWN0aW9uVFRva2VuIHVzZWQgdG8gaW1wb3J0IHRoZSBjb25maWcgb2JqZWN0LCBwcm92aWRlZCBmcm9tIHRoZSBvdXRzaWRlXG4gKi9cbmV4cG9ydCBjb25zdCBNZW1icnNDb25maWdTZXJ2aWNlID0gbmV3IEluamVjdGlvblRva2VuPE1lbWJyc0NvbmZpZz4oXCJNZW1icnNDb25maWdcIik7XG4iXX0=
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { MembrsService } from './membrs.service';
|
|
4
|
-
import { JwtModule } from "@auth0/angular-jwt";
|
|
5
|
-
import { HttpClientModule } from "@angular/common/http";
|
|
6
|
-
import { UIRouterModule } from '@uirouter/angular';
|
|
7
|
-
import { Transition, UIRouter } from '@uirouter/angular';
|
|
8
|
-
import { routerConfigFn } from './router.config';
|
|
9
|
-
import { MembrsConfigService } from './config.service';
|
|
10
|
-
import { retrieveToken } from './token';
|
|
11
|
-
export const validateResolve = {
|
|
12
|
-
token: 'reissue',
|
|
13
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
14
|
-
resolveFn: validateResolveFn
|
|
15
|
-
};
|
|
16
|
-
export const reissueResolve = {
|
|
17
|
-
token: 'reissue',
|
|
18
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
19
|
-
resolveFn: reissueResolveFn
|
|
20
|
-
};
|
|
21
|
-
export const reissueState = {
|
|
22
|
-
name: 'reissue',
|
|
23
|
-
url: '/reissue?token',
|
|
24
|
-
views: {},
|
|
25
|
-
resolve: [
|
|
26
|
-
reissueResolve
|
|
27
|
-
]
|
|
28
|
-
};
|
|
29
|
-
export function reissueResolveFn(transition, router, membrsService, membrsConfig) {
|
|
30
|
-
//console.log(membrsService)
|
|
31
|
-
return new Promise((resolve, reject) => {
|
|
32
|
-
console.log('reissue promise resolve');
|
|
33
|
-
console.log(transition.params().token);
|
|
34
|
-
membrsService.reissue(transition.params().token).then((response) => {
|
|
35
|
-
console.log('redirect to default state');
|
|
36
|
-
router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
|
|
37
|
-
reject();
|
|
38
|
-
}).catch(error => {
|
|
39
|
-
console.log('error in reissue resolve');
|
|
40
|
-
console.log(error);
|
|
41
|
-
//window.location.href = environment.login
|
|
42
|
-
reject(error);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
export function validateResolveFn(transition, router, membrsService, membrsConfig) {
|
|
47
|
-
//console.log(membrsService)
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
console.log('validate promise resolve');
|
|
50
|
-
membrsService.reissue().then((response) => {
|
|
51
|
-
resolve(null);
|
|
52
|
-
}).catch(error => {
|
|
53
|
-
console.log('error in validateResolveFn');
|
|
54
|
-
console.log(error);
|
|
55
|
-
window.location.href = membrsConfig.login;
|
|
56
|
-
reject(error);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
export function jwtOptionsFactory(config) {
|
|
61
|
-
console.log('jwt options factory');
|
|
62
|
-
console.log(config);
|
|
63
|
-
return {
|
|
64
|
-
tokenGetter: () => {
|
|
65
|
-
console.log('token getter', localStorage.getItem('membrs'));
|
|
66
|
-
return localStorage.getItem('membrs');
|
|
67
|
-
},
|
|
68
|
-
allowedDomains: [config.api]
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
/** The top level state(s) */
|
|
72
|
-
export const STATES = [
|
|
73
|
-
reissueState
|
|
74
|
-
];
|
|
75
|
-
export class MembrsModule {
|
|
76
|
-
static forRoot(config) {
|
|
77
|
-
const moduleProviders = UIRouterModule.forChild({
|
|
78
|
-
states: STATES,
|
|
79
|
-
config: routerConfigFn
|
|
80
|
-
}).providers;
|
|
81
|
-
moduleProviders.push(JwtModule.forRoot({
|
|
82
|
-
config: {
|
|
83
|
-
tokenGetter: retrieveToken,
|
|
84
|
-
allowedDomains: []
|
|
85
|
-
}
|
|
86
|
-
}).providers);
|
|
87
|
-
moduleProviders.push(MembrsService);
|
|
88
|
-
moduleProviders.push({ provide: MembrsConfigService, useValue: config });
|
|
89
|
-
return {
|
|
90
|
-
ngModule: MembrsModule,
|
|
91
|
-
providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
MembrsModule.decorators = [
|
|
96
|
-
{ type: NgModule, args: [{
|
|
97
|
-
imports: [
|
|
98
|
-
CommonModule,
|
|
99
|
-
HttpClientModule,
|
|
100
|
-
JwtModule
|
|
101
|
-
// JwtModule.forRoot({
|
|
102
|
-
// config: {
|
|
103
|
-
// tokenGetter: retrieveToken
|
|
104
|
-
// }
|
|
105
|
-
// })
|
|
106
|
-
// UIRouterModule.forChild({
|
|
107
|
-
// states: STATES,
|
|
108
|
-
// config: routerConfigFn,
|
|
109
|
-
// }),
|
|
110
|
-
// JwtModule.forRoot({})
|
|
111
|
-
]
|
|
112
|
-
},] }
|
|
113
|
-
];
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvam9yZGFuY2hpdHR5L0dpdC9tZW1icnMtYXdzL215LW1lbWJycy9wcm9qZWN0cy9tZW1icnMvc3JjLyIsInNvdXJjZXMiOlsibGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLEtBQUssRUFBRSxTQUFTO0lBQ2hCLElBQUksRUFBRSxDQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFFO0lBQ2xFLFNBQVMsRUFBRSxpQkFBaUI7Q0FDL0IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsZ0JB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QUNsQixZQUFZO0NBQ2YsQ0FBQTtBQXVCRCxNQUFNLE9BQU8sWUFBWTtJQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQW9CO1FBR2pDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDLENBQUMsU0FBUyxDQUFBO1FBRVosZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE1BQU0sRUFBRTtnQkFDTixXQUFXLEVBQUUsYUFBYTtnQkFDMUIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7U0FDRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFYixlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFHdEUsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxlQUFlLENBQUMsbURBQW1EO1NBQy9FLENBQUM7SUFFSixDQUFDOzs7WUE3Q0YsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGdCQUFnQjtvQkFDaEIsU0FBUztvQkFDVCxzQkFBc0I7b0JBQ3RCLGNBQWM7b0JBQ2QsaUNBQWlDO29CQUNqQyxNQUFNO29CQUNOLEtBQUs7b0JBQ0wsNEJBQTRCO29CQUM1QixvQkFBb0I7b0JBQ3BCLDRCQUE0QjtvQkFDNUIsTUFBTTtvQkFDTix3QkFBd0I7aUJBQ3pCO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW1icnNTZXJ2aWNlIH0gZnJvbSAnLi9tZW1icnMuc2VydmljZSc7XG5pbXBvcnQgeyBKd3RNb2R1bGUsIEpXVF9PUFRJT05TIH0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgVUlSb3V0ZXJNb2R1bGUgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgTmcyU3RhdGVEZWNsYXJhdGlvbiB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zaXRpb24sIFVJUm91dGVyIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInXG5cbmltcG9ydCB7IHJvdXRlckNvbmZpZ0ZuIH0gZnJvbSAnLi9yb3V0ZXIuY29uZmlnJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyByZXRyaWV2ZVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlc29sdmUgPSB7XG4gICAgdG9rZW46ICdyZWlzc3VlJyxcbiAgICBkZXBzOiBbIFRyYW5zaXRpb24sIFVJUm91dGVyLCBNZW1icnNTZXJ2aWNlLCBNZW1icnNDb25maWdTZXJ2aWNlIF0sXG4gICAgcmVzb2x2ZUZuOiB2YWxpZGF0ZVJlc29sdmVGblxufVxuXG5leHBvcnQgY29uc3QgcmVpc3N1ZVJlc29sdmUgPSB7XG4gIHRva2VuOiAncmVpc3N1ZScsXG4gIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgcmVzb2x2ZUZuOiByZWlzc3VlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlU3RhdGU6TmcyU3RhdGVEZWNsYXJhdGlvbiA9IHtcblx0bmFtZTogJ3JlaXNzdWUnLCBcblx0dXJsOiAnL3JlaXNzdWU/dG9rZW4nLFxuXHR2aWV3czogeyB9LFxuXHRyZXNvbHZlOiBbXG4gICAgcmVpc3N1ZVJlc29sdmVcblx0XVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVpc3N1ZVJlc29sdmVGbih0cmFuc2l0aW9uLCByb3V0ZXIsIG1lbWJyc1NlcnZpY2UsIG1lbWJyc0NvbmZpZzpNZW1icnNDb25maWcpIHtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdyZWlzc3VlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgICBjb25zb2xlLmxvZyh0cmFuc2l0aW9uLnBhcmFtcygpLnRva2VuKVxuICAgICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWRpcmVjdCB0byBkZWZhdWx0IHN0YXRlJylcbiAgICAgICAgICByb3V0ZXIuc3RhdGVTZXJ2aWNlLmdvKG1lbWJyc0NvbmZpZy5kZWZhdWx0U3RhdGUsIHt9LCB7aW5oZXJpdDpmYWxzZX0pXG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGluIHJlaXNzdWUgcmVzb2x2ZScpXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZiA9IGVudmlyb25tZW50LmxvZ2luXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSlcblxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZXNvbHZlRm4odHJhbnNpdGlvbiwgcm91dGVyLCBtZW1icnNTZXJ2aWNlLCBtZW1icnNDb25maWc6TWVtYnJzQ29uZmlnKSB7XG4gIFxuICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ3ZhbGlkYXRlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgXG4gICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKCkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICB9KS5jYXRjaChlcnJvcj0+e1xuICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGluIHZhbGlkYXRlUmVzb2x2ZUZuJylcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG1lbWJyc0NvbmZpZy5sb2dpblxuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgfSlcblxufSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp3dE9wdGlvbnNGYWN0b3J5KGNvbmZpZykge1xuICBjb25zb2xlLmxvZygnand0IG9wdGlvbnMgZmFjdG9yeScpXG4gIGNvbnNvbGUubG9nKGNvbmZpZylcbiAgcmV0dXJuIHtcbiAgICB0b2tlbkdldHRlcjogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3Rva2VuIGdldHRlcicsICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJykpXG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpO1xuICAgIH0sXG4gICAgYWxsb3dlZERvbWFpbnM6IFtjb25maWcuYXBpXVxuICB9XG59XG5cblxuLyoqIFRoZSB0b3AgbGV2ZWwgc3RhdGUocykgKi9cbmV4cG9ydCBjb25zdCBTVEFURVMgPSBbXG4gICAgcmVpc3N1ZVN0YXRlXG5dXG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEp3dE1vZHVsZVxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHtcbiAgICAvLyAgIGNvbmZpZzoge1xuICAgIC8vICAgICB0b2tlbkdldHRlcjogcmV0cmlldmVUb2tlblxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgLy8gVUlSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoe1xuICAgIC8vICAgc3RhdGVzOiBTVEFURVMsXG4gICAgLy8gICBjb25maWc6IHJvdXRlckNvbmZpZ0ZuLFxuICAgIC8vIH0pLFxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHt9KVxuICBdXG59KVxuXG5cblxuZXhwb3J0IGNsYXNzIE1lbWJyc01vZHVsZSB7IFxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE1lbWJyc0NvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TWVtYnJzTW9kdWxlPiB7XG5cblxuICAgIGNvbnN0IG1vZHVsZVByb3ZpZGVycyA9IFVJUm91dGVyTW9kdWxlLmZvckNoaWxkKHtcbiAgICAgIHN0YXRlczogU1RBVEVTLFxuICAgICAgY29uZmlnOiByb3V0ZXJDb25maWdGblxuICAgIH0pLnByb3ZpZGVyc1xuXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goSnd0TW9kdWxlLmZvclJvb3Qoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHRva2VuR2V0dGVyOiByZXRyaWV2ZVRva2VuLFxuICAgICAgICBhbGxvd2VkRG9tYWluczogW11cbiAgICAgIH1cbiAgICB9KS5wcm92aWRlcnMpXG4gICAgICBcbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaChNZW1icnNTZXJ2aWNlKVxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKHtwcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9KTtcbiAgICBcbiAgIFxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTWVtYnJzTW9kdWxlLCBcbiAgICAgIHByb3ZpZGVyczogbW9kdWxlUHJvdmlkZXJzIC8vW3twcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9XVxuICAgIH07XG4gICAgXG4gIH1cblxufVxuIl19
|