@cleavelandprice/ngx-lib 3.7.0 → 3.7.2
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/model/abstract-authentication-service.d.ts +2 -0
- package/authentication/model/service-config.d.ts +1 -3
- package/authentication/object/model/service-config.d.ts +1 -1
- package/authentication/object/services/authentication.service.d.ts +2 -0
- package/authentication/token/gui/components/login-form/login-form.component.d.ts +7 -2
- package/authentication/token/gui/model/service-config.d.ts +2 -1
- package/authentication/token/gui/token-gui.module.d.ts +2 -1
- package/authentication/token/model/service-config.d.ts +1 -1
- package/authentication/token/services/authentication.service.d.ts +2 -0
- package/dialog/components/base/base.component.d.ts +4 -3
- package/esm2020/authentication/model/abstract-authentication-service.mjs +1 -1
- package/esm2020/authentication/model/service-config.mjs +2 -8
- package/esm2020/authentication/object/model/service-config.mjs +3 -3
- package/esm2020/authentication/object/services/authentication.service.mjs +15 -5
- package/esm2020/authentication/token/gui/components/login-form/login-form.component.mjs +20 -8
- package/esm2020/authentication/token/gui/model/service-config.mjs +4 -3
- package/esm2020/authentication/token/gui/services/authentication.service.mjs +2 -2
- package/esm2020/authentication/token/gui/token-gui.module.mjs +8 -4
- package/esm2020/authentication/token/model/service-config.mjs +3 -3
- package/esm2020/authentication/token/services/authentication.service.mjs +15 -5
- package/esm2020/dialog/components/base/base.component.mjs +4 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs +16 -6
- package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs +30 -13
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs +16 -6
- package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +1 -7
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
- package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs +3 -1
- package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs +16 -6
- package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs +30 -13
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs +16 -6
- package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +1 -7
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs +3 -1
- package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -22,6 +22,16 @@ export class AuthenticationService {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
//#endregion
|
|
25
|
+
//#region Properties
|
|
26
|
+
get useSessionStorage() {
|
|
27
|
+
return !!localStorage.getItem('storeTokenInSession');
|
|
28
|
+
}
|
|
29
|
+
get storage() {
|
|
30
|
+
return this.useSessionStorage ?
|
|
31
|
+
sessionStorage :
|
|
32
|
+
localStorage;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
25
35
|
//#region Utilities
|
|
26
36
|
//Authenticate the user and store the token in Local Storage
|
|
27
37
|
login(username, password, adminGroup) {
|
|
@@ -53,8 +63,8 @@ export class AuthenticationService {
|
|
|
53
63
|
}
|
|
54
64
|
//Logout the user and delete the token from Local Storage
|
|
55
65
|
logout() {
|
|
56
|
-
if (this.
|
|
57
|
-
this.
|
|
66
|
+
if (this.storage.getItem(this.config.tokenName)) {
|
|
67
|
+
this.storage.removeItem(this.config.tokenName);
|
|
58
68
|
}
|
|
59
69
|
this.authenticatedUser = undefined;
|
|
60
70
|
this.authenticated = false;
|
|
@@ -75,14 +85,14 @@ export class AuthenticationService {
|
|
|
75
85
|
employeeNumber: decoded.employeeNumber,
|
|
76
86
|
memberOf: decoded.memberOf
|
|
77
87
|
};
|
|
78
|
-
this.
|
|
88
|
+
this.storage.setItem(this.config.tokenName, token);
|
|
79
89
|
this.authenticated = true;
|
|
80
90
|
this.authenticatedChanged.emit(this.authenticated);
|
|
81
91
|
this.authenticating = false;
|
|
82
92
|
this.authenticatingChanged.emit(this.authenticating);
|
|
83
93
|
}
|
|
84
94
|
checkForExistingToken() {
|
|
85
|
-
const token = this.
|
|
95
|
+
const token = this.storage.getItem(this.config.tokenName);
|
|
86
96
|
if (token) {
|
|
87
97
|
this.validateUser(token);
|
|
88
98
|
}
|
|
@@ -104,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
104
114
|
}], authenticationError: [{
|
|
105
115
|
type: Output
|
|
106
116
|
}] } });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL3NyYy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS3hELE1BQU0sT0FBTyxxQkFBcUI7SUFRaEMsWUFBWTtJQUVaLG1CQUFtQjtJQUNqQixZQUFrQyxNQUFxQixFQUNuQyxJQUFnQjtRQURGLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDbkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQVh0QyxnQkFBZ0I7UUFDTix5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ25ELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDRFQUE0RTtRQUNwRyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLCtEQUErRDtRQVF4RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtJQUNmLENBQUM7SUFDRCxZQUFZO0lBRVosbUJBQW1CO0lBQ25CLDRE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LENBQUM7UUFFbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOztrSEFoR1UscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZZ0IsUUFBUTtxRUFUYixvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgQXV0aGVudGljYXRlZFVzZXIsXHJcbiAgQXV0aGVudGljYXRpb25SZXF1ZXN0XHJcbn0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uJztcclxuXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uVG9rZW4gfSBmcm9tICcuLi9tb2RlbC9hdXRoZW50aWNhdGlvbi10b2tlbic7XHJcbmltcG9ydCB7IFNlcnZpY2VDb25maWcgfSBmcm9tICcuLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcbiAgLy8jcmVnaW9uIEZpZWxkc1xyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGVkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgYXV0aGVudGljYXRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGlvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGF1dGhlbnRpY2F0aW5nID0gZmFsc2U7IC8vIEZsYWcgc2V0IHRvIHRydWUgd2hpbGUgdGhlIHNlcnZpY2UgaXMgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXJcclxuICBhdXRoZW50aWNhdGVkID0gZmFsc2U7IC8vIEZsYWcgc2V0IHRvIHRydWUgd2hlbiB0aGUgdXNlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZFxyXG4gIGF1dGhlbnRpY2F0ZWRVc2VyOiBBdXRoZW50aWNhdGVkVXNlciB8IHVuZGVmaW5lZDsgLy8gT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYXV0aGVudGljYXRlZCB1c2VyXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcclxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb25maWc6IFNlcnZpY2VDb25maWcsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlnID8/IG5ldyBTZXJ2aWNlQ29uZmlnKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5kZWZlclRva2VuVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yRXhpc3RpbmdUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xyXG4gIC8vQXV0aGVudGljYXRlIHRoZSB1c2VyIGFuZCBzdG9yZSB0aGUgdG9rZW4gaW4gTG9jYWwgU3RvcmFnZVxyXG4gIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGFkbWluR3JvdXA/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcXVlc3Q6IEF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHtcclxuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgIGFkbWluR3JvdXA6IGFkbWluR3JvdXBcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xyXG5cclxuICAgIC8vIFNlbmRpbmcgYSAncmF3JyBQT1NUIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gdGVsbCBIdHRwQ2xpZW50IHRoYXQgd2UgYXJlIGV4cGVjdGluZyB0ZXh0IGluc3RlYWQgb2YgSnNvblxyXG4gICAgLy8gT3RoZXJ3aXNlLCBpdCB3b3VsZCB0aHJvdyBhbiBlcnJvciB0cnlpbmcgdG8gZGVjb2RlIEpzb24gZnJvbSB0aGUgcmVzcG9uc2VcclxuICAgIHRoaXMuaHR0cC5yZXF1ZXN0KCdQT1NUJywgYCR7dGhpcy5jb25maWcuYXBpVXJsfSR7dGhpcy5jb25maWcuYXV0aGVudGljYXRlRW5kcG9pbnR9YCwgeyBib2R5OiByZXF1ZXN0LCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAodG9rZW4pID0+IHtcclxuICAgICAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVXNlcih0b2tlbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IuZW1pdChlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy9Mb2dvdXQgdGhlIHVzZXIgYW5kIGRlbGV0ZSB0aGUgdG9rZW4gZnJvbSBMb2NhbCBTdG9yYWdlXHJcbiAgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlbk5hbWUpKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmNvbmZpZy50b2tlbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRlZFVzZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG4gXHJcbiAgdmFsaWRhdGVVc2VyKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGp3dEhlbHBlciA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKCk7XHJcbiAgICBjb25zdCBkZWNvZGVkID0gand0SGVscGVyLmRlY29kZVRva2VuKHRva2VuKSBhcyBBdXRoZW50aWNhdGlvblRva2VuO1xyXG5cclxuICAgIGlmIChqd3RIZWxwZXIuaXNUb2tlbkV4cGlyZWQodG9rZW4pKSB7XHJcbiAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyID0ge1xyXG4gICAgICBhZG1pbjogZGVjb2RlZC5yb2xlID09PSAnQWRtaW4nLFxyXG4gICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZC5kaXNwbGF5TmFtZSxcclxuICAgICAgYWNjb3VudE5hbWU6IGRlY29kZWQud2luYWNjb3VudG5hbWUsXHJcbiAgICAgIGRpc3Rpbmd1aXNoZWROYW1lOiBkZWNvZGVkLmRpc3Rpbmd1aXNoZWROYW1lLFxyXG4gICAgICBlbXBsb3llZU51bWJlcjogZGVjb2RlZC5lbXBsb3llZU51bWJlcixcclxuICAgICAgbWVtYmVyT2Y6IGRlY29kZWQubWVtYmVyT2ZcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jb25maWcuc3RvcmFnZS5zZXRJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSwgdG9rZW4pO1xyXG4gICAgXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRlZCk7XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZ0NoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0aW5nKTtcclxuICB9XHJcblxyXG4gIGNoZWNrRm9yRXhpc3RpbmdUb2tlbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jb25maWcuc3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSk7XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZVVzZXIodG9rZW4pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSJdfQ==
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3Rva2VuL3NyYy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS3hELE1BQU0sT0FBTyxxQkFBcUI7SUFvQmhDLFlBQVk7SUFFWixtQkFBbUI7SUFDbkIsWUFBa0MsTUFBcUIsRUFDbkMsSUFBZ0I7UUFERixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ25DLFNBQUksR0FBSixJQUFJLENBQVk7UUF2QnBDLGdCQUFnQjtRQUNOLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNwRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELG1CQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsNEVBQTRFO1FBQ3BHLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsK0RBQStEO1FBb0IxRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtJQUNiLENBQUM7SUF2QkQsWUFBWTtJQUVaLG9CQUFvQjtJQUNw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QzNCLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7a0hBNUdVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBd0JjLFFBQVE7cUVBckJYLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICBBdXRoZW50aWNhdGVkVXNlcixcclxuICBBdXRoZW50aWNhdGlvblJlcXVlc3RcclxufSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24nO1xyXG5cclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Ub2tlbiB9IGZyb20gJy4uL21vZGVsL2F1dGhlbnRpY2F0aW9uLXRva2VuJztcclxuaW1wb3J0IHsgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL21vZGVsL3NlcnZpY2UtY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSBpbXBsZW1lbnRzIEFic3RyYWN0QXV0aGVudGljYXRpb25TZXJ2aWNlIHtcclxuICAvLyNyZWdpb24gRmllbGRzXHJcbiAgQE91dHB1dCgpIGF1dGhlbnRpY2F0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGluZ0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGF1dGhlbnRpY2F0aW9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYXV0aGVudGljYXRpbmcgPSBmYWxzZTsgLy8gRmxhZyBzZXQgdG8gdHJ1ZSB3aGlsZSB0aGUgc2VydmljZSBpcyBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlclxyXG4gIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZTsgLy8gRmxhZyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSB1c2VyIGlzIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkXHJcbiAgYXV0aGVudGljYXRlZFVzZXI6IEF1dGhlbnRpY2F0ZWRVc2VyIHwgdW5kZWZpbmVkOyAvLyBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3BlcnRpZXNcclxuICBnZXQgdXNlU2Vzc2lvblN0b3JhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmVUb2tlbkluU2Vzc2lvbicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0b3JhZ2UoKTogU3RvcmFnZSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VTZXNzaW9uU3RvcmFnZSA/XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlOlxyXG4gICAgICBsb2NhbFN0b3JhZ2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGNvbmZpZzogU2VydmljZUNvbmZpZyxcclxuICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyA/PyBuZXcgU2VydmljZUNvbmZpZygpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmRlZmVyVG9rZW5WYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yRXhpc3RpbmdUb2tlbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBVdGlsaXRpZXNcclxuICAvL0F1dGhlbnRpY2F0ZSB0aGUgdXNlciBhbmQgc3RvcmUgdGhlIHRva2VuIGluIExvY2FsIFN0b3JhZ2VcclxuICBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhZG1pbkdyb3VwPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXF1ZXN0OiBBdXRoZW50aWNhdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICBhZG1pbkdyb3VwOiBhZG1pbkdyb3VwXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGluZ0NoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0aW5nKTtcclxuXHJcbiAgICAvLyBTZW5kaW5nIGEgJ3JhdycgUE9TVCByZXF1ZXN0IHNvIHRoYXQgd2UgY2FuIHRlbGwgSHR0cENsaWVudCB0aGF0IHdlIGFyZSBleHBlY3RpbmcgdGV4dCBpbnN0ZWFkIG9mIEpzb25cclxuICAgIC8vIE90aGVyd2lzZSwgaXQgd291bGQgdGhyb3cgYW4gZXJyb3IgdHJ5aW5nIHRvIGRlY29kZSBKc29uIGZyb20gdGhlIHJlc3BvbnNlXHJcbiAgICB0aGlzLmh0dHAucmVxdWVzdCgnUE9TVCcsIGAke3RoaXMuY29uZmlnLmFwaVVybH0ke3RoaXMuY29uZmlnLmF1dGhlbnRpY2F0ZUVuZHBvaW50fWAsIHsgYm9keTogcmVxdWVzdCwgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHRva2VuKSA9PiB7XHJcbiAgICAgICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXIodG9rZW4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yLmVtaXQoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuIFxyXG4gIC8vTG9nb3V0IHRoZSB1c2VyIGFuZCBkZWxldGUgdGhlIHRva2VuIGZyb20gTG9jYWwgU3RvcmFnZVxyXG4gIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlbk5hbWUpKSB7XHJcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcbiBcclxuICB2YWxpZGF0ZVVzZXIodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgand0SGVscGVyID0gbmV3IEp3dEhlbHBlclNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGRlY29kZWQgPSBqd3RIZWxwZXIuZGVjb2RlVG9rZW4odG9rZW4pIGFzIEF1dGhlbnRpY2F0aW9uVG9rZW47XHJcblxyXG4gICAgaWYgKGp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcclxuICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRlZFVzZXIgPSB7XHJcbiAgICAgIGFkbWluOiBkZWNvZGVkLnJvbGUgPT09ICdBZG1pbicsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBkZWNvZGVkLmRpc3BsYXlOYW1lLFxyXG4gICAgICBhY2NvdW50TmFtZTogZGVjb2RlZC53aW5hY2NvdW50bmFtZSxcclxuICAgICAgZGlzdGluZ3Vpc2hlZE5hbWU6IGRlY29kZWQuZGlzdGluZ3Vpc2hlZE5hbWUsXHJcbiAgICAgIGVtcGxveWVlTnVtYmVyOiBkZWNvZGVkLmVtcGxveWVlTnVtYmVyLFxyXG4gICAgICBtZW1iZXJPZjogZGVjb2RlZC5tZW1iZXJPZlxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlbk5hbWUsIHRva2VuKTtcclxuICAgIFxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0ZWQpO1xyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZvckV4aXN0aW5nVG9rZW4oKTogdm9pZCB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnRva2VuTmFtZSk7XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZVVzZXIodG9rZW4pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSJdfQ==
|
|
@@ -32,6 +32,9 @@ export class BaseComponent {
|
|
|
32
32
|
this.data.choices :
|
|
33
33
|
null;
|
|
34
34
|
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.userInput = this.data.value;
|
|
37
|
+
}
|
|
35
38
|
close() {
|
|
36
39
|
let data;
|
|
37
40
|
switch (this.dialogType) {
|
|
@@ -86,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
86
89
|
}], closed: [{
|
|
87
90
|
type: Output
|
|
88
91
|
}] } });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9kaWFsb2cvc3JjL2NvbXBvbmVudHMvYmFzZS9iYXNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2RpYWxvZy9zcmMvY29tcG9uZW50cy9iYXNlL2Jhc2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUc5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQU9yRCxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQU1FLDhFQUE4RTtRQUM5RSxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ2YsZUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFFL0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFM0MsMkJBQXNCLEdBQUcsc0JBQXNCLENBQUM7S0EwRWpEO0lBcEVDLElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDO0lBQ1QsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDO0lBQ1QsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDO0lBQ1QsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFTLENBQUM7UUFFZCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckIsS0FBSyxVQUFVLENBQUMsT0FBTztnQkFDbkIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzlCO3dCQUNJLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUs7cUJBQ3hDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUM7Z0JBQ1QsTUFBTTtZQUNWLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM5Qjt3QkFDSSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7d0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUs7cUJBQ3hDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixNQUFNO1lBQ1YsS0FBSyxVQUFVLENBQUMsWUFBWTtnQkFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzlCO3dCQUNJLFFBQVEsRUFBRSxJQUFJO3dCQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUs7cUJBQ3hDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUM7Z0JBQ1QsTUFBTTtTQUNiO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQVMsQ0FBQztRQUVkLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsWUFBWSxFQUFFO1lBQzdDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5QjtvQkFDSSxRQUFRLEVBQUUsS0FBSztvQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLO2lCQUN4QyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDOzswR0FoRlUsYUFBYTs4RkFBYixhQUFhLHlJQ1oxQiw2OURBeUNxQjsyRkQ3QlIsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBT2pCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ01vZGUgfSBmcm9tICcuLi8uLi9tb2RlbC9jb25maXJtYXRpb24tZGlhbG9nLW1vZGUnO1xyXG5pbXBvcnQgeyBEaWFsb2dCYXNlRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL2RpYWxvZy1iYXNlLWRhdGEnO1xyXG5pbXBvcnQgeyBEaWFsb2dDaG9pY2VEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGlhbG9nLWNob2ljZS1kYXRhJztcclxuaW1wb3J0IHsgRGlhbG9nVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2RpYWxvZy10eXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY3AtZGlhbG9nLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9iYXNlLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gVGhpcyBpcyBzbyB0aGF0IERpYWxvZ1R5cGUgY2FuIGJlIHB1Ymxpc2ggYWNjZXNzaWJsZSBmcm9tIHRoZSBIVE1MIHRlbXBsYXRlXHJcbiAgRGlhbG9nVHlwZSA9IERpYWxvZ1R5cGU7XHJcbiAgQElucHV0KCkgZGlhbG9nVHlwZSA9IERpYWxvZ1R5cGUuTWVzc2FnZTtcclxuICBASW5wdXQoKSBkYXRhITogRGlhbG9nQmFzZURhdGE7XHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBDb25maXJtYXRpb25EaWFsb2dNb2RlID0gQ29uZmlybWF0aW9uRGlhbG9nTW9kZTtcclxuXHJcbiAgLy8gRm9ybSB2YWx1ZXNcclxuICB1c2VySW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBjaGVja2JveFZhbHVlITogYm9vbGVhbjtcclxuXHJcbiAgZ2V0IGN1c3RvbVRydWVUZXh0KCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jdXN0b21UcnVlRmFsc2VUZXh0ID9cclxuICAgICAgdGhpcy5kYXRhLmN1c3RvbVRydWVGYWxzZVRleHRbMF0gOlxyXG4gICAgICBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1c3RvbUZhbHNlVGV4dCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuY3VzdG9tVHJ1ZUZhbHNlVGV4dCA/XHJcbiAgICAgIHRoaXMuZGF0YS5jdXN0b21UcnVlRmFsc2VUZXh0WzFdIDpcclxuICAgICAgbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBjaG9pY2VzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dUeXBlID09PSBEaWFsb2dUeXBlLkNob2ljZSA/XHJcbiAgICAgICh0aGlzLmRhdGEgYXMgRGlhbG9nQ2hvaWNlRGF0YSkuY2hvaWNlcyA6XHJcbiAgICAgIG51bGw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlcklucHV0ID0gdGhpcy5kYXRhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YTogYW55O1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5kaWFsb2dUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBEaWFsb2dUeXBlLk1lc3NhZ2U6XHJcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmRhdGEuY2hlY2tib3hNZXNzYWdlID9cclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogdGhpcy5jaGVja2JveFZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9IDpcclxuICAgICAgICAgICAgICAgIG51bGw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGlhbG9nVHlwZS5JbnB1dDpcclxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YS5jaGVja2JveE1lc3NhZ2UgP1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnVzZXJJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogdGhpcy5jaGVja2JveFZhbHVlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9IDpcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcklucHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERpYWxvZ1R5cGUuQ29uZmlybWF0aW9uOlxyXG4gICAgICAgICAgICBkYXRhID0gdGhpcy5kYXRhLmNoZWNrYm94TWVzc2FnZSA/XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tib3g6IHRoaXMuY2hlY2tib3hWYWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSA6XHJcbiAgICAgICAgICAgICAgICB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsb3NlZC5lbWl0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGE6IGFueTtcclxuXHJcbiAgICBpZiAodGhpcy5kaWFsb2dUeXBlID09PSBEaWFsb2dUeXBlLkNvbmZpcm1hdGlvbikge1xyXG4gICAgICAgIGRhdGEgPSB0aGlzLmRhdGEuY2hlY2tib3hNZXNzYWdlID9cclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tib3g6IHRoaXMuY2hlY2tib3hWYWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICB9IDpcclxuICAgICAgICAgICAgZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbG9zZWQuZW1pdChkYXRhKTtcclxuICB9XHJcbn1cclxuIiwiPGgyICpuZ0lmPVwiZGF0YT8udGl0bGVcIiBtYXQtZGlhbG9nLXRpdGxlIFtpbm5lckhUTUxdPVwiZGF0YS50aXRsZVwiPjwvaDI+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiAqbmdJZj1cImRhdGE/Lm1lc3NhZ2VcIiBbaW5uZXJIVE1MXT1cImRhdGEubWVzc2FnZVwiPjwvZGl2PlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZGlhbG9nVHlwZSA9PT0gRGlhbG9nVHlwZS5JbnB1dFwiPlxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cImRhdGEucGxhY2Vob2xkZXIgPz8gJydcIiBbKG5nTW9kZWwpXT1cInVzZXJJbnB1dFwiPjwvdGV4dGFyZWE+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxkaXYgaWQ9XCJjaGVja2JveFwiICpuZ0lmPVwiZGF0YT8uY2hlY2tib3hNZXNzYWdlXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJjaGVja2JveFZhbHVlXCI+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImRhdGEuY2hlY2tib3hNZXNzYWdlXCI+PC9zcGFuPlxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuXG48bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaWFsb2dUeXBlICE9PSBEaWFsb2dUeXBlLkNob2ljZVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgW2Rpc2FibGVkXT1cImRpYWxvZ1R5cGUgPT09IERpYWxvZ1R5cGUuSW5wdXQgJiYgIXVzZXJJbnB1dFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nU3dpdGNoXT1cImRhdGEubW9kZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJDb25maXJtYXRpb25EaWFsb2dNb2RlLlllc05vXCI+WWVzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJDb25maXJtYXRpb25EaWFsb2dNb2RlLlRydWVGYWxzZVwiPlRydWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIkNvbmZpcm1hdGlvbkRpYWxvZ01vZGUuQ3VzdG9tXCI+e3sgY3VzdG9tVHJ1ZVRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5PSzwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkaWFsb2dUeXBlICE9PSBEaWFsb2dUeXBlLk1lc3NhZ2VcIiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5cbiAgICAgICAgICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJkYXRhLm1vZGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiQ29uZmlybWF0aW9uRGlhbG9nTW9kZS5ZZXNOb1wiPk5vPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJDb25maXJtYXRpb25EaWFsb2dNb2RlLlRydWVGYWxzZVwiPkZhbHNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJDb25maXJtYXRpb25EaWFsb2dNb2RlLkN1c3RvbVwiPnt7IGN1c3RvbUZhbHNlVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PkNhbmNlbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlhbG9nVHlwZSA9PT0gRGlhbG9nVHlwZS5DaG9pY2VcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGNob2ljZXM7IGxldCBpID0gaW5kZXhcIiBbbWF0RGlhbG9nQ2xvc2VdPVwiaVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgY2hvaWNlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
|
|
@@ -7,8 +7,8 @@ import { CommonModule } from '@angular/common';
|
|
|
7
7
|
//import { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';
|
|
8
8
|
class ServiceConfig extends ServiceConfig$1 {
|
|
9
9
|
// See the comment in the library's main service-config.ts file for an explanation
|
|
10
|
-
constructor(useSsl_or_customApiUrl = false,
|
|
11
|
-
super(useSsl_or_customApiUrl,
|
|
10
|
+
constructor(useSsl_or_customApiUrl = false, tokenName = 'user', authenticateEndpoint = '/authenticate') {
|
|
11
|
+
super(useSsl_or_customApiUrl, tokenName, authenticateEndpoint);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -29,6 +29,16 @@ class AuthenticationService {
|
|
|
29
29
|
this.checkForExistingToken();
|
|
30
30
|
}
|
|
31
31
|
//#endregion
|
|
32
|
+
//#region Properties
|
|
33
|
+
get useSessionStorage() {
|
|
34
|
+
return !!localStorage.getItem('storeTokenInSession');
|
|
35
|
+
}
|
|
36
|
+
get storage() {
|
|
37
|
+
return this.useSessionStorage ?
|
|
38
|
+
sessionStorage :
|
|
39
|
+
localStorage;
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
32
42
|
//#region Utilities
|
|
33
43
|
//Authenticate the user and store the token in Local Storage
|
|
34
44
|
login(username, password, adminGroup) {
|
|
@@ -58,8 +68,8 @@ class AuthenticationService {
|
|
|
58
68
|
}
|
|
59
69
|
//Logout the user and delete the token from Local Storage
|
|
60
70
|
logout() {
|
|
61
|
-
if (this.
|
|
62
|
-
this.
|
|
71
|
+
if (this.storage.getItem(this.config.tokenName)) {
|
|
72
|
+
this.storage.removeItem(this.config.tokenName);
|
|
63
73
|
}
|
|
64
74
|
this.authenticatedUser = undefined;
|
|
65
75
|
this.authenticated = false;
|
|
@@ -74,14 +84,14 @@ class AuthenticationService {
|
|
|
74
84
|
employeeNumber: token.employeeNumber,
|
|
75
85
|
memberOf: token.memberOf.join(',')
|
|
76
86
|
};
|
|
77
|
-
this.
|
|
87
|
+
this.storage.setItem(this.config.tokenName, JSON.stringify(token));
|
|
78
88
|
this.authenticated = true;
|
|
79
89
|
this.authenticatedChanged.emit(this.authenticated);
|
|
80
90
|
this.authenticating = false;
|
|
81
91
|
this.authenticatingChanged.emit(this.authenticating);
|
|
82
92
|
}
|
|
83
93
|
checkForExistingToken() {
|
|
84
|
-
const token = this.
|
|
94
|
+
const token = this.storage.getItem(this.config.tokenName);
|
|
85
95
|
if (token) {
|
|
86
96
|
this.validateUser(JSON.parse(token));
|
|
87
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleavelandprice-ngx-lib-authentication-object.mjs","sources":["../../../../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 { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n \r\n // See the comment in the library's main service-config.ts file for an explanation\r\n constructor(useSsl_or_customApiUrl: boolean | string = false,\r\n storageMode: 'local' | 'session' = 'local',\r\n tokenName = 'user',\r\n authenticateEndpoint = '/authenticate'\r\n ) {\r\n super(useSsl_or_customApiUrl, storageMode, tokenName, authenticateEndpoint);\r\n }\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 { 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 | undefined; // Object representing the authenticated user\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = this.config ?? new ServiceConfig();\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 (this.config.storage.getItem(this.config.tokenName)) {\r\n this.config.storage.removeItem(this.config.tokenName);\r\n }\r\n\r\n this.authenticatedUser = undefined;\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 this.config.storage.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 = this.config.storage.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":["BaseServiceConfig","i1.ServiceConfig"],"mappings":";;;;;;AAAA;AAGM,MAAO,aAAc,SAAQA,eAAiB,CAAA;;AAGhD,IAAA,WAAA,CAAY,sBAA2C,GAAA,KAAK,EACxD,WAAA,GAAmC,OAAO,EAC1C,SAAS,GAAG,MAAM,EAClB,oBAAoB,GAAG,eAAe,EAAA;QAEtC,KAAK,CAAC,sBAAsB,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;KAC/E;AACJ;;MCGY,qBAAqB,CAAA;;;IAW9B,WAAgC,CAAA,MAAqB,EACnC,IAAgB,EAAA;;AADF,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;AACnC,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;;AAV1B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAW,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;AACpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;AACnD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC;QAQR,IAAI,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,aAAa,EAAE,CAAC;QAEjD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC1C;;;;AAKD,IAAA,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAmB,EAAA;AAC3D,QAAA,MAAM,OAAO,GAA0B;AACrC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,UAAU;SACvB,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAE,CAAA,EAAE,OAAO,CAAC;AAChF,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAY,CAAC,CAAC;AACjC,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,MAAM,EAAE,CAAC;AACf,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC;AACF,SAAA,CAAC,CAAC;KACN;;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,KAAW,EAAA;QACtB,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,cAAc;YACjC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SACnC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAE1E,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACtD;IAED,qBAAqB,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAS,CAAC,CAAC;AAC9C,SAAA;KACF;;kHApFU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;8BAYgB,QAAQ;;yBATb,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;MCNI,YAAY,CAAA;AAWvB,IAAA,WAAA,CAAoC,YAA0B,EAAA;AAC5D,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CACb,iEAAiE,CAAC,CAAC;AACtE,SAAA;KACF;IAfD,OAAO,OAAO,CAAC,MAAqB,EAAA;QAClC,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,SAAS,EAAE;gBACT,qBAAqB;AACrB,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7C,aAAA;SACF,CAAC;KACH;;yGATU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAJrB,YAAY,CAAA,EAAA,CAAA,CAAA;AAIH,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAJrB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAIH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;iBACZ,CAAA;;;8BAYc,QAAQ;;8BAAI,QAAQ;;;;ACzBnC;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cleavelandprice-ngx-lib-authentication-object.mjs","sources":["../../../../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 { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n \r\n // See the comment in the library's main service-config.ts file for an explanation\r\n constructor(useSsl_or_customApiUrl: boolean | string = false,\r\n tokenName = 'user',\r\n authenticateEndpoint = '/authenticate'\r\n ) {\r\n super(useSsl_or_customApiUrl, tokenName, authenticateEndpoint);\r\n }\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 { 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 | undefined; // Object representing the authenticated user\r\n //#endregion\r\n\r\n //#region Properties\r\n get useSessionStorage(): boolean {\r\n return !!localStorage.getItem('storeTokenInSession');\r\n }\r\n\r\n get storage(): Storage {\r\n return this.useSessionStorage ?\r\n sessionStorage:\r\n localStorage;\r\n }\r\n //#endregion\r\n\r\n //#region Lifecycle\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = this.config ?? new ServiceConfig();\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 (this.storage.getItem(this.config.tokenName)) {\r\n this.storage.removeItem(this.config.tokenName);\r\n }\r\n\r\n this.authenticatedUser = undefined;\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 this.storage.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 = this.storage.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":["BaseServiceConfig","i1.ServiceConfig"],"mappings":";;;;;;AAAA;AAGM,MAAO,aAAc,SAAQA,eAAiB,CAAA;;IAGhD,WAAY,CAAA,sBAAA,GAA2C,KAAK,EACxD,SAAS,GAAG,MAAM,EAClB,oBAAoB,GAAG,eAAe,EAAA;AAEtC,QAAA,KAAK,CAAC,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;KAClE;AACJ;;MCIY,qBAAqB,CAAA;;;IAuB9B,WAAgC,CAAA,MAAqB,EACnC,IAAgB,EAAA;;AADF,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;AACnC,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;;AAtB1B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAW,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;AACpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;AACnD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC;QAoBR,IAAI,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,aAAa,EAAE,CAAC;QAEjD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC1C;;;AAlBD,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;KACtD;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,iBAAiB;AAC3B,YAAA,cAAc;AACd,YAAA,YAAY,CAAC;KAChB;;;;AAeD,IAAA,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAmB,EAAA;AAC3D,QAAA,MAAM,OAAO,GAA0B;AACrC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,UAAU;SACvB,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAE,CAAA,EAAE,OAAO,CAAC;AAChF,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAY,CAAC,CAAC;AACjC,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,MAAM,EAAE,CAAC;AACf,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpC;AACF,SAAA,CAAC,CAAC;KACN;;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAChD,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,KAAW,EAAA;QACtB,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,cAAc;YACjC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SACnC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACtD;IAED,qBAAqB,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC1D,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAS,CAAC,CAAC;AAC9C,SAAA;KACF;;kHAhGU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;8BAwBgB,QAAQ;;yBArBb,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;;;MCNI,YAAY,CAAA;AAWvB,IAAA,WAAA,CAAoC,YAA0B,EAAA;AAC5D,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CACb,iEAAiE,CAAC,CAAC;AACtE,SAAA;KACF;IAfD,OAAO,OAAO,CAAC,MAAqB,EAAA;QAClC,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,SAAS,EAAE;gBACT,qBAAqB;AACrB,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7C,aAAA;SACF,CAAC;KACH;;yGATU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAJrB,YAAY,CAAA,EAAA,CAAA,CAAA;AAIH,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAJrB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAIH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;iBACZ,CAAA;;;8BAYc,QAAQ;;8BAAI,QAAQ;;;;ACzBnC;;AAEG;;;;"}
|
|
@@ -6,7 +6,7 @@ import * as i2 from '@angular/common/http';
|
|
|
6
6
|
import * as i3 from '@cleavelandprice/ngx-lib/sharepoint';
|
|
7
7
|
import { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';
|
|
8
8
|
import * as i4 from '@angular/forms';
|
|
9
|
-
import {
|
|
9
|
+
import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
10
10
|
import * as i1 from '@angular/material/dialog';
|
|
11
11
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
12
12
|
import * as i3$1 from '@angular/common';
|
|
@@ -21,12 +21,15 @@ import * as i8 from '@angular/material/input';
|
|
|
21
21
|
import { MatInputModule } from '@angular/material/input';
|
|
22
22
|
import * as i9 from '@angular/material/progress-spinner';
|
|
23
23
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
24
|
+
import * as i10 from '@angular/material/slide-toggle';
|
|
25
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
24
26
|
|
|
25
27
|
//import { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';
|
|
26
28
|
class ServiceConfig extends ServiceConfig$1 {
|
|
27
29
|
// See the comment in the library's main service-config.ts file for an explanation
|
|
28
|
-
constructor(useSsl_or_customApiUrl = false,
|
|
29
|
-
super(useSsl_or_customApiUrl,
|
|
30
|
+
constructor(useSsl_or_customApiUrl = false, showRememberMeOption = true, tokenName = 'token', authenticateEndpoint = '/authenticate/token') {
|
|
31
|
+
super(useSsl_or_customApiUrl, tokenName, authenticateEndpoint);
|
|
32
|
+
this.showRememberMeOption = showRememberMeOption;
|
|
30
33
|
}
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -68,7 +71,7 @@ class AuthenticationService extends AuthenticationService$1 {
|
|
|
68
71
|
employeeNumber: decoded.employeeNumber,
|
|
69
72
|
memberOf: decoded.memberOf
|
|
70
73
|
};
|
|
71
|
-
this.
|
|
74
|
+
this.storage.setItem(this.config.tokenName, token);
|
|
72
75
|
this.getPhoto();
|
|
73
76
|
this.authenticated = true;
|
|
74
77
|
this.authenticatedChanged.emit(this.authenticated);
|
|
@@ -108,10 +111,10 @@ class LoginFormComponent {
|
|
|
108
111
|
var _a;
|
|
109
112
|
this.dialogRef = dialogRef;
|
|
110
113
|
this.authenticationService = authenticationService;
|
|
111
|
-
this.form = new
|
|
112
|
-
username: new
|
|
113
|
-
password: new
|
|
114
|
-
adminGroup: new
|
|
114
|
+
this.form = new FormGroup({
|
|
115
|
+
username: new FormControl(null, [Validators.required]),
|
|
116
|
+
password: new FormControl(null, [Validators.required]),
|
|
117
|
+
adminGroup: new FormControl()
|
|
115
118
|
});
|
|
116
119
|
(_a = this.form.get('adminGroup')) === null || _a === void 0 ? void 0 : _a.setValue(data.adminGroup);
|
|
117
120
|
}
|
|
@@ -139,12 +142,23 @@ class LoginFormComponent {
|
|
|
139
142
|
console.log('Authentication error', err);
|
|
140
143
|
this.errorMessage = `${err.name}: ${err.statusText}`;
|
|
141
144
|
}
|
|
145
|
+
changeTokenStorageMode(checked) {
|
|
146
|
+
const keyName = 'storeTokenInSession';
|
|
147
|
+
if (checked) {
|
|
148
|
+
if (localStorage.getItem(keyName)) {
|
|
149
|
+
localStorage.removeItem(keyName);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
localStorage.setItem(keyName, 'true');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
142
156
|
}
|
|
143
157
|
LoginFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoginFormComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
-
LoginFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: LoginFormComponent, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
158
|
+
LoginFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: LoginFormComponent, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle *ngIf=\"authenticationService.config.showRememberMeOption\" [checked]=\"!authenticationService.useSessionStorage\" (change)=\"changeTokenStorageMode($event.checked)\">\r\n Remember me next time\r\n </mat-slide-toggle>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }] });
|
|
145
159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoginFormComponent, decorators: [{
|
|
146
160
|
type: Component,
|
|
147
|
-
args: [{ template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
|
|
161
|
+
args: [{ template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle *ngIf=\"authenticationService.config.showRememberMeOption\" [checked]=\"!authenticationService.useSessionStorage\" (change)=\"changeTokenStorageMode($event.checked)\">\r\n Remember me next time\r\n </mat-slide-toggle>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
|
|
148
162
|
}], ctorParameters: function () {
|
|
149
163
|
return [{ type: undefined, decorators: [{
|
|
150
164
|
type: Inject,
|
|
@@ -208,7 +222,8 @@ GuiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
|
|
|
208
222
|
MatFormFieldModule,
|
|
209
223
|
MatIconModule,
|
|
210
224
|
MatInputModule,
|
|
211
|
-
MatProgressSpinnerModule
|
|
225
|
+
MatProgressSpinnerModule,
|
|
226
|
+
MatSlideToggleModule], exports: [LoginComponent,
|
|
212
227
|
LoginFormComponent] });
|
|
213
228
|
GuiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: GuiModule, imports: [CommonModule,
|
|
214
229
|
ReactiveFormsModule,
|
|
@@ -217,7 +232,8 @@ GuiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.
|
|
|
217
232
|
MatFormFieldModule,
|
|
218
233
|
MatIconModule,
|
|
219
234
|
MatInputModule,
|
|
220
|
-
MatProgressSpinnerModule
|
|
235
|
+
MatProgressSpinnerModule,
|
|
236
|
+
MatSlideToggleModule] });
|
|
221
237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: GuiModule, decorators: [{
|
|
222
238
|
type: NgModule,
|
|
223
239
|
args: [{
|
|
@@ -233,7 +249,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
233
249
|
MatFormFieldModule,
|
|
234
250
|
MatIconModule,
|
|
235
251
|
MatInputModule,
|
|
236
|
-
MatProgressSpinnerModule
|
|
252
|
+
MatProgressSpinnerModule,
|
|
253
|
+
MatSlideToggleModule
|
|
237
254
|
],
|
|
238
255
|
exports: [
|
|
239
256
|
LoginComponent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleavelandprice-ngx-lib-authentication-token-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/services/authentication.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login-form/login-form.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login-form/login-form.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login/login.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login/login.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/token-gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/cleavelandprice-ngx-lib-authentication-token-gui.ts"],"sourcesContent":["//import { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication/token';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n // See the comment in the library's main service-config.ts file for an explanation\r\n constructor(useSsl_or_customApiUrl: boolean | string = false,\r\n storageMode: 'local' | 'session' = 'local',\r\n tokenName = 'token',\r\n authenticateEndpoint = '/authenticate/token'\r\n ) {\r\n super(useSsl_or_customApiUrl, storageMode, tokenName, authenticateEndpoint);\r\n }\r\n}","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\n\r\nimport { SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport {\r\n AuthenticationService as TokenAuthenticationService,\r\n AuthenticationToken\r\n} from '@cleavelandprice/ngx-lib/authentication/token';\r\n\r\nimport { ServiceConfig } from '../model/service-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService extends TokenAuthenticationService {\r\n //#region Lifecycle\r\n constructor(@Optional() override config: ServiceConfig,\r\n override http: HttpClient,\r\n private sharePointService: SharePointService) {\r\n\r\n config = config ?? new ServiceConfig();\r\n /*config = {\r\n ...new ServiceConfig(),\r\n ...config,\r\n\r\n // 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\r\n // If a custom config wasn't passed in, then deferTokenValidation would have been true from defaultConfig\r\n deferTokenValidation: true\r\n };*/\r\n\r\n // 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\r\n // If a custom config wasn't passed in, then deferTokenValidation would have been true from defaultConfig\r\n config.deferTokenValidation = true\r\n\r\n super(config, http);\r\n\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n override validateUser(token: string): void {\r\n const jwtHelper = new JwtHelperService();\r\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\r\n\r\n if (jwtHelper.isTokenExpired(token)) {\r\n this.logout();\r\n return;\r\n }\r\n\r\n this.authenticatedUser = {\r\n admin: decoded.role === 'Admin',\r\n displayName: decoded.displayName,\r\n accountName: decoded.winaccountname,\r\n distinguishedName: decoded.distinguishedName,\r\n employeeNumber: decoded.employeeNumber,\r\n memberOf: decoded.memberOf\r\n };\r\n\r\n this.config.storage.setItem(this.config.tokenName, token);\r\n\r\n this.getPhoto();\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 private getPhoto(): void {\r\n this.sharePointService.getPhotos()\r\n .subscribe(photos => {\r\n // The user may have been logged out by the time the photos came back\r\n if (!this.authenticatedUser?.employeeNumber) {\r\n return;\r\n }\r\n\r\n const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser!.employeeNumber);\r\n\r\n if (photo) {\r\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\r\n }\r\n });\r\n }\r\n //#endregion\r\n}","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LoginFormData } from '../../model/login-form-data';\r\nimport { AuthenticationService } from '../../services/authentication.service';\r\n\r\n@Component({\r\n templateUrl: './login-form.component.html',\r\n styleUrls: [\r\n './login-form.component.css',\r\n '../../../../../../styles/mat-icon.css'\r\n ]\r\n})\r\nexport class LoginFormComponent implements OnInit, OnDestroy {\r\n errorMessage: string | undefined;\r\n authenticatedChangedSubscription!: Subscription;\r\n authenticationErrorSubscription!: Subscription;\r\n\r\n form = new UntypedFormGroup({\r\n username: new UntypedFormControl(null, [ Validators.required ]),\r\n password: new UntypedFormControl(null, [ Validators.required ]),\r\n adminGroup: new UntypedFormControl()\r\n });\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) data: LoginFormData,\r\n public dialogRef: MatDialogRef<LoginFormComponent>,\r\n public authenticationService: AuthenticationService) {\r\n\r\n this.form.get('adminGroup')?.setValue(data.adminGroup);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.authenticatedChangedSubscription = this.authenticationService.authenticatedChanged\r\n .subscribe(this.authChangedHandler.bind(this));\r\n\r\n this.authenticationErrorSubscription = this.authenticationService.authenticationError\r\n .subscribe(this.errorHandler.bind(this));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.authenticationErrorSubscription.unsubscribe();\r\n this.authenticatedChangedSubscription.unsubscribe();\r\n }\r\n\r\n authenticate() {\r\n this.errorMessage = undefined;\r\n const { username, password, adminGroup } = this.form.value;\r\n this.authenticationService.login(username, password, adminGroup);\r\n }\r\n\r\n private authChangedHandler(authenticated: boolean): void {\r\n if (authenticated) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n private errorHandler(err: any): void {\r\n console.log('Authentication error', err);\r\n this.errorMessage = `${err.name}: ${err.statusText}`;\r\n }\r\n}\r\n","<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>","import { Component, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';\r\n\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { AuthenticationService } from '../../services/authentication.service';\r\n\r\n@Component({\r\n selector: 'cp-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: [\r\n './login.component.css',\r\n '../../../../../../styles/mat-icon.css'\r\n ]\r\n})\r\nexport class LoginComponent {\r\n @Input() adminGroup!: string;\r\n\r\n constructor(private dialog: MatDialog,\r\n public authenticationService: AuthenticationService) {\r\n }\r\n\r\n login(): void {\r\n this.dialog.open(LoginFormComponent, {\r\n data: { adminGroup: this.adminGroup }\r\n });\r\n }\r\n\r\n confirmLogout(): void {\r\n this.dialog.open(ConfirmationComponent, {\r\n data: { message: `Are you sure you want to logout?` }\r\n })\r\n .afterClosed()\r\n .subscribe(result => {\r\n if (result) {\r\n this.authenticationService.logout();\r\n }\r\n });\r\n }\r\n}\r\n","<div id=\"user-id\">\r\n <!-- Logged out -->\r\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\r\n fontIcon=\"account_circle\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\">\r\n </mat-icon>\r\n\r\n <!-- Logged in -->\r\n <ng-container *ngIf=\"authenticationService.authenticated\">\r\n <!-- With photo -->\r\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\r\n id=\"authenticated-user-image\"\r\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n \r\n <!-- Without photo -->\r\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\r\n fontIcon=\"account_circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\">\r\n </mat-icon>\r\n \r\n <!-- Name -->\r\n <div id=\"user-name\">\r\n {{ authenticationService.authenticatedUser?.displayName }}\r\n </div>\r\n </ng-container>\r\n</div>","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\n\r\nimport { AuthenticationService } from './services/authentication.service';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginFormComponent } from './components/login-form/login-form.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n \r\n MatButtonModule,\r\n MatDialogModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatProgressSpinnerModule\r\n ],\r\n exports: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ]\r\n})\r\nexport class GuiModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<GuiModule> {\r\n return {\r\n ngModule: GuiModule,\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: GuiModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'GuiModule 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":["BaseServiceConfig","TokenAuthenticationService","i1.ServiceConfig","i2.AuthenticationService","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cleavelandprice-ngx-lib-authentication-token-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/services/authentication.service.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login-form/login-form.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login-form/login-form.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login/login.component.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/components/login/login.component.html","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/token-gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/authentication/token/gui/src/cleavelandprice-ngx-lib-authentication-token-gui.ts"],"sourcesContent":["//import { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';\r\nimport { ServiceConfig as BaseServiceConfig } from '@cleavelandprice/ngx-lib/authentication/token';\r\n\r\nexport class ServiceConfig extends BaseServiceConfig {\r\n // See the comment in the library's main service-config.ts file for an explanation\r\n constructor(useSsl_or_customApiUrl: boolean | string = false,\r\n public showRememberMeOption = true,\r\n tokenName = 'token',\r\n authenticateEndpoint = '/authenticate/token'\r\n ) {\r\n super(useSsl_or_customApiUrl, tokenName, authenticateEndpoint);\r\n }\r\n}","import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\n\r\nimport { SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport {\r\n AuthenticationService as TokenAuthenticationService,\r\n AuthenticationToken\r\n} from '@cleavelandprice/ngx-lib/authentication/token';\r\n\r\nimport { ServiceConfig } from '../model/service-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService extends TokenAuthenticationService {\r\n //#region Lifecycle\r\n constructor(@Optional() override config: ServiceConfig,\r\n override http: HttpClient,\r\n private sharePointService: SharePointService) {\r\n\r\n config = config ?? new ServiceConfig();\r\n /*config = {\r\n ...new ServiceConfig(),\r\n ...config,\r\n\r\n // 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\r\n // If a custom config wasn't passed in, then deferTokenValidation would have been true from defaultConfig\r\n deferTokenValidation: true\r\n };*/\r\n\r\n // 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\r\n // If a custom config wasn't passed in, then deferTokenValidation would have been true from defaultConfig\r\n config.deferTokenValidation = true\r\n\r\n super(config, http);\r\n\r\n this.checkForExistingToken();\r\n }\r\n //#endregion\r\n\r\n //#region Utilities\r\n override validateUser(token: string): void {\r\n const jwtHelper = new JwtHelperService();\r\n const decoded = jwtHelper.decodeToken(token) as AuthenticationToken;\r\n\r\n if (jwtHelper.isTokenExpired(token)) {\r\n this.logout();\r\n return;\r\n }\r\n\r\n this.authenticatedUser = {\r\n admin: decoded.role === 'Admin',\r\n displayName: decoded.displayName,\r\n accountName: decoded.winaccountname,\r\n distinguishedName: decoded.distinguishedName,\r\n employeeNumber: decoded.employeeNumber,\r\n memberOf: decoded.memberOf\r\n };\r\n\r\n this.storage.setItem(this.config.tokenName, token);\r\n\r\n this.getPhoto();\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 private getPhoto(): void {\r\n this.sharePointService.getPhotos()\r\n .subscribe(photos => {\r\n // The user may have been logged out by the time the photos came back\r\n if (!this.authenticatedUser?.employeeNumber) {\r\n return;\r\n }\r\n\r\n const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser!.employeeNumber);\r\n\r\n if (photo) {\r\n this.authenticatedUser.photoUrl = photo.encodedAbsUrl;\r\n }\r\n });\r\n }\r\n //#endregion\r\n}","import { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { FormGroup, Validators, FormControl } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LoginFormData } from '../../model/login-form-data';\r\nimport { AuthenticationService } from '../../services/authentication.service';\r\n\r\n@Component({\r\n templateUrl: './login-form.component.html',\r\n styleUrls: [\r\n './login-form.component.css',\r\n '../../../../../../styles/mat-icon.css'\r\n ]\r\n})\r\nexport class LoginFormComponent implements OnInit, OnDestroy {\r\n errorMessage: string | undefined;\r\n authenticatedChangedSubscription!: Subscription;\r\n authenticationErrorSubscription!: Subscription;\r\n\r\n form = new FormGroup({\r\n username: new FormControl(null, [ Validators.required ]),\r\n password: new FormControl(null, [ Validators.required ]),\r\n adminGroup: new FormControl()\r\n });\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) data: LoginFormData,\r\n public dialogRef: MatDialogRef<LoginFormComponent>,\r\n public authenticationService: AuthenticationService) {\r\n\r\n this.form.get('adminGroup')?.setValue(data.adminGroup);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.authenticatedChangedSubscription = this.authenticationService.authenticatedChanged\r\n .subscribe(this.authChangedHandler.bind(this));\r\n\r\n this.authenticationErrorSubscription = this.authenticationService.authenticationError\r\n .subscribe(this.errorHandler.bind(this));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.authenticationErrorSubscription.unsubscribe();\r\n this.authenticatedChangedSubscription.unsubscribe();\r\n }\r\n\r\n authenticate() {\r\n this.errorMessage = undefined;\r\n const { username, password, adminGroup } = this.form.value;\r\n this.authenticationService.login(username!, password!, adminGroup);\r\n }\r\n\r\n private authChangedHandler(authenticated: boolean): void {\r\n if (authenticated) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n private errorHandler(err: any): void {\r\n console.log('Authentication error', err);\r\n this.errorMessage = `${err.name}: ${err.statusText}`;\r\n }\r\n\r\n changeTokenStorageMode(checked: boolean): void {\r\n const keyName = 'storeTokenInSession';\r\n\r\n if (checked) {\r\n if (localStorage.getItem(keyName)) {\r\n localStorage.removeItem(keyName);\r\n }\r\n } else {\r\n localStorage.setItem(keyName, 'true');\r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content>\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-form-field>\r\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle *ngIf=\"authenticationService.config.showRememberMeOption\" [checked]=\"!authenticationService.useSessionStorage\" (change)=\"changeTokenStorageMode($event.checked)\">\r\n Remember me next time\r\n </mat-slide-toggle>\r\n </form>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\r\n {{ errorMessage }}\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\r\n [disabled]=\"form.invalid\">\r\n <mat-icon fontIcon=\"done\"></mat-icon>\r\n <span>OK</span>\r\n </button>\r\n\r\n <button mat-raised-button (click)=\"dialogRef.close()\">\r\n <mat-icon fontIcon=\"close\"></mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n</mat-dialog-actions>","import { Component, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';\r\n\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { AuthenticationService } from '../../services/authentication.service';\r\n\r\n@Component({\r\n selector: 'cp-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: [\r\n './login.component.css',\r\n '../../../../../../styles/mat-icon.css'\r\n ]\r\n})\r\nexport class LoginComponent {\r\n @Input() adminGroup!: string;\r\n\r\n constructor(private dialog: MatDialog,\r\n public authenticationService: AuthenticationService) {\r\n }\r\n\r\n login(): void {\r\n this.dialog.open(LoginFormComponent, {\r\n data: { adminGroup: this.adminGroup }\r\n });\r\n }\r\n\r\n confirmLogout(): void {\r\n this.dialog.open(ConfirmationComponent, {\r\n data: { message: `Are you sure you want to logout?` }\r\n })\r\n .afterClosed()\r\n .subscribe(result => {\r\n if (result) {\r\n this.authenticationService.logout();\r\n }\r\n });\r\n }\r\n}\r\n","<div id=\"user-id\">\r\n <!-- Logged out -->\r\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\r\n fontIcon=\"account_circle\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\">\r\n </mat-icon>\r\n\r\n <!-- Logged in -->\r\n <ng-container *ngIf=\"authenticationService.authenticated\">\r\n <!-- With photo -->\r\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\r\n id=\"authenticated-user-image\"\r\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n \r\n <!-- Without photo -->\r\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\r\n fontIcon=\"account_circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\">\r\n </mat-icon>\r\n \r\n <!-- Name -->\r\n <div id=\"user-name\">\r\n {{ authenticationService.authenticatedUser?.displayName }}\r\n </div>\r\n </ng-container>\r\n</div>","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\n\r\nimport { AuthenticationService } from './services/authentication.service';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginFormComponent } from './components/login-form/login-form.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n \r\n MatButtonModule,\r\n MatDialogModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule\r\n ],\r\n exports: [\r\n LoginComponent,\r\n LoginFormComponent\r\n ]\r\n})\r\nexport class GuiModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<GuiModule> {\r\n return {\r\n ngModule: GuiModule,\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: GuiModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'GuiModule 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":["BaseServiceConfig","TokenAuthenticationService","i1.ServiceConfig","i2.AuthenticationService","i3","i4"],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ import { CommonModule } from '@angular/common';
|
|
|
8
8
|
//import { ServiceConfig as NgxLibServiceConfig } from '@cleavelandprice/ngx-lib';
|
|
9
9
|
class ServiceConfig extends ServiceConfig$1 {
|
|
10
10
|
// See the comment in the library's main service-config.ts file for an explanation
|
|
11
|
-
constructor(useSsl_or_customApiUrl = false,
|
|
12
|
-
super(useSsl_or_customApiUrl,
|
|
11
|
+
constructor(useSsl_or_customApiUrl = false, tokenName = 'token', authenticateEndpoint = '/authenticate/token') {
|
|
12
|
+
super(useSsl_or_customApiUrl, tokenName, authenticateEndpoint);
|
|
13
13
|
this.deferTokenValidation = false;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -33,6 +33,16 @@ class AuthenticationService {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
//#endregion
|
|
36
|
+
//#region Properties
|
|
37
|
+
get useSessionStorage() {
|
|
38
|
+
return !!localStorage.getItem('storeTokenInSession');
|
|
39
|
+
}
|
|
40
|
+
get storage() {
|
|
41
|
+
return this.useSessionStorage ?
|
|
42
|
+
sessionStorage :
|
|
43
|
+
localStorage;
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
36
46
|
//#region Utilities
|
|
37
47
|
//Authenticate the user and store the token in Local Storage
|
|
38
48
|
login(username, password, adminGroup) {
|
|
@@ -64,8 +74,8 @@ class AuthenticationService {
|
|
|
64
74
|
}
|
|
65
75
|
//Logout the user and delete the token from Local Storage
|
|
66
76
|
logout() {
|
|
67
|
-
if (this.
|
|
68
|
-
this.
|
|
77
|
+
if (this.storage.getItem(this.config.tokenName)) {
|
|
78
|
+
this.storage.removeItem(this.config.tokenName);
|
|
69
79
|
}
|
|
70
80
|
this.authenticatedUser = undefined;
|
|
71
81
|
this.authenticated = false;
|
|
@@ -86,14 +96,14 @@ class AuthenticationService {
|
|
|
86
96
|
employeeNumber: decoded.employeeNumber,
|
|
87
97
|
memberOf: decoded.memberOf
|
|
88
98
|
};
|
|
89
|
-
this.
|
|
99
|
+
this.storage.setItem(this.config.tokenName, token);
|
|
90
100
|
this.authenticated = true;
|
|
91
101
|
this.authenticatedChanged.emit(this.authenticated);
|
|
92
102
|
this.authenticating = false;
|
|
93
103
|
this.authenticatingChanged.emit(this.authenticating);
|
|
94
104
|
}
|
|
95
105
|
checkForExistingToken() {
|
|
96
|
-
const token = this.
|
|
106
|
+
const token = this.storage.getItem(this.config.tokenName);
|
|
97
107
|
if (token) {
|
|
98
108
|
this.validateUser(token);
|
|
99
109
|
}
|