@dangl/angular-dangl-identity-client 4.0.0 → 4.0.1-beta0004

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/api-client.d.ts +3 -0
  2. package/dangl-angular-dangl-identity-client.d.ts +1 -0
  3. package/dangl-identity.module.d.ts +5 -0
  4. package/esm2020/api-client.mjs +482 -0
  5. package/{esm2015/dangl-angular-dangl-identity-client.js → esm2020/dangl-angular-dangl-identity-client.mjs} +0 -0
  6. package/esm2020/dangl-identity.module.mjs +21 -0
  7. package/{esm2015/interceptors/dangl-identity-request-validator.js → esm2020/interceptors/dangl-identity-request-validator.mjs} +0 -0
  8. package/esm2020/interceptors/jwt-interceptor.service.mjs +47 -0
  9. package/esm2020/messengers/authentication.messenger.mjs +83 -0
  10. package/{esm2015/models/jwt-storage.js → esm2020/models/jwt-storage.mjs} +0 -0
  11. package/{esm2015/models/user-info.js → esm2020/models/user-info.mjs} +0 -0
  12. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  13. package/esm2020/services/authentication.service.mjs +41 -0
  14. package/esm2020/services/jwt-token.service.mjs +95 -0
  15. package/fesm2015/dangl-angular-dangl-identity-client.mjs +754 -0
  16. package/fesm2015/dangl-angular-dangl-identity-client.mjs.map +1 -0
  17. package/{fesm2015/dangl-angular-dangl-identity-client.js → fesm2020/dangl-angular-dangl-identity-client.mjs} +66 -55
  18. package/fesm2020/dangl-angular-dangl-identity-client.mjs.map +1 -0
  19. package/interceptors/jwt-interceptor.service.d.ts +3 -0
  20. package/messengers/authentication.messenger.d.ts +3 -0
  21. package/package.json +21 -9
  22. package/services/authentication.service.d.ts +3 -0
  23. package/services/jwt-token.service.d.ts +3 -0
  24. package/bundles/dangl-angular-dangl-identity-client.umd.js +0 -1179
  25. package/bundles/dangl-angular-dangl-identity-client.umd.js.map +0 -1
  26. package/dangl-angular-dangl-identity-client.metadata.json +0 -1
  27. package/esm2015/api-client.js +0 -476
  28. package/esm2015/dangl-identity.module.js +0 -14
  29. package/esm2015/interceptors/jwt-interceptor.service.js +0 -43
  30. package/esm2015/messengers/authentication.messenger.js +0 -85
  31. package/esm2015/services/authentication.service.js +0 -45
  32. package/esm2015/services/jwt-token.service.js +0 -97
  33. package/fesm2015/dangl-angular-dangl-identity-client.js.map +0 -1
@@ -1,85 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ReplaySubject, Subject } from 'rxjs';
3
- import { JwtTokenService } from '../services/jwt-token.service';
4
- import { JwtHelperService } from '@auth0/angular-jwt';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../services/jwt-token.service";
7
- export class AuthenticationMessenger {
8
- constructor(jwtTokenService) {
9
- this.jwtTokenService = jwtTokenService;
10
- this.jwtHelperService = new JwtHelperService();
11
- this.isAuthenticated = new ReplaySubject(1);
12
- this.username = new ReplaySubject(1);
13
- this.email = new ReplaySubject(1);
14
- this.identiconId = new ReplaySubject(1);
15
- this.userInfo = new ReplaySubject(1);
16
- this.tokenRefreshStarted = new Subject();
17
- this.tokenRefreshFinished = new Subject();
18
- jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());
19
- jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));
20
- jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));
21
- jwtTokenService.getToken()
22
- .subscribe(token => this.refreshAuthenticationStatus(token));
23
- }
24
- refreshAuthenticationStatus(jwtToken) {
25
- if (jwtToken) {
26
- const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);
27
- if (this.lastBroadcastAccessToken === jwtToken.accessToken) {
28
- return;
29
- }
30
- this.lastBroadcastAccessToken = jwtToken.accessToken;
31
- if (isValidToken) {
32
- this.isAuthenticated.next(true);
33
- const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);
34
- this.username.next(decodedToken['name']);
35
- this.email.next(decodedToken['email']);
36
- this.identiconId.next(decodedToken['identicon_id']);
37
- const tokenClaims = {};
38
- for (const tokenProp in decodedToken) {
39
- if (decodedToken.hasOwnProperty(tokenProp)) {
40
- const property = decodedToken[tokenProp];
41
- if (typeof property === 'string') {
42
- tokenClaims[tokenProp] = property;
43
- }
44
- }
45
- }
46
- this.userInfo.next({
47
- id: decodedToken['sub'],
48
- claims: tokenClaims,
49
- deserializedToken: decodedToken,
50
- email: decodedToken['email'],
51
- identiconId: decodedToken['identicon_id'],
52
- username: decodedToken['name'],
53
- roles: decodedToken['role']
54
- });
55
- }
56
- else {
57
- this.isAuthenticated.next(false);
58
- this.jwtTokenService
59
- .refreshToken()
60
- .subscribe(() => { });
61
- }
62
- }
63
- else {
64
- if (this.lastBroadcastAccessToken === null) {
65
- return;
66
- }
67
- this.lastBroadcastAccessToken = null;
68
- this.isAuthenticated.next(false);
69
- this.username.next(null);
70
- this.email.next(null);
71
- this.identiconId.next(null);
72
- this.userInfo.next(null);
73
- }
74
- }
75
- }
76
- AuthenticationMessenger.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthenticationMessenger_Factory() { return new AuthenticationMessenger(i0.ɵɵinject(i1.JwtTokenService)); }, token: AuthenticationMessenger, providedIn: "root" });
77
- AuthenticationMessenger.decorators = [
78
- { type: Injectable, args: [{
79
- providedIn: 'root'
80
- },] }
81
- ];
82
- AuthenticationMessenger.ctorParameters = () => [
83
- { type: JwtTokenService }
84
- ];
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24ubWVzc2VuZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1kYW5nbC1pZGVudGl0eS1jbGllbnQvc3JjL21lc3NlbmdlcnMvYXV0aGVudGljYXRpb24ubWVzc2VuZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFNdEQsTUFBTSxPQUFPLHVCQUF1QjtJQWFsQyxZQUFvQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFYNUMscUJBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBR3pDLG9CQUFlLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsYUFBUSxHQUFHLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFVBQUssR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNDLGFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxQyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFHckQsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRixlQUFl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QVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7O1lBMUVGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBTlEsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy91c2VyLWluZm8nO1xyXG5pbXBvcnQgeyBKd3RUb2tlblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9qd3QtdG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xyXG5pbXBvcnQgeyBKd3RTdG9yYWdlIH0gZnJvbSAnLi4vbW9kZWxzL2p3dC1zdG9yYWdlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uTWVzc2VuZ2VyIHtcclxuXHJcbiAgcHJpdmF0ZSBqd3RIZWxwZXJTZXJ2aWNlID0gbmV3IEp3dEhlbHBlclNlcnZpY2UoKTtcclxuICBwcml2YXRlIGxhc3RCcm9hZGNhc3RBY2Nlc3NUb2tlbjogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcclxuICByZWFkb25seSB1c2VybmFtZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XHJcbiAgcmVhZG9ubHkgZW1haWwgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xyXG4gIHJlYWRvbmx5IGlkZW50aWNvbklkID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcclxuICByZWFkb25seSB1c2VySW5mbyA9IG5ldyBSZXBsYXlTdWJqZWN0PFVzZXJJbmZvPigxKTtcclxuICByZWFkb25seSB0b2tlblJlZnJlc2hTdGFydGVkID0gbmV3IFN1YmplY3QoKTtcclxuICByZWFkb25seSB0b2tlblJlZnJlc2hGaW5pc2hlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgand0VG9rZW5TZXJ2aWNlOiBKd3RUb2tlblNlcnZpY2UpIHtcclxuICAgIGp3dFRva2VuU2VydmljZS50b2tlblJlZnJlc2hTdGFydGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRva2VuUmVmcmVzaFN0YXJ0ZWQubmV4dCgpKTtcclxuICAgIGp3dFRva2VuU2VydmljZS50b2tlblJlZnJlc2hGaW5pc2hlZC5zdWJzY3JpYmUoc3VjY2Vzc2Z1bFJlZnJlc2ggPT4gdGhpcy50b2tlblJlZnJlc2hGaW5pc2hlZC5uZXh0KHN1Y2Nlc3NmdWxSZWZyZXNoKSk7XHJcbiAgICBqd3RUb2tlblNlcnZpY2UudG9rZW5TdG9yZWQuc3Vic2NyaWJlKGp3dFRva2VuID0+IHRoaXMucmVmcmVzaEF1dGhlbnRpY2F0aW9uU3RhdHVzKGp3dFRva2VuKSk7XHJcbiAgICBqd3RUb2tlblNlcnZpY2UuZ2V0VG9rZW4oKVxyXG4gICAgICAuc3Vic2NyaWJlKHRva2VuID0+IHRoaXMucmVmcmVzaEF1dGhlbnRpY2F0aW9uU3RhdHVzKHRva2VuKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hBdXRoZW50aWNhdGlvblN0YXR1cyhqd3RUb2tlbj86IEp3dFN0b3JhZ2UpIHtcclxuICAgIGlmIChqd3RUb2tlbikge1xyXG4gICAgICBjb25zdCBpc1ZhbGlkVG9rZW4gPSBqd3RUb2tlbi5leHBpcmVzQXQgPiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcclxuICAgICAgaWYgKHRoaXMubGFzdEJyb2FkY2FzdEFjY2Vzc1Rva2VuID09PSBqd3RUb2tlbi5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RCcm9hZGNhc3RBY2Nlc3NUb2tlbiA9IGp3dFRva2VuLmFjY2Vzc1Rva2VuO1xyXG4gICAgICBpZiAoaXNWYWxpZFRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmp3dEhlbHBlclNlcnZpY2UuZGVjb2RlVG9rZW4oand0VG9rZW4uYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgIHRoaXMudXNlcm5hbWUubmV4dChkZWNvZGVkVG9rZW5bJ25hbWUnXSk7XHJcbiAgICAgICAgdGhpcy5lbWFpbC5uZXh0KGRlY29kZWRUb2tlblsnZW1haWwnXSk7XHJcbiAgICAgICAgdGhpcy5pZGVudGljb25JZC5uZXh0KGRlY29kZWRUb2tlblsnaWRlbnRpY29uX2lkJ10pO1xyXG5cclxuICAgICAgICBjb25zdCB0b2tlbkNsYWltczogeyBbY2xhaW06IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCB0b2tlblByb3AgaW4gZGVjb2RlZFRva2VuKSB7XHJcbiAgICAgICAgICBpZiAoZGVjb2RlZFRva2VuLmhhc093blByb3BlcnR5KHRva2VuUHJvcCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNvZGVkVG9rZW5bdG9rZW5Qcm9wXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0b2tlbkNsYWltc1t0b2tlblByb3BdID0gcHJvcGVydHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXNlckluZm8ubmV4dCh7XHJcbiAgICAgICAgICBpZDogZGVjb2RlZFRva2VuWydzdWInXSxcclxuICAgICAgICAgIGNsYWltczogdG9rZW5DbGFpbXMsXHJcbiAgICAgICAgICBkZXNlcmlhbGl6ZWRUb2tlbjogZGVjb2RlZFRva2VuLFxyXG4gICAgICAgICAgZW1haWw6IGRlY29kZWRUb2tlblsnZW1haWwnXSxcclxuICAgICAgICAgIGlkZW50aWNvbklkOiBkZWNvZGVkVG9rZW5bJ2lkZW50aWNvbl9pZCddLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IGRlY29kZWRUb2tlblsnbmFtZSddLFxyXG4gICAgICAgICAgcm9sZXM6IGRlY29kZWRUb2tlblsncm9sZSddXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5qd3RUb2tlblNlcnZpY2VcclxuICAgICAgICAgIC5yZWZyZXNoVG9rZW4oKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sYXN0QnJvYWRjYXN0QWNjZXNzVG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYXN0QnJvYWRjYXN0QWNjZXNzVG9rZW4gPSBudWxsO1xyXG4gICAgICB0aGlzLmlzQXV0aGVudGljYXRlZC5uZXh0KGZhbHNlKTtcclxuICAgICAgdGhpcy51c2VybmFtZS5uZXh0KG51bGwpO1xyXG4gICAgICB0aGlzLmVtYWlsLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuaWRlbnRpY29uSWQubmV4dChudWxsKTtcclxuICAgICAgdGhpcy51c2VySW5mby5uZXh0KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,45 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { DanglIdentityClient } from '../api-client';
3
- import { of } from 'rxjs';
4
- import { map, catchError } from 'rxjs/operators';
5
- import { JwtTokenService } from './jwt-token.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../api-client";
8
- import * as i2 from "./jwt-token.service";
9
- export class AuthenticationService {
10
- constructor(danglIdentityClient, jwtTokenService) {
11
- this.danglIdentityClient = danglIdentityClient;
12
- this.jwtTokenService = jwtTokenService;
13
- }
14
- loginWithToken(identifier, password) {
15
- return this.danglIdentityClient
16
- .loginAndReturnToken({
17
- identifier: identifier,
18
- password: password
19
- })
20
- .pipe(map(r => this.storeJwtTokenIfValid(r)), catchError(e => of(false)));
21
- }
22
- storeJwtTokenIfValid(token) {
23
- if (!token.accessToken
24
- || !token.refreshToken
25
- || !token.expiresIn) {
26
- return false;
27
- }
28
- this.jwtTokenService.storeToken(token);
29
- return true;
30
- }
31
- logout() {
32
- this.jwtTokenService.deleteToken();
33
- }
34
- }
35
- AuthenticationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthenticationService_Factory() { return new AuthenticationService(i0.ɵɵinject(i1.DanglIdentityClient), i0.ɵɵinject(i2.JwtTokenService)); }, token: AuthenticationService, providedIn: "root" });
36
- AuthenticationService.decorators = [
37
- { type: Injectable, args: [{
38
- providedIn: 'root'
39
- },] }
40
- ];
41
- AuthenticationService.ctorParameters = () => [
42
- { type: DanglIdentityClient },
43
- { type: JwtTokenService }
44
- ];
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZGFuZ2wtaWRlbnRpdHktY2xpZW50L3NyYy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS3RELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFBb0IsbUJBQXdDLEVBQ2xELGVBQWdDO1FBRHRCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQUksQ0FBQztJQUUvQyxjQUFjLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxtQkFBbUI7YUFDNUIsbUJBQW1CLENBQUM7WUFDbkIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBdUI7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2VBQ2pCLENBQUMsS0FBSyxDQUFDLFlBQVk7ZUFDbkIsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDOzs7O1lBOUJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBUFEsbUJBQW1CO1lBR25CLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhbmdsSWRlbnRpdHlDbGllbnQsIFRva2VuUmVzcG9uc2VHZXQgfSBmcm9tICcuLi9hcGktY2xpZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBKd3RUb2tlblNlcnZpY2UgfSBmcm9tICcuL2p3dC10b2tlbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFuZ2xJZGVudGl0eUNsaWVudDogRGFuZ2xJZGVudGl0eUNsaWVudCxcclxuICAgIHByaXZhdGUgand0VG9rZW5TZXJ2aWNlOiBKd3RUb2tlblNlcnZpY2UpIHsgfVxyXG5cclxuICBsb2dpbldpdGhUb2tlbihpZGVudGlmaWVyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmRhbmdsSWRlbnRpdHlDbGllbnRcclxuICAgICAgLmxvZ2luQW5kUmV0dXJuVG9rZW4oe1xyXG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXHJcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKG1hcChyID0+IHRoaXMuc3RvcmVKd3RUb2tlbklmVmFsaWQocikpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZSA9PiBvZihmYWxzZSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmVKd3RUb2tlbklmVmFsaWQodG9rZW46IFRva2VuUmVzcG9uc2VHZXQpOiBib29sZWFuIHtcclxuICAgIGlmICghdG9rZW4uYWNjZXNzVG9rZW5cclxuICAgICAgfHwgIXRva2VuLnJlZnJlc2hUb2tlblxyXG4gICAgICB8fCAhdG9rZW4uZXhwaXJlc0luKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuand0VG9rZW5TZXJ2aWNlLnN0b3JlVG9rZW4odG9rZW4pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLmp3dFRva2VuU2VydmljZS5kZWxldGVUb2tlbigpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,97 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { DanglIdentityClient } from "../api-client";
3
- import { Subject, of, ReplaySubject } from "rxjs";
4
- import { map, tap, first } from "rxjs/operators";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../api-client";
7
- export class JwtTokenService {
8
- constructor(danglIdentityClient) {
9
- this.danglIdentityClient = danglIdentityClient;
10
- this.storage_identifier = "dangl_identity_integration_jwt_token";
11
- this.isRefreshing = false;
12
- this.refreshTokenSource = new Subject();
13
- this.tokenStoredSource = new ReplaySubject(1);
14
- this.tokenStored = this.tokenStoredSource.asObservable();
15
- this.tokenRefreshStartedSource = new Subject();
16
- this.tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();
17
- this.tokenRefreshFinishedSource = new Subject();
18
- this.tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();
19
- }
20
- deleteToken() {
21
- localStorage.removeItem(this.storage_identifier);
22
- this.tokenStoredSource.next(null);
23
- }
24
- storeCustomToken(tokenToStore) {
25
- localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));
26
- this.tokenStoredSource.next(tokenToStore);
27
- }
28
- storeToken(token) {
29
- const tokenToStore = this.transformTokenResponse(token);
30
- localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));
31
- this.tokenStoredSource.next(tokenToStore);
32
- }
33
- getTokenFromStorage() {
34
- const storedString = localStorage.getItem(this.storage_identifier);
35
- if (storedString) {
36
- const storedToken = JSON.parse(storedString);
37
- return storedToken;
38
- }
39
- return null;
40
- }
41
- refreshToken() {
42
- if (this.isRefreshing) {
43
- return this.refreshTokenSource.pipe(first());
44
- }
45
- this.isRefreshing = true;
46
- this.tokenRefreshStartedSource.next();
47
- const refreshToken = this.getTokenFromStorage().refreshToken;
48
- if (!refreshToken) {
49
- this.isRefreshing = false;
50
- return of(null);
51
- }
52
- this.danglIdentityClient
53
- .refreshToken({
54
- refreshToken: refreshToken,
55
- })
56
- .pipe(tap((r) => this.storeToken(r)), map((r) => this.transformTokenResponse(r)))
57
- .subscribe((refreshTokenResponse) => {
58
- this.isRefreshing = false;
59
- this.tokenRefreshFinishedSource.next(true);
60
- this.refreshTokenSource.next(refreshTokenResponse);
61
- }, (error) => {
62
- this.isRefreshing = false;
63
- this.tokenRefreshFinishedSource.next(false);
64
- this.refreshTokenSource.next(null);
65
- console.error("Internal error while refreshing Dangl.Identity token", error);
66
- });
67
- return this.refreshTokenSource.pipe(first());
68
- }
69
- getToken() {
70
- const token = this.getTokenFromStorage();
71
- if (!token) {
72
- return of(null);
73
- }
74
- const isValidToken = token.expiresAt > new Date().getTime() / 1000;
75
- if (isValidToken) {
76
- return of(token);
77
- }
78
- return this.refreshToken();
79
- }
80
- transformTokenResponse(token) {
81
- return {
82
- accessToken: token.accessToken,
83
- refreshToken: token.refreshToken,
84
- expiresAt: new Date().getTime() / 1000 + token.expiresIn,
85
- };
86
- }
87
- }
88
- JwtTokenService.ɵprov = i0.ɵɵdefineInjectable({ factory: function JwtTokenService_Factory() { return new JwtTokenService(i0.ɵɵinject(i1.DanglIdentityClient)); }, token: JwtTokenService, providedIn: "root" });
89
- JwtTokenService.decorators = [
90
- { type: Injectable, args: [{
91
- providedIn: "root",
92
- },] }
93
- ];
94
- JwtTokenService.ctorParameters = () => [
95
- { type: DanglIdentityClient }
96
- ];
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXRva2VuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWRhbmdsLWlkZW50aXR5LWNsaWVudC9zcmMvc2VydmljZXMvand0LXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFjLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTdELE1BQU0sT0FBTyxlQUFlO0lBVzFCLFlBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBVjNDLHVCQUFrQixHQUFHLHNDQUFzQyxDQUFDO1FBQ3JFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDL0Msc0JBQWlCLEdBQUcsSUFBSSxhQUFhLENBQWEsQ0FBQyxDQUFDLENBQUM7UUFDN0QsZ0JBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsOEJBQXlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUQsK0JBQTBCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUM1RCx5QkFBb0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFUCxDQUFDO0lBRWhFLFdBQVc7UUFDVCxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FB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UUFBUTtRQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBYSxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbkUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBdUI7UUFDcEQsT0FBTztZQUNMLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTO1NBQ3pELENBQUM7SUFDSixDQUFDOzs7O1lBcEdGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBUlEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERhbmdsSWRlbnRpdHlDbGllbnQsIFRva2VuUmVzcG9uc2VHZXQgfSBmcm9tIFwiLi4vYXBpLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBKd3RTdG9yYWdlIH0gZnJvbSBcIi4uL21vZGVscy9qd3Qtc3RvcmFnZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgdGFwLCBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1lc3NlbmdlciB9IGZyb20gXCIuLi9tZXNzZW5nZXJzL2F1dGhlbnRpY2F0aW9uLm1lc3NlbmdlclwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSnd0VG9rZW5TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VfaWRlbnRpZmllciA9IFwiZGFuZ2xfaWRlbnRpdHlfaW50ZWdyYXRpb25fand0X3Rva2VuXCI7XHJcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlZnJlc2hUb2tlblNvdXJjZSA9IG5ldyBTdWJqZWN0PEp3dFN0b3JhZ2U+KCk7XHJcbiAgcHJpdmF0ZSB0b2tlblN0b3JlZFNvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PEp3dFN0b3JhZ2U+KDEpO1xyXG4gIHRva2VuU3RvcmVkID0gdGhpcy50b2tlblN0b3JlZFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIHRva2VuUmVmcmVzaFN0YXJ0ZWRTb3VyY2UgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRva2VuUmVmcmVzaFN0YXJ0ZWQgPSB0aGlzLnRva2VuUmVmcmVzaFN0YXJ0ZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSB0b2tlblJlZnJlc2hGaW5pc2hlZFNvdXJjZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgdG9rZW5SZWZyZXNoRmluaXNoZWQgPSB0aGlzLnRva2VuUmVmcmVzaEZpbmlzaGVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhbmdsSWRlbnRpdHlDbGllbnQ6IERhbmdsSWRlbnRpdHlDbGllbnQpIHt9XHJcblxyXG4gIGRlbGV0ZVRva2VuKCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5zdG9yYWdlX2lkZW50aWZpZXIpO1xyXG4gICAgdGhpcy50b2tlblN0b3JlZFNvdXJjZS5uZXh0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgc3RvcmVDdXN0b21Ub2tlbih0b2tlblRvU3RvcmU6IEp3dFN0b3JhZ2UpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZV9pZGVudGlmaWVyLCBKU09OLnN0cmluZ2lmeSh0b2tlblRvU3RvcmUpKTtcclxuICAgIHRoaXMudG9rZW5TdG9yZWRTb3VyY2UubmV4dCh0b2tlblRvU3RvcmUpO1xyXG4gIH1cclxuXHJcbiAgc3RvcmVUb2tlbih0b2tlbjogVG9rZW5SZXNwb25zZUdldCkge1xyXG4gICAgY29uc3QgdG9rZW5Ub1N0b3JlID0gdGhpcy50cmFuc2Zvcm1Ub2tlblJlc3BvbnNlKHRva2VuKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZV9pZGVudGlmaWVyLCBKU09OLnN0cmluZ2lmeSh0b2tlblRvU3RvcmUpKTtcclxuICAgIHRoaXMudG9rZW5TdG9yZWRTb3VyY2UubmV4dCh0b2tlblRvU3RvcmUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9rZW5Gcm9tU3RvcmFnZSgpOiBKd3RTdG9yYWdlIHtcclxuICAgIGNvbnN0IHN0b3JlZFN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZV9pZGVudGlmaWVyKTtcclxuICAgIGlmIChzdG9yZWRTdHJpbmcpIHtcclxuICAgICAgY29uc3Qgc3RvcmVkVG9rZW4gPSA8Snd0U3RvcmFnZT5KU09OLnBhcnNlKHN0b3JlZFN0cmluZyk7XHJcbiAgICAgIHJldHVybiBzdG9yZWRUb2tlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8Snd0U3RvcmFnZT4ge1xyXG4gICAgaWYgKHRoaXMuaXNSZWZyZXNoaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlblNvdXJjZS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy50b2tlblJlZnJlc2hTdGFydGVkU291cmNlLm5leHQoKTtcclxuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuZ2V0VG9rZW5Gcm9tU3RvcmFnZSgpLnJlZnJlc2hUb2tlbjtcclxuXHJcbiAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xyXG4gICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gb2Y8Snd0U3RvcmFnZT4obnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYW5nbElkZW50aXR5Q2xpZW50XHJcbiAgICAgIC5yZWZyZXNoVG9rZW4oe1xyXG4gICAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaFRva2VuLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKHIpID0+IHRoaXMuc3RvcmVUb2tlbihyKSksXHJcbiAgICAgICAgbWFwKChyKSA9PiB0aGlzLnRyYW5zZm9ybVRva2VuUmVzcG9uc2UocikpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVmcmVzaFRva2VuUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRva2VuUmVmcmVzaEZpbmlzaGVkU291cmNlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblNvdXJjZS5uZXh0KHJlZnJlc2hUb2tlblJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9rZW5SZWZyZXNoRmluaXNoZWRTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblNvdXJjZS5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgXCJJbnRlcm5hbCBlcnJvciB3aGlsZSByZWZyZXNoaW5nIERhbmdsLklkZW50aXR5IHRva2VuXCIsXHJcbiAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5Tb3VyY2UucGlwZShmaXJzdCgpKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IE9ic2VydmFibGU8Snd0U3RvcmFnZT4ge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuRnJvbVN0b3JhZ2UoKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgcmV0dXJuIG9mPEp3dFN0b3JhZ2U+KG51bGwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNWYWxpZFRva2VuID0gdG9rZW4uZXhwaXJlc0F0ID4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xyXG4gICAgaWYgKGlzVmFsaWRUb2tlbikge1xyXG4gICAgICByZXR1cm4gb2YodG9rZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zZm9ybVRva2VuUmVzcG9uc2UodG9rZW46IFRva2VuUmVzcG9uc2VHZXQpOiBKd3RTdG9yYWdlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbi5hY2Nlc3NUb2tlbixcclxuICAgICAgcmVmcmVzaFRva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4sXHJcbiAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwICsgdG9rZW4uZXhwaXJlc0luLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"dangl-angular-dangl-identity-client.js","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["/* tslint:disable */\r\n/* eslint-disable */\r\n//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v13.13.2.0 (NJsonSchema v10.5.2.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(<any>response_);\r\n } catch (e) {\r\n return <Observable<void>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<void>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(<any>null);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(<any>null);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(<any>response_);\r\n } catch (e) {\r\n return <Observable<void>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<void>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(<any>null);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(<any>null);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(<any>response_);\r\n } catch (e) {\r\n return <Observable<TokenResponseGet>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<TokenResponseGet>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : <TokenResponseGet>JSON.parse(_responseText, this.jsonParseReviver);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : <TokenResponseGet>JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(<any>null);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(<any>response_);\r\n } catch (e) {\r\n return <Observable<TokenResponseGet>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<TokenResponseGet>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : <TokenResponseGet>JSON.parse(_responseText, this.jsonParseReviver);\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : <TokenResponseGet>JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(<any>null);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(<any>response_);\r\n } catch (e) {\r\n return <Observable<void>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<void>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(<any>null);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : <ApiError>JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(<any>null);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(<any>response_);\r\n } catch (e) {\r\n return <Observable<void>><any>_observableThrow(e);\r\n }\r\n } else\r\n return <Observable<void>><any>_observableThrow(response_);\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (<any>response).error instanceof Blob ? (<any>response).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(<any>null);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(<any>null);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"Ambiguous\",\r\n Ambiguous = \"Moved\",\r\n MovedPermanently = \"Redirect\",\r\n Moved = \"RedirectMethod\",\r\n Found = \"NotModified\",\r\n Redirect = \"UseProxy\",\r\n SeeOther = \"Unused\",\r\n RedirectMethod = \"TemporaryRedirect\",\r\n NotModified = \"PermanentRedirect\",\r\n UseProxy = \"BadRequest\",\r\n Unused = \"Unauthorized\",\r\n TemporaryRedirect = \"PaymentRequired\",\r\n RedirectKeepVerb = \"Forbidden\",\r\n PermanentRedirect = \"NotFound\",\r\n BadRequest = \"MethodNotAllowed\",\r\n Unauthorized = \"NotAcceptable\",\r\n PaymentRequired = \"ProxyAuthenticationRequired\",\r\n Forbidden = \"RequestTimeout\",\r\n NotFound = \"Conflict\",\r\n MethodNotAllowed = \"Gone\",\r\n NotAcceptable = \"LengthRequired\",\r\n ProxyAuthenticationRequired = \"PreconditionFailed\",\r\n RequestTimeout = \"RequestEntityTooLarge\",\r\n Conflict = \"RequestUriTooLong\",\r\n Gone = \"UnsupportedMediaType\",\r\n LengthRequired = \"RequestedRangeNotSatisfiable\",\r\n PreconditionFailed = \"ExpectationFailed\",\r\n RequestEntityTooLarge = \"MisdirectedRequest\",\r\n RequestUriTooLong = \"UnprocessableEntity\",\r\n UnsupportedMediaType = \"Locked\",\r\n RequestedRangeNotSatisfiable = \"FailedDependency\",\r\n ExpectationFailed = \"UpgradeRequired\",\r\n MisdirectedRequest = \"PreconditionRequired\",\r\n UnprocessableEntity = \"TooManyRequests\",\r\n Locked = \"RequestHeaderFieldsTooLarge\",\r\n FailedDependency = \"UnavailableForLegalReasons\",\r\n UpgradeRequired = \"InternalServerError\",\r\n PreconditionRequired = \"NotImplemented\",\r\n TooManyRequests = \"BadGateway\",\r\n RequestHeaderFieldsTooLarge = \"ServiceUnavailable\",\r\n UnavailableForLegalReasons = \"GatewayTimeout\",\r\n InternalServerError = \"HttpVersionNotSupported\",\r\n NotImplemented = \"VariantAlsoNegotiates\",\r\n BadGateway = \"InsufficientStorage\",\r\n ServiceUnavailable = \"LoopDetected\",\r\n GatewayTimeout = \"NotExtended\",\r\n HttpVersionNotSupported = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((<any>event.target).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { DanglIdentityClient, TokenResponseGet } from \"../api-client\";\r\nimport { JwtStorage } from \"../models/jwt-storage\";\r\nimport { Subject, Observable, of, ReplaySubject } from \"rxjs\";\r\nimport { map, catchError, tap, first } from \"rxjs/operators\";\r\nimport { AuthenticationMessenger } from \"../messengers/authentication.messenger\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JwtTokenService {\r\n private readonly storage_identifier = \"dangl_identity_integration_jwt_token\";\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next();\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n \"Internal error while refreshing Dangl.Identity token\",\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { JwtTokenService } from \"../services/jwt-token.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\nimport { IDanglIdentityRequestValidator } from \"./dangl-identity-request-validator\";\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n \"Validator to decide whether to include JWT tokens in requests\"\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith(\"/identity\")) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptorService, multi: true }]\r\n})\r\nexport class DanglIdentityModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService) { }\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password\r\n })\r\n .pipe(map(r => this.storeJwtTokenIfValid(r)),\r\n catchError(e => of(false)));\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken\r\n || !token.refreshToken\r\n || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationMessenger {\r\n\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n\r\n constructor(private jwtTokenService: JwtTokenService) {\r\n jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());\r\n jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));\r\n jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));\r\n jwtTokenService.getToken()\r\n .subscribe(token => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n tokenClaims[tokenProp] = property;\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role']\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService\r\n .refreshToken()\r\n .subscribe(() => { });\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf"],"mappings":"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"}