@cleavelandprice/ngx-lib 3.1.6 → 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.
- package/authentication/authentication.base.module.d.ts +7 -0
- package/authentication/object/object.module.d.ts +11 -0
- package/authentication/object/public_api.d.ts +2 -2
- package/authentication/object/services/{authentication-object.service.d.ts → authentication.service.d.ts} +3 -3
- package/authentication/public_api.d.ts +1 -1
- package/authentication/token/gui/components/login/login.component.d.ts +3 -3
- package/authentication/token/gui/components/login-form/login-form.component.d.ts +3 -3
- package/authentication/token/gui/public_api.d.ts +2 -2
- package/authentication/token/gui/services/{authentication-token-gui.service.d.ts → authentication.service.d.ts} +4 -4
- package/authentication/token/gui/token-gui.module.d.ts +20 -0
- package/authentication/token/public_api.d.ts +2 -2
- package/authentication/token/services/{authentication-token.service.d.ts → authentication.service.d.ts} +3 -3
- package/authentication/token/token.module.d.ts +11 -0
- package/esm2020/authentication/authentication.base.module.mjs +19 -0
- package/esm2020/authentication/object/object.module.mjs +39 -0
- package/esm2020/authentication/object/public_api.mjs +3 -3
- package/esm2020/authentication/object/services/authentication.service.mjs +101 -0
- package/esm2020/authentication/public_api.mjs +2 -2
- package/esm2020/authentication/token/gui/components/login/login.component.mjs +4 -4
- package/esm2020/authentication/token/gui/components/login-form/login-form.component.mjs +4 -4
- package/esm2020/authentication/token/gui/public_api.mjs +3 -3
- package/esm2020/authentication/token/gui/services/authentication.service.mjs +74 -0
- package/esm2020/authentication/token/gui/token-gui.module.mjs +77 -0
- package/esm2020/authentication/token/public_api.mjs +3 -3
- package/esm2020/authentication/token/services/authentication.service.mjs +112 -0
- package/esm2020/authentication/token/token.module.mjs +39 -0
- package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs +14 -14
- package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs +19 -19
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs +14 -14
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +6 -6
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs +14 -14
- package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs +19 -19
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs +14 -14
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +6 -6
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
- package/package.json +1 -1
- package/authentication/authentication.module.d.ts +0 -7
- package/authentication/object/authentication-object.module.d.ts +0 -11
- package/authentication/token/authentication-token.module.d.ts +0 -11
- package/authentication/token/gui/authentication-token-gui.module.d.ts +0 -20
- package/esm2020/authentication/authentication.module.mjs +0 -19
- package/esm2020/authentication/object/authentication-object.module.mjs +0 -39
- package/esm2020/authentication/object/services/authentication-object.service.mjs +0 -101
- package/esm2020/authentication/token/authentication-token.module.mjs +0 -39
- package/esm2020/authentication/token/gui/authentication-token-gui.module.mjs +0 -77
- package/esm2020/authentication/token/gui/services/authentication-token-gui.service.mjs +0 -74
- 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
|
|
5
|
-
export * from './
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type:
|
|
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
|
|
112
|
+
class ObjectModule {
|
|
113
113
|
constructor(parentModule) {
|
|
114
114
|
if (parentModule) {
|
|
115
|
-
throw new Error('
|
|
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:
|
|
120
|
+
ngModule: ObjectModule,
|
|
121
121
|
providers: [
|
|
122
|
-
|
|
122
|
+
AuthenticationService,
|
|
123
123
|
{ provide: ServiceConfig, useValue: config }
|
|
124
124
|
]
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type:
|
|
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:
|
|
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 {
|
|
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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"}
|