@nakedcreativity/membrs-angular-helper 0.1.5 → 0.1.7
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/esm2022/lib/auth.interceptor.mjs +66 -0
- package/{esm2020 → esm2022}/lib/membrs.module.mjs +31 -31
- package/esm2022/lib/membrs.service.mjs +128 -0
- package/{fesm2020 → fesm2022}/nakedcreativity-membrs-angular-helper.mjs +50 -43
- package/{fesm2015 → fesm2022}/nakedcreativity-membrs-angular-helper.mjs.map +1 -1
- package/package.json +6 -12
- package/esm2020/lib/auth.interceptor.mjs +0 -63
- package/esm2020/lib/membrs.service.mjs +0 -124
- package/fesm2015/nakedcreativity-membrs-angular-helper.mjs +0 -364
- package/fesm2020/nakedcreativity-membrs-angular-helper.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/token.mjs +0 -0
- /package/{esm2020 → esm2022}/nakedcreativity-membrs-angular-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
package/package.json
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nakedcreativity/membrs-angular-helper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=15.0.0",
|
|
6
6
|
"@angular/core": ">=15.0.0",
|
|
7
|
-
"@uirouter/angular": "
|
|
7
|
+
"@uirouter/angular": ">=11.0.0",
|
|
8
8
|
"@auth0/angular-jwt": "^5.x"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
|
-
"module": "
|
|
14
|
-
"es2020": "fesm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
15
|
-
"esm2020": "esm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
16
|
-
"fesm2020": "fesm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
17
|
-
"fesm2015": "fesm2015/nakedcreativity-membrs-angular-helper.mjs",
|
|
13
|
+
"module": "fesm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
18
14
|
"typings": "index.d.ts",
|
|
19
15
|
"exports": {
|
|
20
16
|
"./package.json": {
|
|
@@ -22,11 +18,9 @@
|
|
|
22
18
|
},
|
|
23
19
|
".": {
|
|
24
20
|
"types": "./index.d.ts",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"node": "./fesm2015/nakedcreativity-membrs-angular-helper.mjs",
|
|
29
|
-
"default": "./fesm2020/nakedcreativity-membrs-angular-helper.mjs"
|
|
21
|
+
"esm2022": "./esm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
22
|
+
"esm": "./esm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
23
|
+
"default": "./fesm2022/nakedcreativity-membrs-angular-helper.mjs"
|
|
30
24
|
}
|
|
31
25
|
},
|
|
32
26
|
"sideEffects": false
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { from, throwError } from "rxjs";
|
|
3
|
-
import { switchMap, catchError, finalize, tap } from "rxjs/operators";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@auth0/angular-jwt";
|
|
6
|
-
import * as i2 from "./membrs.service";
|
|
7
|
-
import * as i3 from "@uirouter/angular";
|
|
8
|
-
export class TokenInterceptor {
|
|
9
|
-
constructor(jwtHelper, membrsService, stateService) {
|
|
10
|
-
this.jwtHelper = jwtHelper;
|
|
11
|
-
this.membrsService = membrsService;
|
|
12
|
-
this.stateService = stateService;
|
|
13
|
-
}
|
|
14
|
-
intercept(request, next) {
|
|
15
|
-
const token = localStorage.getItem("membrs");
|
|
16
|
-
if (token && this.jwtHelper.isTokenExpired(token)) {
|
|
17
|
-
console.log("Token expired. Attempting to reissue.");
|
|
18
|
-
return from(this.membrsService.reissue()).pipe(switchMap(() => {
|
|
19
|
-
const refreshedToken = localStorage.getItem("membrs");
|
|
20
|
-
if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
|
|
21
|
-
console.log("Token successfully reissued.");
|
|
22
|
-
request = request.clone({
|
|
23
|
-
setHeaders: {
|
|
24
|
-
Authorization: refreshedToken,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
return next.handle(request);
|
|
29
|
-
}), catchError((err) => {
|
|
30
|
-
console.warn("Token refresh failed. Logging out.");
|
|
31
|
-
this.membrsService.logout();
|
|
32
|
-
this.stateService.go("");
|
|
33
|
-
return throwError(() => err);
|
|
34
|
-
}), finalize(() => {
|
|
35
|
-
// this.busyService.finished()
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
if (token && !this.jwtHelper.isTokenExpired(token)) {
|
|
39
|
-
request = request.clone({
|
|
40
|
-
setHeaders: {
|
|
41
|
-
Authorization: token,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
return next.handle(request).pipe(tap((event) => {
|
|
46
|
-
// If this is an HttpResponse, check for x-new-token header
|
|
47
|
-
if (event && event.type === 4 && event.headers) {
|
|
48
|
-
const newToken = event.headers.get('x-new-token');
|
|
49
|
-
if (newToken) {
|
|
50
|
-
localStorage.setItem('membrs', newToken);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}), finalize(() => {
|
|
54
|
-
// this.busyService.finished()
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.JwtHelperService }, { token: i2.MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
59
|
-
TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor });
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
61
|
-
type: Injectable
|
|
62
|
-
}], ctorParameters: function () { return [{ type: i1.JwtHelperService }, { type: i2.MembrsService }, { type: i3.StateService }]; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBS3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0IsU0FBMkIsRUFBVSxhQUE0QixFQUFVLFlBQTBCO1FBQXJHLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFN0gsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDcEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7b0JBQzVDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUN0QixVQUFVLEVBQUU7NEJBQ1YsYUFBYSxFQUFFLGNBQWM7eUJBQzlCO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osOEJBQThCO1lBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixhQUFhLEVBQUUsS0FBSztpQkFDckI7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osMkRBQTJEO1lBQzNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLFFBQVEsRUFBRTtvQkFDWixZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDMUM7YUFDRjtRQUNILENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWiw4QkFBOEI7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OzhHQXZEVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSnd0SGVscGVyU2VydmljZSB9IGZyb20gXCJAYXV0aDAvYW5ndWxhci1qd3RcIjtcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQsIEh0dHBJbnRlcmNlcHRvciB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE1lbWJyc1NlcnZpY2UgfSBmcm9tIFwiLi9tZW1icnMuc2VydmljZVwiO1xuaW1wb3J0IHsgU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIkB1aXJvdXRlci9hbmd1bGFyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUb2tlbkludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBqd3RIZWxwZXI6IEp3dEhlbHBlclNlcnZpY2UsIHByaXZhdGUgbWVtYnJzU2VydmljZTogTWVtYnJzU2VydmljZSwgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IFN0YXRlU2VydmljZSkge31cblxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1lbWJyc1wiKTtcblxuICAgIGlmICh0b2tlbiAmJiB0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVG9rZW4gZXhwaXJlZC4gQXR0ZW1wdGluZyB0byByZWlzc3VlLlwiKTtcbiAgICAgIHJldHVybiBmcm9tKHRoaXMubWVtYnJzU2VydmljZS5yZWlzc3VlKCkpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVmcmVzaGVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1lbWJyc1wiKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkVG9rZW4gJiYgIXRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKHJlZnJlc2hlZFRva2VuKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJUb2tlbiBzdWNjZXNzZnVsbHkgcmVpc3N1ZWQuXCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogcmVmcmVzaGVkVG9rZW4sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiVG9rZW4gcmVmcmVzaCBmYWlsZWQuIExvZ2dpbmcgb3V0LlwiKTtcbiAgICAgICAgICB0aGlzLm1lbWJyc1NlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ28oXCJcIik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzLmJ1c3lTZXJ2aWNlLmZpbmlzaGVkKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuICYmICF0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gSHR0cFJlc3BvbnNlLCBjaGVjayBmb3IgeC1uZXctdG9rZW4gaGVhZGVyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSA0ICYmIGV2ZW50LmhlYWRlcnMpIHtcbiAgICAgICAgICBjb25zdCBuZXdUb2tlbiA9IGV2ZW50LmhlYWRlcnMuZ2V0KCd4LW5ldy10b2tlbicpO1xuICAgICAgICAgIGlmIChuZXdUb2tlbikge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lbWJycycsIG5ld1Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmJ1c3lTZXJ2aWNlLmZpbmlzaGVkKClcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { Injectable, Inject } from '@angular/core';
|
|
2
|
-
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
3
|
-
import { MembrsConfigService } from './config.service';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common/http";
|
|
7
|
-
const jwtService = new JwtHelperService();
|
|
8
|
-
export class MembrsService {
|
|
9
|
-
constructor(http, config) {
|
|
10
|
-
this.http = http;
|
|
11
|
-
this.config = config;
|
|
12
|
-
this.decodedReady = new BehaviorSubject(null);
|
|
13
|
-
this._lsKey = 'membrs';
|
|
14
|
-
this._loggedInObservable = new BehaviorSubject(false);
|
|
15
|
-
// console.log('membrs constructor')
|
|
16
|
-
// if the token exists in local storage, retrieve it back to the service
|
|
17
|
-
if (localStorage.getItem(this._lsKey)) {
|
|
18
|
-
this.token = localStorage.getItem(this._lsKey);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
reissue(token) {
|
|
22
|
-
console.log('Reissuing token...'); // Log function entry
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
if (!token && !this._token) {
|
|
25
|
-
console.log('No token provided and no token found.'); // Log missing token
|
|
26
|
-
reject('NOT_LOGGED_IN');
|
|
27
|
-
}
|
|
28
|
-
if (token) {
|
|
29
|
-
console.log(`Token provided: ${token}`); // Log provided token
|
|
30
|
-
this.token = token;
|
|
31
|
-
}
|
|
32
|
-
// check stored token has not expired, or needs to be reissued soon
|
|
33
|
-
var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
|
|
34
|
-
// token has expired
|
|
35
|
-
if (reissueIn < 0) {
|
|
36
|
-
console.log('Token has expired.'); // Log expired token
|
|
37
|
-
reject('NOT_LOGGED_IN');
|
|
38
|
-
}
|
|
39
|
-
// token expiring soon
|
|
40
|
-
if (reissueIn < 300) {
|
|
41
|
-
console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
|
|
42
|
-
this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
|
|
43
|
-
if (response.token) {
|
|
44
|
-
this.token = response.token;
|
|
45
|
-
this._loggedInObservable.next(true);
|
|
46
|
-
console.log('Token successfully reissued.'); // Log success
|
|
47
|
-
resolve(this._token);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
console.log('Failed to reissue token.'); // Log failure
|
|
51
|
-
reject('NOT_LOGGED_IN');
|
|
52
|
-
}
|
|
53
|
-
}, (error) => {
|
|
54
|
-
console.log('Error reissuing token:', error); // Log error details
|
|
55
|
-
reject('NOT_LOGGED_IN');
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
this._loggedInObservable.next(true);
|
|
60
|
-
console.log('Token is valid. No need to reissue.'); // Log valid token
|
|
61
|
-
resolve(this._token);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
set token(token) {
|
|
66
|
-
this._token = token;
|
|
67
|
-
console.log('Token set.');
|
|
68
|
-
localStorage.setItem(this._lsKey, token);
|
|
69
|
-
this._decoded = jwtService.decodeToken(this._token);
|
|
70
|
-
}
|
|
71
|
-
deleteToken() {
|
|
72
|
-
localStorage.removeItem(this._lsKey);
|
|
73
|
-
}
|
|
74
|
-
isLoggedIn() {
|
|
75
|
-
return this.token ? true : false;
|
|
76
|
-
}
|
|
77
|
-
get profile() {
|
|
78
|
-
return this._decoded;
|
|
79
|
-
}
|
|
80
|
-
setProfile(decodedData) {
|
|
81
|
-
this._decoded = decodedData;
|
|
82
|
-
this.decodedReady.next(decodedData); // Emit the new value when profile is set
|
|
83
|
-
console.log(this.decodedReady);
|
|
84
|
-
}
|
|
85
|
-
get decodedReady$() {
|
|
86
|
-
return this.decodedReady.asObservable();
|
|
87
|
-
}
|
|
88
|
-
get token() {
|
|
89
|
-
return this._token;
|
|
90
|
-
}
|
|
91
|
-
get admin() {
|
|
92
|
-
return this.profile.permission == 1;
|
|
93
|
-
}
|
|
94
|
-
get isLoggedInObservable() {
|
|
95
|
-
return this._loggedInObservable;
|
|
96
|
-
}
|
|
97
|
-
logout() {
|
|
98
|
-
return new Promise((resolve, reject) => {
|
|
99
|
-
this.http.delete(this.config.apiProtocol + this.config.api + '/token/' + this._token).subscribe((response) => {
|
|
100
|
-
this._token = null;
|
|
101
|
-
localStorage.removeItem(this._lsKey);
|
|
102
|
-
resolve(this.config.login);
|
|
103
|
-
}, error => {
|
|
104
|
-
// If the API call fails (e.g. token already invalid/expired), still clear local state
|
|
105
|
-
console.warn('Logout API call failed, clearing local token anyway', error);
|
|
106
|
-
this._token = null;
|
|
107
|
-
localStorage.removeItem(this._lsKey);
|
|
108
|
-
resolve(this.config.login);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
114
|
-
MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, providedIn: 'root' });
|
|
115
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, decorators: [{
|
|
116
|
-
type: Injectable,
|
|
117
|
-
args: [{
|
|
118
|
-
providedIn: 'root'
|
|
119
|
-
}]
|
|
120
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
121
|
-
type: Inject,
|
|
122
|
-
args: [MembrsConfigService]
|
|
123
|
-
}] }]; } });
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZW1icnMvc3JjL2xpYi9tZW1icnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0FBT3pDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLFlBQW9CLElBQWdCLEVBQXVDLE1BQW9CO1FBQTNFLFNBQUksR0FBSixJQUFJLENBQVk7UUFBdUMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUx4RixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBRXJELFdBQU0sR0FBVyxRQUFRLENBQUM7UUFDMUIsd0JBQW1CLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBSXhFLG9DQUFvQztRQUNwQyx3RUFBd0U7UUFDeEUsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQy9DO0lBRUgsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFjO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUV4RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lB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QU0sQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1Qsc0ZBQXNGO2dCQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzsyR0EvSFUsYUFBYSw0Q0FVc0IsbUJBQW1COytHQVZ0RCxhQUFhLGNBSlosTUFBTTs0RkFJUCxhQUFhO2tCQUx6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBYXdDLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IE1lbWJyc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWVtYnJzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuY29uc3Qgand0U2VydmljZSA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKClcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cblxuZXhwb3J0IGNsYXNzIE1lbWJyc1NlcnZpY2Uge1xuXG4gIF90b2tlbjogc3RyaW5nO1xuICBfZGVjb2RlZDogYW55O1xuXG4gIHB1YmxpYyBkZWNvZGVkUmVhZHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgX2xzS2V5OiBzdHJpbmcgPSAnbWVtYnJzJztcbiAgX2xvZ2dlZEluT2JzZXJ2YWJsZTogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoTWVtYnJzQ29uZmlnU2VydmljZSkgcHJpdmF0ZSBjb25maWc6IE1lbWJyc0NvbmZpZykge1xuXG4gICAgLy8gY29uc29sZS5sb2coJ21lbWJycyBjb25zdHJ1Y3RvcicpXG4gICAgLy8gaWYgdGhlIHRva2VuIGV4aXN0cyBpbiBsb2NhbCBzdG9yYWdlLCByZXRyaWV2ZSBpdCBiYWNrIHRvIHRoZSBzZXJ2aWNlXG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fbHNLZXkpKXtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9sc0tleSlcbiAgICB9XG4gIFxuICB9XG5cbiAgcmVpc3N1ZSh0b2tlbj86IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKCdSZWlzc3VpbmcgdG9rZW4uLi4nKTsgLy8gTG9nIGZ1bmN0aW9uIGVudHJ5XG4gICAgXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdG9rZW4gJiYgIXRoaXMuX3Rva2VuKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyB0b2tlbiBwcm92aWRlZCBhbmQgbm8gdG9rZW4gZm91bmQuJyk7IC8vIExvZyBtaXNzaW5nIHRva2VuXG4gICAgICAgIHJlamVjdCgnTk9UX0xPR0dFRF9JTicpO1xuICAgICAgfVxuICBcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVG9rZW4gcHJvdmlkZWQ6ICR7dG9rZW59YCk7IC8vIExvZyBwcm92aWRlZCB0b2tlblxuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgICB9XG4gIFxuICAgICAgLy8gY2hlY2sgc3RvcmVkIHRva2VuIGhhcyBub3QgZXhwaXJlZCwgb3IgbmVlZHMgdG8gYmUgcmVpc3N1ZWQgc29vblxuICAgICAgdmFyIHJlaXNzdWVJbiA9IHRoaXMuX2RlY29kZWQuZXhwIC0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIFxuICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWRcbiAgICAgIGlmIChyZWlzc3VlSW4gPCAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiBoYXMgZXhwaXJlZC4nKTsgLy8gTG9nIGV4cGlyZWQgdG9rZW5cbiAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICB9XG4gIFxuICAgICAgLy8gdG9rZW4gZXhwaXJpbmcgc29vblxuICAgICAgaWYgKHJlaXNzdWVJbiA8IDMwMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gZXhwaXJpbmcgc29vbi4gUmVpc3N1aW5nLi4uJyk7IC8vIExvZyBpbW1pbmVudCBleHBpcmF0aW9uXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmFwaVByb3RvY29sICsgdGhpcy5jb25maWcuYXBpICsgJy90b2tlbi8nICsgdGhpcy5fdG9rZW4sIHt9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50b2tlbikge1xuICAgICAgICAgICAgICB0aGlzLnRva2VuID0gcmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlZEluT2JzZXJ2YWJsZS5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gc3VjY2Vzc2Z1bGx5IHJlaXNzdWVkLicpOyAvLyBMb2cgc3VjY2Vzc1xuICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX3Rva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gcmVpc3N1ZSB0b2tlbi4nKTsgLy8gTG9nIGZhaWx1cmVcbiAgICAgICAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZWlzc3VpbmcgdG9rZW46JywgZXJyb3IpOyAvLyBMb2cgZXJyb3IgZGV0YWlsc1xuICAgICAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5PYnNlcnZhYmxlLm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiBpcyB2YWxpZC4gTm8gbmVlZCB0byByZWlzc3VlLicpOyAvLyBMb2cgdmFsaWQgdG9rZW5cbiAgICAgICAgcmVzb2x2ZSh0aGlzLl90b2tlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgXG5cbiAgc2V0IHRva2VuKHRva2VuKXtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuXG4gICAgY29uc29sZS5sb2coJ1Rva2VuIHNldC4nKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9sc0tleSwgdG9rZW4pXG4gICAgdGhpcy5fZGVjb2RlZCA9IGp3dFNlcnZpY2UuZGVjb2RlVG9rZW4odGhpcy5fdG9rZW4pXG4gIH1cblxuICBkZWxldGVUb2tlbigpe1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2xzS2V5KVxuICB9XG5cbiAgaXNMb2dnZWRJbigpe1xuICAgIHJldHVybiB0aGlzLnRva2VuID8gdHJ1ZSA6IGZhbHNlXG4gIH1cblxuICBnZXQgcHJvZmlsZSgpe1xuICAgIHJldHVybiB0aGlzLl9kZWNvZGVkXG4gIH1cblxuICBzZXRQcm9maWxlKGRlY29kZWREYXRhKSB7XG4gICAgdGhpcy5fZGVjb2RlZCA9IGRlY29kZWREYXRhO1xuICAgIHRoaXMuZGVjb2RlZFJlYWR5Lm5leHQoZGVjb2RlZERhdGEpOyAvLyBFbWl0IHRoZSBuZXcgdmFsdWUgd2hlbiBwcm9maWxlIGlzIHNldFxuICAgIGNvbnNvbGUubG9nKHRoaXMuZGVjb2RlZFJlYWR5KTtcbiAgfVxuXG4gIGdldCBkZWNvZGVkUmVhZHkkKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZWRSZWFkeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b2tlbigpe1xuICAgIHJldHVybiB0aGlzLl90b2tlblxuICB9XG5cbiAgZ2V0IGFkbWluICgpe1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGUucGVybWlzc2lvbiA9PSAxXG4gIH1cblxuICBnZXQgaXNMb2dnZWRJbk9ic2VydmFibGUoKXtcbiAgICByZXR1cm4gdGhpcy5fbG9nZ2VkSW5PYnNlcnZhYmxlXG4gIH1cbiAgXG4gIGxvZ291dCgpe1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgdGhpcy5odHRwLmRlbGV0ZSh0aGlzLmNvbmZpZy5hcGlQcm90b2NvbCArIHRoaXMuY29uZmlnLmFwaSArICcvdG9rZW4vJyArIHRoaXMuX3Rva2VuKS5zdWJzY3JpYmUoKHJlc3BvbnNlOmFueSk9PntcbiAgICAgICAgdGhpcy5fdG9rZW4gPSBudWxsO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSk7XG4gICAgICAgIHJlc29sdmUodGhpcy5jb25maWcubG9naW4pO1xuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAvLyBJZiB0aGUgQVBJIGNhbGwgZmFpbHMgKGUuZy4gdG9rZW4gYWxyZWFkeSBpbnZhbGlkL2V4cGlyZWQpLCBzdGlsbCBjbGVhciBsb2NhbCBzdGF0ZVxuICAgICAgICBjb25zb2xlLndhcm4oJ0xvZ291dCBBUEkgY2FsbCBmYWlsZWQsIGNsZWFyaW5nIGxvY2FsIHRva2VuIGFueXdheScsIGVycm9yKTtcbiAgICAgICAgdGhpcy5fdG9rZW4gPSBudWxsO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSk7XG4gICAgICAgIHJlc29sdmUodGhpcy5jb25maWcubG9naW4pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG59XG4iXX0=
|
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
|
|
3
|
-
import * as i1$1 from '@auth0/angular-jwt';
|
|
4
|
-
import { JwtHelperService, JwtModule } from '@auth0/angular-jwt';
|
|
5
|
-
import { BehaviorSubject, from, throwError } from 'rxjs';
|
|
6
|
-
import * as i1 from '@angular/common/http';
|
|
7
|
-
import { HttpClientModule } from '@angular/common/http';
|
|
8
|
-
import { CommonModule } from '@angular/common';
|
|
9
|
-
import * as i3 from '@uirouter/angular';
|
|
10
|
-
import { Transition, UIRouter, UIRouterModule } from '@uirouter/angular';
|
|
11
|
-
import { switchMap, catchError, finalize, tap } from 'rxjs/operators';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* This is not a real service, but it looks like it from the outside.
|
|
15
|
-
* It's just an InjectionTToken used to import the config object, provided from the outside
|
|
16
|
-
*/
|
|
17
|
-
const MembrsConfigService = new InjectionToken("MembrsConfig");
|
|
18
|
-
|
|
19
|
-
const jwtService = new JwtHelperService();
|
|
20
|
-
class MembrsService {
|
|
21
|
-
constructor(http, config) {
|
|
22
|
-
this.http = http;
|
|
23
|
-
this.config = config;
|
|
24
|
-
this.decodedReady = new BehaviorSubject(null);
|
|
25
|
-
this._lsKey = 'membrs';
|
|
26
|
-
this._loggedInObservable = new BehaviorSubject(false);
|
|
27
|
-
// console.log('membrs constructor')
|
|
28
|
-
// if the token exists in local storage, retrieve it back to the service
|
|
29
|
-
if (localStorage.getItem(this._lsKey)) {
|
|
30
|
-
this.token = localStorage.getItem(this._lsKey);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
reissue(token) {
|
|
34
|
-
console.log('Reissuing token...'); // Log function entry
|
|
35
|
-
return new Promise((resolve, reject) => {
|
|
36
|
-
if (!token && !this._token) {
|
|
37
|
-
console.log('No token provided and no token found.'); // Log missing token
|
|
38
|
-
reject('NOT_LOGGED_IN');
|
|
39
|
-
}
|
|
40
|
-
if (token) {
|
|
41
|
-
console.log(`Token provided: ${token}`); // Log provided token
|
|
42
|
-
this.token = token;
|
|
43
|
-
}
|
|
44
|
-
// check stored token has not expired, or needs to be reissued soon
|
|
45
|
-
var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
|
|
46
|
-
// token has expired
|
|
47
|
-
if (reissueIn < 0) {
|
|
48
|
-
console.log('Token has expired.'); // Log expired token
|
|
49
|
-
reject('NOT_LOGGED_IN');
|
|
50
|
-
}
|
|
51
|
-
// token expiring soon
|
|
52
|
-
if (reissueIn < 300) {
|
|
53
|
-
console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
|
|
54
|
-
this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
|
|
55
|
-
if (response.token) {
|
|
56
|
-
this.token = response.token;
|
|
57
|
-
this._loggedInObservable.next(true);
|
|
58
|
-
console.log('Token successfully reissued.'); // Log success
|
|
59
|
-
resolve(this._token);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
console.log('Failed to reissue token.'); // Log failure
|
|
63
|
-
reject('NOT_LOGGED_IN');
|
|
64
|
-
}
|
|
65
|
-
}, (error) => {
|
|
66
|
-
console.log('Error reissuing token:', error); // Log error details
|
|
67
|
-
reject('NOT_LOGGED_IN');
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
this._loggedInObservable.next(true);
|
|
72
|
-
console.log('Token is valid. No need to reissue.'); // Log valid token
|
|
73
|
-
resolve(this._token);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
set token(token) {
|
|
78
|
-
this._token = token;
|
|
79
|
-
console.log('Token set.');
|
|
80
|
-
localStorage.setItem(this._lsKey, token);
|
|
81
|
-
this._decoded = jwtService.decodeToken(this._token);
|
|
82
|
-
}
|
|
83
|
-
deleteToken() {
|
|
84
|
-
localStorage.removeItem(this._lsKey);
|
|
85
|
-
}
|
|
86
|
-
isLoggedIn() {
|
|
87
|
-
return this.token ? true : false;
|
|
88
|
-
}
|
|
89
|
-
get profile() {
|
|
90
|
-
return this._decoded;
|
|
91
|
-
}
|
|
92
|
-
setProfile(decodedData) {
|
|
93
|
-
this._decoded = decodedData;
|
|
94
|
-
this.decodedReady.next(decodedData); // Emit the new value when profile is set
|
|
95
|
-
console.log(this.decodedReady);
|
|
96
|
-
}
|
|
97
|
-
get decodedReady$() {
|
|
98
|
-
return this.decodedReady.asObservable();
|
|
99
|
-
}
|
|
100
|
-
get token() {
|
|
101
|
-
return this._token;
|
|
102
|
-
}
|
|
103
|
-
get admin() {
|
|
104
|
-
return this.profile.permission == 1;
|
|
105
|
-
}
|
|
106
|
-
get isLoggedInObservable() {
|
|
107
|
-
return this._loggedInObservable;
|
|
108
|
-
}
|
|
109
|
-
logout() {
|
|
110
|
-
return new Promise((resolve, reject) => {
|
|
111
|
-
this.http.delete(this.config.apiProtocol + this.config.api + '/token/' + this._token).subscribe((response) => {
|
|
112
|
-
this._token = null;
|
|
113
|
-
localStorage.removeItem(this._lsKey);
|
|
114
|
-
resolve(this.config.login);
|
|
115
|
-
}, error => {
|
|
116
|
-
// If the API call fails (e.g. token already invalid/expired), still clear local state
|
|
117
|
-
console.warn('Logout API call failed, clearing local token anyway', error);
|
|
118
|
-
this._token = null;
|
|
119
|
-
localStorage.removeItem(this._lsKey);
|
|
120
|
-
resolve(this.config.login);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
126
|
-
MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, providedIn: 'root' });
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, decorators: [{
|
|
128
|
-
type: Injectable,
|
|
129
|
-
args: [{
|
|
130
|
-
providedIn: 'root'
|
|
131
|
-
}]
|
|
132
|
-
}], ctorParameters: function () {
|
|
133
|
-
return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
134
|
-
type: Inject,
|
|
135
|
-
args: [MembrsConfigService]
|
|
136
|
-
}] }];
|
|
137
|
-
} });
|
|
138
|
-
|
|
139
|
-
function routerConfigFn(router, injector) {
|
|
140
|
-
const transitionService = router.transitionService;
|
|
141
|
-
const stateService = router.stateService;
|
|
142
|
-
const config = injector.get(MembrsConfigService);
|
|
143
|
-
const membrsService = injector.get(MembrsService);
|
|
144
|
-
stateService.defaultErrorHandler(function (error) {
|
|
145
|
-
if (error.detail == 'NOT_LOGGED_IN') {
|
|
146
|
-
membrsService.deleteToken();
|
|
147
|
-
window.location.href = config.login;
|
|
148
|
-
}
|
|
149
|
-
if (error.detail == 'INSUFFICIENT_PERMISSIONS')
|
|
150
|
-
stateService.go(config.defaultState);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function retrieveToken() {
|
|
155
|
-
// console.log('retrieve from ls')
|
|
156
|
-
return localStorage.getItem('membrs');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const validateResolve = {
|
|
160
|
-
token: 'reissue',
|
|
161
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
162
|
-
resolveFn: validateResolveFn
|
|
163
|
-
};
|
|
164
|
-
const reissueResolve = {
|
|
165
|
-
token: 'reissue',
|
|
166
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
167
|
-
resolveFn: reissueResolveFn
|
|
168
|
-
};
|
|
169
|
-
const reissueState = {
|
|
170
|
-
name: 'reissue',
|
|
171
|
-
url: '/reissue?token',
|
|
172
|
-
views: {},
|
|
173
|
-
resolve: [
|
|
174
|
-
reissueResolve
|
|
175
|
-
]
|
|
176
|
-
};
|
|
177
|
-
function reissueResolveFn(transition, router, membrsService, membrsConfig) {
|
|
178
|
-
//console.log(membrsService)
|
|
179
|
-
return new Promise((resolve, reject) => {
|
|
180
|
-
// console.log('reissue promise resolve')
|
|
181
|
-
// console.log(transition.params().token)
|
|
182
|
-
membrsService.reissue(transition.params().token).then((response) => {
|
|
183
|
-
if (localStorage.getItem('redirectUrlAfterLogin')) {
|
|
184
|
-
const redirect = localStorage.getItem('redirectUrlAfterLogin');
|
|
185
|
-
localStorage.removeItem('redirectUrlAfterLogin');
|
|
186
|
-
window.location.pathname = redirect;
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
|
|
190
|
-
}
|
|
191
|
-
reject();
|
|
192
|
-
}).catch(error => {
|
|
193
|
-
//console.log('error in reissue resolve')
|
|
194
|
-
//console.log(error)
|
|
195
|
-
//window.location.href = environment.login
|
|
196
|
-
reject(error);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
function validateResolveFn(transition, router, membrsService, membrsConfig) {
|
|
201
|
-
//console.log(membrsService)
|
|
202
|
-
return new Promise((resolve, reject) => {
|
|
203
|
-
// console.log('validate promise resolve')
|
|
204
|
-
membrsService.reissue().then((response) => {
|
|
205
|
-
if (localStorage.getItem('redirectUrlAfterLogin')) {
|
|
206
|
-
const redirect = localStorage.getItem('redirectUrlAfterLogin');
|
|
207
|
-
localStorage.removeItem('redirectUrlAfterLogin');
|
|
208
|
-
window.location.pathname = redirect;
|
|
209
|
-
}
|
|
210
|
-
resolve(null);
|
|
211
|
-
}).catch(error => {
|
|
212
|
-
localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
|
|
213
|
-
window.location.href = membrsConfig.login;
|
|
214
|
-
reject(error);
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
function jwtOptionsFactory(config) {
|
|
219
|
-
// console.log('jwt options factory')
|
|
220
|
-
// console.log(config)
|
|
221
|
-
return {
|
|
222
|
-
tokenGetter: () => {
|
|
223
|
-
console.log('token getter', localStorage.getItem('membrs'));
|
|
224
|
-
return localStorage.getItem('membrs');
|
|
225
|
-
},
|
|
226
|
-
allowedDomains: [config.api]
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
/** The top level state(s) */
|
|
230
|
-
const STATES = [
|
|
231
|
-
reissueState
|
|
232
|
-
];
|
|
233
|
-
class MembrsModule {
|
|
234
|
-
static forRoot(config) {
|
|
235
|
-
const moduleProviders = UIRouterModule.forChild({
|
|
236
|
-
states: STATES,
|
|
237
|
-
config: routerConfigFn
|
|
238
|
-
}).providers;
|
|
239
|
-
moduleProviders.push(JwtModule.forRoot({
|
|
240
|
-
config: {
|
|
241
|
-
tokenGetter: retrieveToken,
|
|
242
|
-
allowedDomains: []
|
|
243
|
-
}
|
|
244
|
-
}).providers);
|
|
245
|
-
moduleProviders.push(MembrsService);
|
|
246
|
-
moduleProviders.push({ provide: MembrsConfigService, useValue: config });
|
|
247
|
-
return {
|
|
248
|
-
ngModule: MembrsModule,
|
|
249
|
-
providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
254
|
-
MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
255
|
-
HttpClientModule,
|
|
256
|
-
JwtModule
|
|
257
|
-
// JwtModule.forRoot({
|
|
258
|
-
// config: {
|
|
259
|
-
// tokenGetter: retrieveToken
|
|
260
|
-
// }
|
|
261
|
-
// })
|
|
262
|
-
// UIRouterModule.forChild({
|
|
263
|
-
// states: STATES,
|
|
264
|
-
// config: routerConfigFn,
|
|
265
|
-
// }),
|
|
266
|
-
// JwtModule.forRoot({})
|
|
267
|
-
] });
|
|
268
|
-
MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
269
|
-
HttpClientModule,
|
|
270
|
-
JwtModule
|
|
271
|
-
// JwtModule.forRoot({
|
|
272
|
-
// config: {
|
|
273
|
-
// tokenGetter: retrieveToken
|
|
274
|
-
// }
|
|
275
|
-
// })
|
|
276
|
-
// UIRouterModule.forChild({
|
|
277
|
-
// states: STATES,
|
|
278
|
-
// config: routerConfigFn,
|
|
279
|
-
// }),
|
|
280
|
-
// JwtModule.forRoot({})
|
|
281
|
-
] });
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, decorators: [{
|
|
283
|
-
type: NgModule,
|
|
284
|
-
args: [{
|
|
285
|
-
imports: [
|
|
286
|
-
CommonModule,
|
|
287
|
-
HttpClientModule,
|
|
288
|
-
JwtModule
|
|
289
|
-
// JwtModule.forRoot({
|
|
290
|
-
// config: {
|
|
291
|
-
// tokenGetter: retrieveToken
|
|
292
|
-
// }
|
|
293
|
-
// })
|
|
294
|
-
// UIRouterModule.forChild({
|
|
295
|
-
// states: STATES,
|
|
296
|
-
// config: routerConfigFn,
|
|
297
|
-
// }),
|
|
298
|
-
// JwtModule.forRoot({})
|
|
299
|
-
]
|
|
300
|
-
}]
|
|
301
|
-
}] });
|
|
302
|
-
|
|
303
|
-
class TokenInterceptor {
|
|
304
|
-
constructor(jwtHelper, membrsService, stateService) {
|
|
305
|
-
this.jwtHelper = jwtHelper;
|
|
306
|
-
this.membrsService = membrsService;
|
|
307
|
-
this.stateService = stateService;
|
|
308
|
-
}
|
|
309
|
-
intercept(request, next) {
|
|
310
|
-
const token = localStorage.getItem("membrs");
|
|
311
|
-
if (token && this.jwtHelper.isTokenExpired(token)) {
|
|
312
|
-
console.log("Token expired. Attempting to reissue.");
|
|
313
|
-
return from(this.membrsService.reissue()).pipe(switchMap(() => {
|
|
314
|
-
const refreshedToken = localStorage.getItem("membrs");
|
|
315
|
-
if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
|
|
316
|
-
console.log("Token successfully reissued.");
|
|
317
|
-
request = request.clone({
|
|
318
|
-
setHeaders: {
|
|
319
|
-
Authorization: refreshedToken,
|
|
320
|
-
},
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
return next.handle(request);
|
|
324
|
-
}), catchError((err) => {
|
|
325
|
-
console.warn("Token refresh failed. Logging out.");
|
|
326
|
-
this.membrsService.logout();
|
|
327
|
-
this.stateService.go("");
|
|
328
|
-
return throwError(() => err);
|
|
329
|
-
}), finalize(() => {
|
|
330
|
-
// this.busyService.finished()
|
|
331
|
-
}));
|
|
332
|
-
}
|
|
333
|
-
if (token && !this.jwtHelper.isTokenExpired(token)) {
|
|
334
|
-
request = request.clone({
|
|
335
|
-
setHeaders: {
|
|
336
|
-
Authorization: token,
|
|
337
|
-
},
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
return next.handle(request).pipe(tap((event) => {
|
|
341
|
-
// If this is an HttpResponse, check for x-new-token header
|
|
342
|
-
if (event && event.type === 4 && event.headers) {
|
|
343
|
-
const newToken = event.headers.get('x-new-token');
|
|
344
|
-
if (newToken) {
|
|
345
|
-
localStorage.setItem('membrs', newToken);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}), finalize(() => {
|
|
349
|
-
// this.busyService.finished()
|
|
350
|
-
}));
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1$1.JwtHelperService }, { token: MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
354
|
-
TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor });
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
356
|
-
type: Injectable
|
|
357
|
-
}], ctorParameters: function () { return [{ type: i1$1.JwtHelperService }, { type: MembrsService }, { type: i3.StateService }]; } });
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Generated bundle index. Do not edit.
|
|
361
|
-
*/
|
|
362
|
-
|
|
363
|
-
export { MembrsModule, MembrsService, STATES, TokenInterceptor, jwtOptionsFactory, reissueResolve, reissueResolveFn, reissueState, retrieveToken, validateResolve, validateResolveFn };
|
|
364
|
-
//# sourceMappingURL=nakedcreativity-membrs-angular-helper.mjs.map
|