@cleavelandprice/ngx-lib 3.1.8 → 3.1.9

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 (54) hide show
  1. package/authentication/authentication.base.module.d.ts +7 -0
  2. package/authentication/object/object.module.d.ts +11 -0
  3. package/authentication/object/public_api.d.ts +2 -2
  4. package/authentication/object/services/{authentication-object.service.d.ts → authentication.service.d.ts} +3 -3
  5. package/authentication/public_api.d.ts +1 -1
  6. package/authentication/token/gui/components/login/login.component.d.ts +3 -3
  7. package/authentication/token/gui/components/login-form/login-form.component.d.ts +3 -3
  8. package/authentication/token/gui/public_api.d.ts +2 -2
  9. package/authentication/token/gui/services/{authentication-token-gui.service.d.ts → authentication.service.d.ts} +4 -4
  10. package/authentication/token/gui/token-gui.module.d.ts +20 -0
  11. package/authentication/token/public_api.d.ts +2 -2
  12. package/authentication/token/services/{authentication-token.service.d.ts → authentication.service.d.ts} +3 -3
  13. package/authentication/token/token.module.d.ts +11 -0
  14. package/esm2020/authentication/authentication.base.module.mjs +19 -0
  15. package/esm2020/authentication/object/object.module.mjs +39 -0
  16. package/esm2020/authentication/object/public_api.mjs +3 -3
  17. package/esm2020/authentication/object/services/authentication.service.mjs +101 -0
  18. package/esm2020/authentication/public_api.mjs +2 -2
  19. package/esm2020/authentication/token/gui/components/login/login.component.mjs +4 -4
  20. package/esm2020/authentication/token/gui/components/login-form/login-form.component.mjs +4 -4
  21. package/esm2020/authentication/token/gui/public_api.mjs +3 -3
  22. package/esm2020/authentication/token/gui/services/authentication.service.mjs +74 -0
  23. package/esm2020/authentication/token/gui/token-gui.module.mjs +77 -0
  24. package/esm2020/authentication/token/public_api.mjs +3 -3
  25. package/esm2020/authentication/token/services/authentication.service.mjs +112 -0
  26. package/esm2020/authentication/token/token.module.mjs +39 -0
  27. package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs +14 -14
  28. package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
  29. package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs +19 -19
  30. package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
  31. package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs +14 -14
  32. package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
  33. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +6 -6
  34. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  35. package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs +14 -14
  36. package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
  37. package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs +19 -19
  38. package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
  39. package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs +14 -14
  40. package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
  41. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +6 -6
  42. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  43. package/package.json +1 -1
  44. package/authentication/authentication.module.d.ts +0 -7
  45. package/authentication/object/authentication-object.module.d.ts +0 -11
  46. package/authentication/token/authentication-token.module.d.ts +0 -11
  47. package/authentication/token/gui/authentication-token-gui.module.d.ts +0 -20
  48. package/esm2020/authentication/authentication.module.mjs +0 -19
  49. package/esm2020/authentication/object/authentication-object.module.mjs +0 -39
  50. package/esm2020/authentication/object/services/authentication-object.service.mjs +0 -101
  51. package/esm2020/authentication/token/authentication-token.module.mjs +0 -39
  52. package/esm2020/authentication/token/gui/authentication-token-gui.module.mjs +0 -77
  53. package/esm2020/authentication/token/gui/services/authentication-token-gui.service.mjs +0 -74
  54. package/esm2020/authentication/token/services/authentication-token.service.mjs +0 -112
@@ -0,0 +1,74 @@
1
+ import { Injectable, Optional } from '@angular/core';
2
+ import { JwtHelperService } from '@auth0/angular-jwt';
3
+ import { AuthenticationService as TokenAuthenticationService } from '@cleavelandprice/ngx-lib/authentication/token';
4
+ import { defaultConfig } from '../model/default-config';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../model/service-config";
7
+ import * as i2 from "@angular/common/http";
8
+ import * as i3 from "@cleavelandprice/ngx-lib/sharepoint";
9
+ export class AuthenticationService extends TokenAuthenticationService {
10
+ //#region Lifecycle
11
+ // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.
12
+ constructor(config, http, sharePointService) {
13
+ config = {
14
+ ...defaultConfig,
15
+ ...config,
16
+ // Need to force deferTokenValidation here because if a custom config was passed in, deferTokenValidation would have defaulted to false since it's the default boolean value
17
+ // If a custom config wasn't passed in, then deferTokenValidation would have been true from defaultConfig
18
+ deferTokenValidation: true
19
+ };
20
+ super(config, http);
21
+ this.config = config;
22
+ this.http = http;
23
+ this.sharePointService = sharePointService;
24
+ this.checkForExistingToken();
25
+ }
26
+ //#endregion
27
+ //#region Utilities
28
+ validateUser(token) {
29
+ const jwtHelper = new JwtHelperService();
30
+ const decoded = jwtHelper.decodeToken(token);
31
+ if (jwtHelper.isTokenExpired(token)) {
32
+ this.logout();
33
+ return;
34
+ }
35
+ this.authenticatedUser = {
36
+ admin: decoded.role === 'Admin',
37
+ displayName: decoded.displayName,
38
+ accountName: decoded.winaccountname,
39
+ distinguishedName: decoded.distinguishedName,
40
+ employeeNumber: decoded.employeeNumber,
41
+ memberOf: decoded.memberOf
42
+ };
43
+ localStorage.setItem(this.config.tokenName, token);
44
+ this.getPhoto();
45
+ this.authenticated = true;
46
+ this.authenticatedChanged.emit(this.authenticated);
47
+ this.authenticating = false;
48
+ this.authenticatingChanged.emit(this.authenticating);
49
+ }
50
+ getPhoto() {
51
+ this.sharePointService.getPhotos()
52
+ .subscribe(photos => {
53
+ // The user may have been logged out by the time the photos came back
54
+ if (!this.authenticatedUser?.employeeNumber) {
55
+ return;
56
+ }
57
+ const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser.employeeNumber);
58
+ if (photo) {
59
+ this.authenticatedUser.photoUrl = photo.encodedAbsUrl;
60
+ }
61
+ });
62
+ }
63
+ }
64
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, deps: [{ token: i1.ServiceConfig, optional: true }, { token: i2.HttpClient }, { token: i3.SharePointService }], target: i0.ɵɵFactoryTarget.Injectable });
65
+ AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, providedIn: 'root' });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, decorators: [{
67
+ type: Injectable,
68
+ args: [{
69
+ providedIn: 'root'
70
+ }]
71
+ }], ctorParameters: function () { return [{ type: i1.ServiceConfig, decorators: [{
72
+ type: Optional
73
+ }] }, { type: i2.HttpClient }, { type: i3.SharePointService }]; } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL2d1aS9zcmMvc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl0RCxPQUFPLEVBQ0wscUJBQXFCLElBQUksMEJBQTBCLEVBRXBELE1BQU0sK0NBQStDLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQU14RCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsMEJBQTBCO0lBQ25FLG1CQUFtQjtJQUNuQixtSUFBbUk7SUFDbkksWUFBaUMsTUFBcUIsRUFDakMsSUFBZ0IsRUFDakIsaUJBQW9DO1FBRTFDLE1BQU0sR0FBRztZQUNQLEdBQUcsYUFBYTtZQUNoQixHQUFHLE1BQU07WUFFVCw0S0FBNEs7WUFDNUsseUdBQXlHO1lBQ3pHLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FBQztRQUVGLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFiRCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDakIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWExQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUNWLFlBQVksQ0FBQyxLQUFhO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBd0IsQ0FBQztRQUVwRSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYztZQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1lBQzVDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQztRQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRTthQUMvQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxFQUFFO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVqRyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7YUFDdkQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O2tIQWxFVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUljLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcclxuXHJcbmltcG9ydCB7IFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBdXRoZW50aWNhdGlvblNlcnZpY2UgYXMgVG9rZW5BdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgQXV0aGVudGljYXRpb25Ub2tlblxyXG59IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hdXRoZW50aWNhdGlvbi90b2tlbic7XHJcblxyXG5pbXBvcnQgeyBkZWZhdWx0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvZGVmYXVsdC1jb25maWcnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvc2VydmljZS1jb25maWcnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25TZXJ2aWNlIGV4dGVuZHMgVG9rZW5BdXRoZW50aWNhdGlvblNlcnZpY2Uge1xyXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcclxuICAvLyBJZiBhIFNlcnZpY2VDb25maWcgb2JqZWN0IGlzIG5vdCBwcm92aWRlZCB3aGVuIHRoZSBtb2R1bGUgaXMgaW1wb3J0ZWQsIHRoZW4gZGVmYXVsdCB2YWx1ZXMgYXJlIHB1bGxlZCBpbiBmcm9tIGRlZmF1bHQtY29uZmlnLnRzLlxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIG92ZXJyaWRlIGNvbmZpZzogU2VydmljZUNvbmZpZyxcclxuICAgICAgICAgICAgICBvdmVycmlkZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgc2hhcmVQb2ludFNlcnZpY2U6IFNoYXJlUG9pbnRTZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWcsXHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZvcmNlIGRlZmVyVG9rZW5WYWxpZGF0aW9uIGhlcmUgYmVjYXVzZSBpZiBhIGN1c3RvbSBjb25maWcgd2FzIHBhc3NlZCBpbiwgZGVmZXJUb2tlblZhbGlkYXRpb24gd291bGQgaGF2ZSBkZWZhdWx0ZWQgdG8gZmFsc2Ugc2luY2UgaXQncyB0aGUgZGVmYXVsdCBib29sZWFuIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIC8vIElmIGEgY3VzdG9tIGNvbmZpZyB3YXNuJ3QgcGFzc2VkIGluLCB0aGVuIGRlZmVyVG9rZW5WYWxpZGF0aW9uIHdvdWxkIGhhdmUgYmVlbiB0cnVlIGZyb20gZGVmYXVsdENvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICBkZWZlclRva2VuVmFsaWRhdGlvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdXBlcihjb25maWcsIGh0dHApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tGb3JFeGlzdGluZ1Rva2VuKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gVXRpbGl0aWVzXHJcbiAgb3ZlcnJpZGUgdmFsaWRhdGVVc2VyKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGp3dEhlbHBlciA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKCk7XHJcbiAgICBjb25zdCBkZWNvZGVkID0gand0SGVscGVyLmRlY29kZVRva2VuKHRva2VuKSBhcyBBdXRoZW50aWNhdGlvblRva2VuO1xyXG5cclxuICAgIGlmIChqd3RIZWxwZXIuaXNUb2tlbkV4cGlyZWQodG9rZW4pKSB7XHJcbiAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyID0ge1xyXG4gICAgICBhZG1pbjogZGVjb2RlZC5yb2xlID09PSAnQWRtaW4nLFxyXG4gICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZC5kaXNwbGF5TmFtZSxcclxuICAgICAgYWNjb3VudE5hbWU6IGRlY29kZWQud2luYWNjb3VudG5hbWUsXHJcbiAgICAgIGRpc3Rpbmd1aXNoZWROYW1lOiBkZWNvZGVkLmRpc3Rpbmd1aXNoZWROYW1lLFxyXG4gICAgICBlbXBsb3llZU51bWJlcjogZGVjb2RlZC5lbXBsb3llZU51bWJlcixcclxuICAgICAgbWVtYmVyT2Y6IGRlY29kZWQubWVtYmVyT2ZcclxuICAgIH07XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5jb25maWcudG9rZW5OYW1lLCB0b2tlbik7XHJcblxyXG4gICAgdGhpcy5nZXRQaG90bygpO1xyXG4gICAgXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRlZCk7XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZ0NoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0aW5nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGhvdG8oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNoYXJlUG9pbnRTZXJ2aWNlLmdldFBob3RvcygpXHJcbiAgICAgIC5zdWJzY3JpYmUocGhvdG9zID0+IHtcclxuICAgICAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBiZWVuIGxvZ2dlZCBvdXQgYnkgdGhlIHRpbWUgdGhlIHBob3RvcyBjYW1lIGJhY2tcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZFVzZXI/LmVtcGxveWVlTnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwaG90byA9IHBob3Rvcy5maW5kKHBpYyA9PiBwaWMuZW1wbG95ZWVOdW1iZXIgPT09ICt0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyIS5lbXBsb3llZU51bWJlcik7XHJcblxyXG4gICAgICAgIGlmIChwaG90bykge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlci5waG90b1VybCA9IHBob3RvLmVuY29kZWRBYnNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn0iXX0=
@@ -0,0 +1,77 @@
1
+ import { NgModule, Optional, SkipSelf } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatDialogModule } from '@angular/material/dialog';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { MatInputModule } from '@angular/material/input';
9
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
10
+ import { ServiceConfig } from './model/service-config';
11
+ import { AuthenticationService } from './services/authentication.service';
12
+ import { LoginComponent } from './components/login/login.component';
13
+ import { LoginFormComponent } from './components/login-form/login-form.component';
14
+ import * as i0 from "@angular/core";
15
+ export class TokenGuiModule {
16
+ constructor(parentModule) {
17
+ if (parentModule) {
18
+ throw new Error('TokenGuiModule is already loaded. Import it in the AppModule only');
19
+ }
20
+ }
21
+ static forRoot(config) {
22
+ return {
23
+ ngModule: TokenGuiModule,
24
+ providers: [
25
+ AuthenticationService,
26
+ { provide: ServiceConfig, useValue: config }
27
+ ]
28
+ };
29
+ }
30
+ }
31
+ TokenGuiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenGuiModule, deps: [{ token: TokenGuiModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
32
+ TokenGuiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: TokenGuiModule, declarations: [LoginComponent,
33
+ LoginFormComponent], imports: [CommonModule,
34
+ ReactiveFormsModule,
35
+ MatButtonModule,
36
+ MatDialogModule,
37
+ MatFormFieldModule,
38
+ MatIconModule,
39
+ MatInputModule,
40
+ MatProgressSpinnerModule], exports: [LoginComponent,
41
+ LoginFormComponent] });
42
+ TokenGuiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenGuiModule, imports: [CommonModule,
43
+ ReactiveFormsModule,
44
+ MatButtonModule,
45
+ MatDialogModule,
46
+ MatFormFieldModule,
47
+ MatIconModule,
48
+ MatInputModule,
49
+ MatProgressSpinnerModule] });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenGuiModule, decorators: [{
51
+ type: NgModule,
52
+ args: [{
53
+ declarations: [
54
+ LoginComponent,
55
+ LoginFormComponent
56
+ ],
57
+ imports: [
58
+ CommonModule,
59
+ ReactiveFormsModule,
60
+ MatButtonModule,
61
+ MatDialogModule,
62
+ MatFormFieldModule,
63
+ MatIconModule,
64
+ MatInputModule,
65
+ MatProgressSpinnerModule
66
+ ],
67
+ exports: [
68
+ LoginComponent,
69
+ LoginFormComponent
70
+ ]
71
+ }]
72
+ }], ctorParameters: function () { return [{ type: TokenGuiModule, decorators: [{
73
+ type: Optional
74
+ }, {
75
+ type: SkipSelf
76
+ }] }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZ3VpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL2d1aS9zcmMvdG9rZW4tZ3VpLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUF1QmxGLE1BQU0sT0FBTyxjQUFjO0lBV3pCLFlBQW9DLFlBQTRCO1FBQzlELElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUVBQW1FLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFmRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXFCO1FBQ2xDLE9BQU87WUFDTCxRQUFRLEVBQUUsY0FBYztZQUN4QixTQUFTLEVBQUU7Z0JBQ1QscUJBQXFCO2dCQUNyQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM3QztTQUNGLENBQUM7SUFDSixDQUFDOzsyR0FUVSxjQUFjOzRHQUFkLGNBQWMsaUJBbkJ2QixjQUFjO1FBQ2Qsa0JBQWtCLGFBR2xCLFlBQVk7UUFDWixtQkFBbUI7UUFFbkIsZUFBZTtRQUNmLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGNBQWM7UUFDZCx3QkFBd0IsYUFHeEIsY0FBYztRQUNkLGtCQUFrQjs0R0FHVCxjQUFjLFlBZnZCLFlBQVk7UUFDWixtQkFBbUI7UUFFbkIsZUFBZTtRQUNmLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGNBQWM7UUFDZCx3QkFBd0I7MkZBT2YsY0FBYztrQkFyQjFCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGNBQWM7d0JBQ2Qsa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBRW5CLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCx3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxjQUFjO3dCQUNkLGtCQUFrQjtxQkFDbkI7aUJBQ0Y7OzBCQVljLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcblxyXG5pbXBvcnQgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgTG9naW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9naW5Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xvZ2luLWZvcm0vbG9naW4tZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIExvZ2luQ29tcG9uZW50LFxyXG4gICAgTG9naW5Gb3JtQ29tcG9uZW50XHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIExvZ2luQ29tcG9uZW50LFxyXG4gICAgTG9naW5Gb3JtQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9rZW5HdWlNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogU2VydmljZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VG9rZW5HdWlNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBUb2tlbkd1aU1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHsgcHJvdmlkZTogU2VydmljZUNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZyB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwYXJlbnRNb2R1bGU6IFRva2VuR3VpTW9kdWxlKSB7XHJcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnVG9rZW5HdWlNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEltcG9ydCBpdCBpbiB0aGUgQXBwTW9kdWxlIG9ubHknKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
@@ -1,6 +1,6 @@
1
1
  export * from './model/authentication-token';
2
2
  export * from './model/default-config';
3
3
  export * from './model/service-config';
4
- export * from './services/authentication-token.service';
5
- export * from './authentication-token.module';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGNBQWMseUNBQXlDLENBQUM7QUFFeEQsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtY29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLXRva2VuLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9hdXRoZW50aWNhdGlvbi10b2tlbi5tb2R1bGUnOyJdfQ==
4
+ export * from './services/authentication.service';
5
+ export * from './token.module';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtY29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi90b2tlbi5tb2R1bGUnOyJdfQ==
@@ -0,0 +1,112 @@
1
+ import { EventEmitter, Injectable, Optional, Output } from '@angular/core';
2
+ import { JwtHelperService } from '@auth0/angular-jwt';
3
+ import { defaultConfig } from '../model/default-config';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../model/service-config";
6
+ import * as i2 from "@angular/common/http";
7
+ export class AuthenticationService {
8
+ //#endregion
9
+ //#region Lifecycle
10
+ // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.
11
+ constructor(config, http) {
12
+ this.config = config;
13
+ this.http = http;
14
+ //#region Fields
15
+ this.authenticatedChanged = new EventEmitter();
16
+ this.authenticatingChanged = new EventEmitter();
17
+ this.authenticationError = new EventEmitter();
18
+ this.authenticating = false; // Flag set to true while the service is attempting to authenticate the user
19
+ this.authenticated = false; // Flag set to true when the user is successfully authenticated
20
+ this.authenticatedUser = null; // Object representing the authenticated user
21
+ this.config = {
22
+ ...defaultConfig,
23
+ ...config
24
+ };
25
+ if (!this.config.deferTokenValidation) {
26
+ this.checkForExistingToken();
27
+ }
28
+ }
29
+ //#endregion
30
+ //#region Utilities
31
+ //Authenticate the user and store the token in Local Storage
32
+ login(username, password, adminGroup) {
33
+ const request = {
34
+ username: username,
35
+ password: password,
36
+ adminGroup: adminGroup
37
+ };
38
+ this.authenticating = true;
39
+ this.authenticatingChanged.emit(this.authenticating);
40
+ // Sending a 'raw' POST request so that we can tell HttpClient that we are expecting text instead of Json
41
+ // Otherwise, it would throw an error trying to decode Json from the response
42
+ this.http.request('POST', `${this.config.apiUrl}${this.config.authenticateEndpoint}`, { body: request, responseType: 'text' })
43
+ .subscribe({
44
+ next: (token) => {
45
+ if (token) {
46
+ this.validateUser(token);
47
+ }
48
+ else {
49
+ this.logout();
50
+ }
51
+ },
52
+ error: (err) => {
53
+ this.authenticating = false;
54
+ this.authenticatingChanged.emit(this.authenticating);
55
+ this.authenticationError.emit(err);
56
+ }
57
+ });
58
+ }
59
+ //Logout the user and delete the token from Local Storage
60
+ logout() {
61
+ if (localStorage.getItem(this.config.tokenName)) {
62
+ localStorage.removeItem(this.config.tokenName);
63
+ }
64
+ this.authenticatedUser = null;
65
+ this.authenticated = false;
66
+ this.authenticatedChanged.emit(false);
67
+ }
68
+ validateUser(token) {
69
+ const jwtHelper = new JwtHelperService();
70
+ const decoded = jwtHelper.decodeToken(token);
71
+ if (jwtHelper.isTokenExpired(token)) {
72
+ this.logout();
73
+ return;
74
+ }
75
+ this.authenticatedUser = {
76
+ admin: decoded.role === 'Admin',
77
+ displayName: decoded.displayName,
78
+ accountName: decoded.winaccountname,
79
+ distinguishedName: decoded.distinguishedName,
80
+ employeeNumber: decoded.employeeNumber,
81
+ memberOf: decoded.memberOf
82
+ };
83
+ localStorage.setItem(this.config.tokenName, token);
84
+ this.authenticated = true;
85
+ this.authenticatedChanged.emit(this.authenticated);
86
+ this.authenticating = false;
87
+ this.authenticatingChanged.emit(this.authenticating);
88
+ }
89
+ checkForExistingToken() {
90
+ const token = localStorage.getItem(this.config.tokenName);
91
+ if (token) {
92
+ this.validateUser(token);
93
+ }
94
+ }
95
+ }
96
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, deps: [{ token: i1.ServiceConfig, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
97
+ AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, providedIn: 'root' });
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, decorators: [{
99
+ type: Injectable,
100
+ args: [{
101
+ providedIn: 'root'
102
+ }]
103
+ }], ctorParameters: function () { return [{ type: i1.ServiceConfig, decorators: [{
104
+ type: Optional
105
+ }] }, { type: i2.HttpClient }]; }, propDecorators: { authenticatedChanged: [{
106
+ type: Output
107
+ }], authenticatingChanged: [{
108
+ type: Output
109
+ }], authenticationError: [{
110
+ type: Output
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL3NyYy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBTXhELE1BQU0sT0FBTyxxQkFBcUI7SUFRaEMsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixtSUFBbUk7SUFDbkksWUFBa0MsTUFBcUIsRUFDakMsSUFBZ0I7UUFESixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFadEMsZ0JBQWdCO1FBQ04seUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNuRCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3BELHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkQsbUJBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyw0RUFBNEU7UUFDcEcsa0JBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQywrREFBK0Q7UUFDdEYsc0JBQWlCLEdBQTZCLElBQUksQ0FBQyxDQUFDLDZDQUE2QztRQVFuRixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxhQUFhO1lBQ2hCLEdBQUcsTUFBTTtTQUNWLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEVB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UUFFbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7a0hBcEdVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBYWMsUUFBUTtxRUFWWCxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgQXV0aGVudGljYXRlZFVzZXIsXHJcbiAgQXV0aGVudGljYXRpb25SZXF1ZXN0XHJcbn0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uJztcclxuXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uVG9rZW4gfSBmcm9tICcuLi9tb2RlbC9hdXRoZW50aWNhdGlvbi10b2tlbic7XHJcbmltcG9ydCB7IGRlZmF1bHRDb25maWcgfSBmcm9tICcuLi9tb2RlbC9kZWZhdWx0LWNvbmZpZyc7XHJcbmltcG9ydCB7IFNlcnZpY2VDb25maWcgfSBmcm9tICcuLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcbiAgLy8jcmVnaW9uIEZpZWxkc1xyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGVkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgYXV0aGVudGljYXRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGlvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGF1dGhlbnRpY2F0aW5nID0gZmFsc2U7IC8vIEZsYWcgc2V0IHRvIHRydWUgd2hpbGUgdGhlIHNlcnZpY2UgaXMgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXJcclxuICBhdXRoZW50aWNhdGVkID0gZmFsc2U7IC8vIEZsYWcgc2V0IHRvIHRydWUgd2hlbiB0aGUgdXNlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZFxyXG4gIGF1dGhlbnRpY2F0ZWRVc2VyOiBBdXRoZW50aWNhdGVkVXNlciB8IG51bGwgPSBudWxsOyAvLyBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIExpZmVjeWNsZVxyXG4gIC8vIElmIGEgU2VydmljZUNvbmZpZyBvYmplY3QgaXMgbm90IHByb3ZpZGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBpbXBvcnRlZCwgdGhlbiBkZWZhdWx0IHZhbHVlcyBhcmUgcHVsbGVkIGluIGZyb20gZGVmYXVsdC1jb25maWcudHMuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGNvbmZpZzogU2VydmljZUNvbmZpZyxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5kZWZlclRva2VuVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yRXhpc3RpbmdUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xyXG4gIC8vQXV0aGVudGljYXRlIHRoZSB1c2VyIGFuZCBzdG9yZSB0aGUgdG9rZW4gaW4gTG9jYWwgU3RvcmFnZVxyXG4gIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGFkbWluR3JvdXA/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcXVlc3Q6IEF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHtcclxuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgIGFkbWluR3JvdXA6IGFkbWluR3JvdXBcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xyXG5cclxuICAgIC8vIFNlbmRpbmcgYSAncmF3JyBQT1NUIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gdGVsbCBIdHRwQ2xpZW50IHRoYXQgd2UgYXJlIGV4cGVjdGluZyB0ZXh0IGluc3RlYWQgb2YgSnNvblxyXG4gICAgLy8gT3RoZXJ3aXNlLCBpdCB3b3VsZCB0aHJvdyBhbiBlcnJvciB0cnlpbmcgdG8gZGVjb2RlIEpzb24gZnJvbSB0aGUgcmVzcG9uc2VcclxuICAgIHRoaXMuaHR0cC5yZXF1ZXN0KCdQT1NUJywgYCR7dGhpcy5jb25maWcuYXBpVXJsfSR7dGhpcy5jb25maWcuYXV0aGVudGljYXRlRW5kcG9pbnR9YCwgeyBib2R5OiByZXF1ZXN0LCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAodG9rZW4pID0+IHtcclxuICAgICAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcih0b2tlbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IuZW1pdChlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy9Mb2dvdXQgdGhlIHVzZXIgYW5kIGRlbGV0ZSB0aGUgdG9rZW4gZnJvbSBMb2NhbCBTdG9yYWdlXHJcbiAgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5jb25maWcudG9rZW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyID0gbnVsbDtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcbiBcclxuICB2YWxpZGF0ZVVzZXIodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgand0SGVscGVyID0gbmV3IEp3dEhlbHBlclNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGRlY29kZWQgPSBqd3RIZWxwZXIuZGVjb2RlVG9rZW4odG9rZW4pIGFzIEF1dGhlbnRpY2F0aW9uVG9rZW47XHJcblxyXG4gICAgaWYgKGp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcclxuICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRlZFVzZXIgPSB7XHJcbiAgICAgIGFkbWluOiBkZWNvZGVkLnJvbGUgPT09ICdBZG1pbicsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBkZWNvZGVkLmRpc3BsYXlOYW1lLFxyXG4gICAgICBhY2NvdW50TmFtZTogZGVjb2RlZC53aW5hY2NvdW50bmFtZSxcclxuICAgICAgZGlzdGluZ3Vpc2hlZE5hbWU6IGRlY29kZWQuZGlzdGluZ3Vpc2hlZE5hbWUsXHJcbiAgICAgIGVtcGxveWVlTnVtYmVyOiBkZWNvZGVkLmVtcGxveWVlTnVtYmVyLFxyXG4gICAgICBtZW1iZXJPZjogZGVjb2RlZC5tZW1iZXJPZlxyXG4gICAgfTtcclxuXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlbk5hbWUsIHRva2VuKTtcclxuICAgIFxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0ZWQpO1xyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZvckV4aXN0aW5nVG9rZW4oKTogdm9pZCB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSk7XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZVVzZXIodG9rZW4pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSJdfQ==
@@ -0,0 +1,39 @@
1
+ import { NgModule, Optional, SkipSelf } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ServiceConfig } from './model/service-config';
4
+ import { AuthenticationService } from './services/authentication.service';
5
+ import * as i0 from "@angular/core";
6
+ export class TokenModule {
7
+ constructor(parentModule) {
8
+ if (parentModule) {
9
+ throw new Error('TokenModule is already loaded. Import it in the AppModule only');
10
+ }
11
+ }
12
+ static forRoot(config) {
13
+ return {
14
+ ngModule: TokenModule,
15
+ providers: [
16
+ AuthenticationService,
17
+ { provide: ServiceConfig, useValue: config }
18
+ ]
19
+ };
20
+ }
21
+ }
22
+ TokenModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenModule, deps: [{ token: TokenModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
23
+ TokenModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: TokenModule, imports: [CommonModule] });
24
+ TokenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenModule, imports: [CommonModule] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: TokenModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [],
29
+ imports: [
30
+ CommonModule
31
+ ],
32
+ exports: []
33
+ }]
34
+ }], ctorParameters: function () { return [{ type: TokenModule, decorators: [{
35
+ type: Optional
36
+ }, {
37
+ type: SkipSelf
38
+ }] }]; } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24vdG9rZW4vc3JjL3Rva2VuLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBUzFFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQW9DLFlBQXlCO1FBQzNELElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFmRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXFCO1FBQ2xDLE9BQU87WUFDTCxRQUFRLEVBQUUsV0FBVztZQUNyQixTQUFTLEVBQUU7Z0JBQ1QscUJBQXFCO2dCQUNyQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM3QztTQUNGLENBQUM7SUFDSixDQUFDOzt3R0FUVSxXQUFXO3lHQUFYLFdBQVcsWUFKcEIsWUFBWTt5R0FJSCxXQUFXLFlBSnBCLFlBQVk7MkZBSUgsV0FBVztrQkFQdkIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7OzBCQVljLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRva2VuTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IFNlcnZpY2VDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFRva2VuTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogVG9rZW5Nb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgICAgICB7IHByb3ZpZGU6IFNlcnZpY2VDb25maWcsIHVzZVZhbHVlOiBjb25maWcgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcGFyZW50TW9kdWxlOiBUb2tlbk1vZHVsZSkge1xyXG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ1Rva2VuTW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLiBJbXBvcnQgaXQgaW4gdGhlIEFwcE1vZHVsZSBvbmx5Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19
@@ -14,7 +14,7 @@ const defaultConfig = {
14
14
  class ServiceConfig extends ServiceConfig$1 {
15
15
  }
16
16
 
17
- class AuthenticationObjectService {
17
+ class AuthenticationService {
18
18
  //#endregion
19
19
  //#region Lifecycle
20
20
  // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.
@@ -90,9 +90,9 @@ class AuthenticationObjectService {
90
90
  }
91
91
  }
92
92
  }
93
- AuthenticationObjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectService, deps: [{ token: ServiceConfig, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
94
- AuthenticationObjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectService, providedIn: 'root' });
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectService, decorators: [{
93
+ AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, deps: [{ token: ServiceConfig, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
94
+ AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, providedIn: 'root' });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationService, decorators: [{
96
96
  type: Injectable,
97
97
  args: [{
98
98
  providedIn: 'root'
@@ -109,26 +109,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
109
109
  type: Output
110
110
  }] } });
111
111
 
112
- class AuthenticationObjectModule {
112
+ class ObjectModule {
113
113
  constructor(parentModule) {
114
114
  if (parentModule) {
115
- throw new Error('AuthenticationObjectModule is already loaded. Import it in the AppModule only');
115
+ throw new Error('ObjectModule is already loaded. Import it in the AppModule only');
116
116
  }
117
117
  }
118
118
  static forRoot(config) {
119
119
  return {
120
- ngModule: AuthenticationObjectModule,
120
+ ngModule: ObjectModule,
121
121
  providers: [
122
- AuthenticationObjectService,
122
+ AuthenticationService,
123
123
  { provide: ServiceConfig, useValue: config }
124
124
  ]
125
125
  };
126
126
  }
127
127
  }
128
- AuthenticationObjectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectModule, deps: [{ token: AuthenticationObjectModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
129
- AuthenticationObjectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectModule, imports: [CommonModule] });
130
- AuthenticationObjectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectModule, imports: [CommonModule] });
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AuthenticationObjectModule, decorators: [{
128
+ ObjectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ObjectModule, deps: [{ token: ObjectModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
129
+ ObjectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: ObjectModule, imports: [CommonModule] });
130
+ ObjectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ObjectModule, imports: [CommonModule] });
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ObjectModule, decorators: [{
132
132
  type: NgModule,
133
133
  args: [{
134
134
  declarations: [],
@@ -138,7 +138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
138
138
  exports: []
139
139
  }]
140
140
  }], ctorParameters: function () {
141
- return [{ type: AuthenticationObjectModule, decorators: [{
141
+ return [{ type: ObjectModule, decorators: [{
142
142
  type: Optional
143
143
  }, {
144
144
  type: SkipSelf
@@ -149,5 +149,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
149
149
  * Generated bundle index. Do not edit.
150
150
  */
151
151
 
152
- export { AuthenticationObjectModule, AuthenticationObjectService, ServiceConfig, defaultConfig };
152
+ export { AuthenticationService, ObjectModule, ServiceConfig, defaultConfig };
153
153
  //# sourceMappingURL=cleavelandprice-ngx-lib-authentication-object.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-authentication-object.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/services/authentication-object.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/authentication-object.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/cleavelandprice-ngx-lib-authentication-object.ts"],"sourcesContent":["import { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig } from './service-config';\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: NgxLibDefaultConfig.apiUrl,\r\n authenticateEndpoint: '/authenticate',\r\n tokenName: 'user'\r\n}","import { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n}","import { EventEmitter, Injectable, Optional, Output } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { User } from '@cleavelandprice/ngx-lib/active-directory';\r\n\r\nimport {\r\n AbstractAuthenticationService,\r\n AuthenticatedUser,\r\n AuthenticationRequest\r\n} from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\nimport { ServiceConfig } from '../model/service-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationObjectService implements AbstractAuthenticationService {\r\n //#region Fields\r\n @Output() authenticatedChanged = new EventEmitter<boolean>();\r\n @Output() authenticatingChanged = new EventEmitter<boolean>();\r\n @Output() authenticationError = new EventEmitter();\r\n authenticating = false; // Flag set to true while the service is attempting to authenticate the user\r\n authenticated = false; // Flag set to true when the user is successfully authenticated\r\n authenticatedUser: AuthenticatedUser | null = null; // Object representing the authenticated user\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n //Authenticate the user and store the token in Local Storage\r\n login(username: string, password: string, adminGroup?: string): void {\r\n const request: AuthenticationRequest = {\r\n username: username,\r\n password: password,\r\n adminGroup: adminGroup\r\n };\r\n\r\n this.authenticating = true;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n\r\n this.http.post(`${this.config.apiUrl}${this.config.authenticateEndpoint}`, request)\r\n .subscribe({\r\n next: (user) => {\r\n if (user) {\r\n this.validateUser(user as User);\r\n } else {\r\n this.logout();\r\n }\r\n },\r\n error: (err) => {\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n this.authenticationError.emit(err);\r\n }\r\n });\r\n }\r\n \r\n //Logout the user and delete the token from Local Storage\r\n logout(): void {\r\n if (localStorage.getItem(this.config.tokenName)) {\r\n localStorage.removeItem(this.config.tokenName);\r\n }\r\n\r\n this.authenticatedUser = null;\r\n this.authenticated = false;\r\n this.authenticatedChanged.emit(false);\r\n }\r\n \r\n validateUser(token: User): void {\r\n this.authenticatedUser = {\r\n admin: false, // This type of authentication has no concept of Admin\r\n displayName: token.displayName,\r\n accountName: token.sAMAccountName,\r\n distinguishedName: token.distinguishedName,\r\n employeeNumber: token.employeeNumber,\r\n memberOf: token.memberOf.join(',')\r\n };\r\n\r\n localStorage.setItem(this.config.tokenName, JSON.stringify(token));\r\n \r\n this.authenticated = true;\r\n this.authenticatedChanged.emit(this.authenticated);\r\n\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n }\r\n\r\n checkForExistingToken(): void {\r\n const token = localStorage.getItem(this.config.tokenName);\r\n if (token) {\r\n this.validateUser(JSON.parse(token) as User);\r\n }\r\n }\r\n //#endregion\r\n}\r\n ","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\n\r\nimport { AuthenticationObjectService } from './services/authentication-object.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: []\r\n})\r\nexport class AuthenticationObjectModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<AuthenticationObjectModule> {\r\n return {\r\n ngModule: AuthenticationObjectModule,\r\n providers: [\r\n AuthenticationObjectService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: AuthenticationObjectModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'AuthenticationObjectModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","BaseServiceConfig","i1.ServiceConfig"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-authentication-object.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/services/authentication.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/object.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/object/src/cleavelandprice-ngx-lib-authentication-object.ts"],"sourcesContent":["import { defaultConfig as NgxLibDefaultConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig } from './service-config';\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: NgxLibDefaultConfig.apiUrl,\r\n authenticateEndpoint: '/authenticate',\r\n tokenName: 'user'\r\n}","import { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n}","import { EventEmitter, Injectable, Optional, Output } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { User } from '@cleavelandprice/ngx-lib/active-directory';\r\n\r\nimport {\r\n AbstractAuthenticationService,\r\n AuthenticatedUser,\r\n AuthenticationRequest\r\n} from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nimport { defaultConfig } from '../model/default-config';\r\nimport { ServiceConfig } from '../model/service-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService implements AbstractAuthenticationService {\r\n //#region Fields\r\n @Output() authenticatedChanged = new EventEmitter<boolean>();\r\n @Output() authenticatingChanged = new EventEmitter<boolean>();\r\n @Output() authenticationError = new EventEmitter();\r\n authenticating = false; // Flag set to true while the service is attempting to authenticate the user\r\n authenticated = false; // Flag set to true when the user is successfully authenticated\r\n authenticatedUser: AuthenticatedUser | null = null; // Object representing the authenticated user\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n //Authenticate the user and store the token in Local Storage\r\n login(username: string, password: string, adminGroup?: string): void {\r\n const request: AuthenticationRequest = {\r\n username: username,\r\n password: password,\r\n adminGroup: adminGroup\r\n };\r\n\r\n this.authenticating = true;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n\r\n this.http.post(`${this.config.apiUrl}${this.config.authenticateEndpoint}`, request)\r\n .subscribe({\r\n next: (user) => {\r\n if (user) {\r\n this.validateUser(user as User);\r\n } else {\r\n this.logout();\r\n }\r\n },\r\n error: (err) => {\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n this.authenticationError.emit(err);\r\n }\r\n });\r\n }\r\n \r\n //Logout the user and delete the token from Local Storage\r\n logout(): void {\r\n if (localStorage.getItem(this.config.tokenName)) {\r\n localStorage.removeItem(this.config.tokenName);\r\n }\r\n\r\n this.authenticatedUser = null;\r\n this.authenticated = false;\r\n this.authenticatedChanged.emit(false);\r\n }\r\n \r\n validateUser(token: User): void {\r\n this.authenticatedUser = {\r\n admin: false, // This type of authentication has no concept of Admin\r\n displayName: token.displayName,\r\n accountName: token.sAMAccountName,\r\n distinguishedName: token.distinguishedName,\r\n employeeNumber: token.employeeNumber,\r\n memberOf: token.memberOf.join(',')\r\n };\r\n\r\n localStorage.setItem(this.config.tokenName, JSON.stringify(token));\r\n \r\n this.authenticated = true;\r\n this.authenticatedChanged.emit(this.authenticated);\r\n\r\n this.authenticating = false;\r\n this.authenticatingChanged.emit(this.authenticating);\r\n }\r\n\r\n checkForExistingToken(): void {\r\n const token = localStorage.getItem(this.config.tokenName);\r\n if (token) {\r\n this.validateUser(JSON.parse(token) as User);\r\n }\r\n }\r\n //#endregion\r\n}\r\n ","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\n\r\nimport { AuthenticationService } from './services/authentication.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: []\r\n})\r\nexport class ObjectModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<ObjectModule> {\r\n return {\r\n ngModule: ObjectModule,\r\n providers: [\r\n AuthenticationService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: ObjectModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'ObjectModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxLibDefaultConfig","BaseServiceConfig","i1.ServiceConfig"],"mappings":"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"}