ssi-security-commons 0.16.31 → 0.16.32
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.
|
@@ -22,18 +22,16 @@ export class WebAuthnService {
|
|
|
22
22
|
name: 'WebAuthn',
|
|
23
23
|
},
|
|
24
24
|
user: {
|
|
25
|
-
id:
|
|
25
|
+
id: Uint8Array.from(user.id, c => c.charCodeAt(0)),
|
|
26
26
|
name: user.email,
|
|
27
27
|
displayName: user.email,
|
|
28
28
|
},
|
|
29
|
-
pubKeyCredParams: [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
],
|
|
34
|
-
authenticatorSelection: {},
|
|
29
|
+
pubKeyCredParams: [{ alg: -7, type: 'public-key' }],
|
|
30
|
+
authenticatorSelection: {
|
|
31
|
+
authenticatorAttachment: 'platform',
|
|
32
|
+
},
|
|
35
33
|
timeout: 60000,
|
|
36
|
-
attestation: '
|
|
34
|
+
attestation: 'direct'
|
|
37
35
|
};
|
|
38
36
|
return navigator.credentials.create({
|
|
39
37
|
publicKey: publicKeyCredentialCreationOptions,
|
|
@@ -61,7 +59,7 @@ export class WebAuthnService {
|
|
|
61
59
|
return navigator.credentials.get({ publicKey: publicKeyCredentials });
|
|
62
60
|
}
|
|
63
61
|
getChallenge() {
|
|
64
|
-
return
|
|
62
|
+
return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));
|
|
65
63
|
}
|
|
66
64
|
register(user, newCredentialInfo) {
|
|
67
65
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -248,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
248
246
|
type: Inject,
|
|
249
247
|
args: ['environment']
|
|
250
248
|
}] }]; } });
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWF1dGhuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL3dlYi1hdXRobi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFRdkMsTUFBTSxPQUFPLGVBQWU7SUFLMUIsWUFDVSxjQUE4QixFQUM5QixJQUFnQixFQUNoQixRQUFxQixFQUNOLFdBQWdCO1FBSC9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFOL0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBUzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBa0I7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sa0NBQWtDLEdBQXVDO1lBQzdFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlCLEVBQUUsRUFBRTtnQkFDRixJQUFJLEVBQUUsVUFBVTthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ3hCO1lB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QUFJLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs4R0FqUVUsZUFBZSxxR0FTaEIsYUFBYTtrSEFUWixlQUFlLGNBRmQsTUFBTTs7MkZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcy1wZXItZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1jb25zdCAqL1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVc2VyV2ViYXV0aG4gfSBmcm9tICcuLi91c2VyLm1vZGVsJztcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV2ViQXV0aG5TZXJ2aWNlIHtcblxuICB3ZWJBdXRobkF2YWlsYWJsZSA9ICEhbmF2aWdhdG9yLmNyZWRlbnRpYWxzICYmICEhbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZTtcbiAgZW52aXJvbm1lbnQ6IGFueTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogU2Vzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICB3ZWJBdXRoblNpZ251cCh1c2VyOiBVc2VyV2ViYXV0aG4pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdbd2ViQXV0aG5TaWdudXBdJyk7XG4gICAgY29uc3QgcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczogUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyA9IHtcbiAgICAgIGNoYWxsZW5nZTogdGhpcy5nZXRDaGFsbGVuZ2UoKSxcbiAgICAgIHJwOiB7XG4gICAgICAgIG5hbWU6ICdXZWJBdXRobicsXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICBpZDogdGhpcy5iYXNlNjRVcmxUb0FycmF5QnVmZmVyKHVzZXIuaWQpLFxuICAgICAgICBuYW1lOiB1c2VyLmVtYWlsLFxuICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5lbWFpbCxcbiAgICAgIH0sXG4gICAgICBwdWJLZXlDcmVkUGFyYW1zOiBbXG4gICAgICAgIHsgYWxnOiAtOCwgdHlwZTogJ3B1YmxpYy1rZXknIH0sXG4gICAgICAgIHsgYWxnOiAtNywgdHlwZTogJ3B1YmxpYy1rZXknIH0sXG4gICAgICAgIHsgYWxnOiAtMjU3LCB0eXBlOiAncHVibGljLWtleScgfSxcbiAgICAgIF0sXG4gICAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiB7XG4gICAgICB9LFxuICAgICAgdGltZW91dDogNjAwMDAsXG4gICAgICBhdHRlc3RhdGlvbjogJ25vbmUnXG4gICAgfTtcblxuICAgIHJldHVybiBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHtcbiAgICAgIHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyxcbiAgICB9KTtcblxuICB9XG5cbiAgd2ViQXV0aG5TaWduaW4odXNlcjogVXNlcldlYmF1dGhuKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zb2xlLmxvZyh1c2VyKTtcbiAgICAvKiB7XG4gICAgICAgIFwiaWRcIjogXCJiMThlZTA3Ny1mODk2LTQ0ZjQtYTJkNC0zYWM4MzFlYjFjOTBcIixcbiAgICAgICAgXCJlbWFpbFwiOiBcInRlc3QudXNlckBlbWFpbC5jb21cIixcbiAgICAgICAgXCJwYXNzd29yZFwiOiBcIlwiLFxuICAgICAgICBcImNyZWRlbnRpYWxzXCI6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjoge30sXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInB1YmxpYy1rZXlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0gKi9cbiAgICBsZXQgcHVibGljS2V5Q3JlZGVudGlhbHMgPSB7XG4gICAgICBjaGFsbGVuZ2U6IHRoaXMuZ2V0Q2hhbGxlbmdlKCksXG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiB1c2VyLmNyZWRlbnRpYWxzWzBdXG4gICAgfTtcbiAgICByZXR1cm4gbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbHMgfSk7XG4gIH1cblxuXG4gIGdldENoYWxsZW5nZSgpOiBBcnJheUJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZTY0VXJsVG9BcnJheUJ1ZmZlcignakVmY24xQ3NHRnhCaVhZdEpNU0dEeWNQcVBveUZKM1onKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKHVzZXI6IFVzZXJXZWJhdXRobiwgbmV3Q3JlZGVudGlhbEluZm86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBlbmMgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG4gICAgICBsZXQgY2xpZW50RGF0YUpTT04gPSBlbmMuZGVjb2RlKG5ld0NyZWRlbnRpYWxJbmZvLnJlc3BvbnNlLmNsaWVudERhdGFKU09OKTtcbiAgICAgIGNvbnNvbGUubG9nKGNsaWVudERhdGFKU09OKTtcbiAgICAgIGxldCBjbGllbnREYXRhID0gSlNPTi5wYXJzZShjbGllbnREYXRhSlNPTik7XG4gICAgICBjb25zb2xlLmxvZyhjbGllbnREYXRhKTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9ICB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjRVcmwobmV3Q3JlZGVudGlhbEluZm8ucmF3SWQpO1xuICAgICAgbGV0IGlkTGlzdCA9IFt7XG4gICAgICAgIC8vIGlkOiBuZXdDcmVkZW50aWFsSW5mby5yYXdJZCxcbiAgICAgICAgaWQ6IHB1YmxpY0tleSxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknXG4gICAgICB9XTtcbiAgICAgIHVzZXIuY3JlZGVudGlhbHMucHVzaChpZExpc3QpO1xuICAgICAgY29uc29sZS5sb2codXNlcik7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZVVzZXIodXNlci5pZCwgJ3dlYmF1dGhuX2tleScsIHB1YmxpY0tleSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIGJhc2U2NFVybFRvQXJyYXlCdWZmZXIoYmFzZTY0VXJsU3RyaW5nOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYmFzZTY0U3RyaW5nID0gYmFzZTY0VXJsU3RyaW5nLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgY29uc3QgcGFkZGVkQmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnBhZEVuZChNYXRoLmNlaWwoYmFzZTY0U3RyaW5nLmxlbmd0aCAvIDQpICogNCwgJz0nKTtcbiAgICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBhdG9iKHBhZGRlZEJhc2U2NFN0cmluZylcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpXG4gICAgKTtcbiAgICByZXR1cm4gdWludDhBcnJheS5idWZmZXI7XG4gIH1cblxuICBhcnJheUJ1ZmZlclRvQmFzZTY0VXJsKGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICBsZXQgYmFzZTY0U3RyaW5nID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIEFycmF5LmZyb20odWludDhBcnJheSkpKTtcbiAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG4gIH1cblxuXG4gIHNpZ25VcCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy53ZWJBdXRobkF2YWlsYWJsZSkge1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VXNlcmRhdGEoKTtcbiAgICAgICAgaWYgKHVzZXJEYXRhKSB7XG4gICAgICAgICAgbGV0IHVzZXIgPSB7XG4gICAgICAgICAgICBpZDogdXNlckRhdGE/LnVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsOiB1c2VyRGF0YT8uZW1haWwsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMud2ViQXV0aG5TaWdudXAodXNlcilcbiAgICAgICAgICAgIC50aGVuKChjcmVkZW50aWFsOiBQdWJsaWNLZXlDcmVkZW50aWFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjcmVkZW50aWFscy5jcmVhdGUgUkVTUE9OU0UnLCBjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcih1c2VyLCBjcmVkZW50aWFsKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U25hY2tCYXIodGhpcy5nZXRNZXNzYWdlKCdzaWduVXBPaycpLCBbJ3NuYWNrLXN1Y2Nlc3MnXSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE9rJykpO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJykpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjcmVkZW50aWFscy5jcmVhdGUgRVJST1InLCBlcnJvcik7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE5vaycpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgc2lnbkluKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLndlYkF1dGhuQXZhaWxhYmxlKSB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRVc2VyZGF0YSgpO1xuICAgICAgICBpZiAodXNlckRhdGEpIHtcbiAgICAgICAgICBsZXQgdXNlciA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRGF0YT8udXNlcklkLFxuICAgICAgICAgICAgZW1haWw6IHVzZXJEYXRhPy5lbWFpbCxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBbe31dXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlVXNlcih1c2VyLmlkLCAnd2ViYXV0aG5fa2V5Jykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLndlYmF1dGhuX2tleSAmJiByZXMuZGF0YS53ZWJhdXRobl9rZXkubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3JlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiAgdGhpcy5iYXNlNjRVcmxUb0FycmF5QnVmZmVyKHJlcy5kYXRhLndlYmF1dGhuX2tleVswXSksXG4gICAgICAgICAgICAgICAgICB0eXBlOiAncHVibGljLWtleSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHVzZXIuY3JlZGVudGlhbHMuc3BsaWNlKDAsMSk7XG4gICAgICAgICAgICAgICAgdXNlci5jcmVkZW50aWFscy5wdXNoKFtjcmVkXSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLndlYkF1dGhuU2lnbmluKHVzZXIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU1VDQ0VTU0ZVTExZIEdPVCBBTiBBU1NFUlRJT04hJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGQUlMJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2ludmFsaWRDcmVkZW50aWFscycpLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdpbnZhbGlkQ3JlZGVudGlhbHMnKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ25vQ3JlZGVudGlhbHMnKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdub0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgYWRkQXR0cmlidXRlVXNlcih1c2VySWQ6IGFueSwgY29kZTogYW55LCB2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfS8ke3ZhbHVlfWAse30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZVVzZXIodXNlcklkOiBhbnksIGNvZGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHNob3dTbmFja0JhcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1lc3NhZ2UoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgbXNnID0gJyc7XG4gICAgY29uc3QgbGFuZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTEFORycpO1xuICAgIGNvbnN0IG1lc3NhZ2VzRW46IGFueSA9IHtcbiAgICAgIHNpZ25VcE9rOiAnQ3JlZGVudGlhbHMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgc2lnblVwTm9rOiAnQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJlZ2lzdGVyaW5nIGNyZWRlbnRpYWxzJyxcbiAgICAgIGJyb3dzZXJOb2s6ICdUaGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eScsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnVGhlIHVzZXIgaGFzIG5vIHN0b3JlZCBjcmVkZW50aWFscycsXG4gICAgICBpbnZhbGlkQ3JlZGVudGlhbHM6ICdUaGUgY3JlZGVudGlhbHMgYXJlIGludmFsaWQnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdUaGVyZSB3YXMgYSBwcm9ibGVtIHJldHJpZXZpbmcgY3JlZGVudGlhbHMnLFxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZXNFczogYW55ID0ge1xuICAgICAgc2lnblVwT2s6ICdDcmVkZW5jaWFsZXMgcmVnaXN0cmFkYXMgZXhpdG9zYW1lbnRlJyxcbiAgICAgIHNpZ25VcE5vazogJ1NlIHByb2R1am8gdW4gcHJvYmxlbWEgYWwgcmVnaXN0cmFyIGxhcyBjcmVkZW5jaWFsZXMnLFxuICAgICAgYnJvd3Nlck5vazogJ0VsIG5hdmVnYWRvciBubyBzb3BvcnRhIGVzdGEgZnVuY2lvbmFsaWRhZCcsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnRWwgdXN1YXJpbyBubyB0aWVuZSBjcmVkZW5jaWFsZXMgYWxtYWNlbmFkYXMnLFxuICAgICAgaW52YWxpZENyZWRlbnRpYWxzOiAnTGFzIGNyZWRlbmNpYWxlcyBubyBzb24gdsOhbGlkYXMnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdTZSBwcm9kdWpvIHVuIHByb2JsZW1hIGFsIHJlY3VwZXJhciBsYXMgY3JlZGVuY2lhbGVzJyxcbiAgICB9O1xuICAgIGlmIChsYW5nICYmIGxhbmc9PT0nZW4nKSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VuW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VzW2NvZGVdO1xuICAgIH1cbiAgICByZXR1cm4gbXNnO1xuICB9XG5cbn1cbiJdfQ==
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWF1dGhuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL3dlYi1hdXRobi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFRdkMsTUFBTSxPQUFPLGVBQWU7SUFLMUIsWUFDVSxjQUE4QixFQUM5QixJQUFnQixFQUNoQixRQUFxQixFQUNOLFdBQWdCO1FBSC9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFOL0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBUzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBa0I7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sa0NBQWtDLEdBQXVDO1lBQzdFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlCLEVBQUUsRUFBRTtnQkFDRixJQUFJLEVBQUUsVUFBVTthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxFQUFFLElB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QUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQTlQVSxlQUFlLHFHQVNoQixhQUFhO2tIQVRaLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJXZWJhdXRobiB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXZWJBdXRoblNlcnZpY2Uge1xuXG4gIHdlYkF1dGhuQXZhaWxhYmxlID0gISFuYXZpZ2F0b3IuY3JlZGVudGlhbHMgJiYgISFuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlO1xuICBlbnZpcm9ubWVudDogYW55O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBTZXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIHdlYkF1dGhuU2lnbnVwKHVzZXI6IFVzZXJXZWJhdXRobik6IFByb21pc2U8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ1t3ZWJBdXRoblNpZ251cF0nKTtcbiAgICBjb25zdCBwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0ge1xuICAgICAgY2hhbGxlbmdlOiB0aGlzLmdldENoYWxsZW5nZSgpLFxuICAgICAgcnA6IHtcbiAgICAgICAgbmFtZTogJ1dlYkF1dGhuJyxcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIGlkOiBVaW50OEFycmF5LmZyb20odXNlci5pZCwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpLFxuICAgICAgICBuYW1lOiB1c2VyLmVtYWlsLFxuICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5lbWFpbCxcbiAgICAgIH0sXG4gICAgICBwdWJLZXlDcmVkUGFyYW1zOiBbeyBhbGc6IC03LCB0eXBlOiAncHVibGljLWtleScgfV0sXG4gICAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiB7XG4gICAgICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAncGxhdGZvcm0nLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IDYwMDAwLFxuICAgICAgYXR0ZXN0YXRpb246ICdkaXJlY3QnXG4gICAgfTtcblxuICAgIHJldHVybiBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHtcbiAgICAgIHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyxcbiAgICB9KTtcblxuICB9XG5cbiAgd2ViQXV0aG5TaWduaW4odXNlcjogVXNlcldlYmF1dGhuKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zb2xlLmxvZyh1c2VyKTtcbiAgICAvKiB7XG4gICAgICAgIFwiaWRcIjogXCJiMThlZTA3Ny1mODk2LTQ0ZjQtYTJkNC0zYWM4MzFlYjFjOTBcIixcbiAgICAgICAgXCJlbWFpbFwiOiBcInRlc3QudXNlckBlbWFpbC5jb21cIixcbiAgICAgICAgXCJwYXNzd29yZFwiOiBcIlwiLFxuICAgICAgICBcImNyZWRlbnRpYWxzXCI6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjoge30sXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInB1YmxpYy1rZXlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0gKi9cbiAgICBsZXQgcHVibGljS2V5Q3JlZGVudGlhbHMgPSB7XG4gICAgICBjaGFsbGVuZ2U6IHRoaXMuZ2V0Q2hhbGxlbmdlKCksXG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiB1c2VyLmNyZWRlbnRpYWxzWzBdXG4gICAgfTtcbiAgICByZXR1cm4gbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbHMgfSk7XG4gIH1cblxuXG4gIGdldENoYWxsZW5nZSgpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKCdqRWZjbjFDc0dGeEJpWFl0Sk1TR0R5Y1BxUG95RkozWicsIGMgPT4gYy5jaGFyQ29kZUF0KDApKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKHVzZXI6IFVzZXJXZWJhdXRobiwgbmV3Q3JlZGVudGlhbEluZm86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBlbmMgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG4gICAgICBsZXQgY2xpZW50RGF0YUpTT04gPSBlbmMuZGVjb2RlKG5ld0NyZWRlbnRpYWxJbmZvLnJlc3BvbnNlLmNsaWVudERhdGFKU09OKTtcbiAgICAgIGNvbnNvbGUubG9nKGNsaWVudERhdGFKU09OKTtcbiAgICAgIGxldCBjbGllbnREYXRhID0gSlNPTi5wYXJzZShjbGllbnREYXRhSlNPTik7XG4gICAgICBjb25zb2xlLmxvZyhjbGllbnREYXRhKTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9ICB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjRVcmwobmV3Q3JlZGVudGlhbEluZm8ucmF3SWQpO1xuICAgICAgbGV0IGlkTGlzdCA9IFt7XG4gICAgICAgIC8vIGlkOiBuZXdDcmVkZW50aWFsSW5mby5yYXdJZCxcbiAgICAgICAgaWQ6IHB1YmxpY0tleSxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknXG4gICAgICB9XTtcbiAgICAgIHVzZXIuY3JlZGVudGlhbHMucHVzaChpZExpc3QpO1xuICAgICAgY29uc29sZS5sb2codXNlcik7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZVVzZXIodXNlci5pZCwgJ3dlYmF1dGhuX2tleScsIHB1YmxpY0tleSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIGJhc2U2NFVybFRvQXJyYXlCdWZmZXIoYmFzZTY0VXJsU3RyaW5nOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYmFzZTY0U3RyaW5nID0gYmFzZTY0VXJsU3RyaW5nLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgY29uc3QgcGFkZGVkQmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnBhZEVuZChNYXRoLmNlaWwoYmFzZTY0U3RyaW5nLmxlbmd0aCAvIDQpICogNCwgJz0nKTtcbiAgICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBhdG9iKHBhZGRlZEJhc2U2NFN0cmluZylcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpXG4gICAgKTtcbiAgICByZXR1cm4gdWludDhBcnJheS5idWZmZXI7XG4gIH1cblxuICBhcnJheUJ1ZmZlclRvQmFzZTY0VXJsKGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICBsZXQgYmFzZTY0U3RyaW5nID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIEFycmF5LmZyb20odWludDhBcnJheSkpKTtcbiAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG4gIH1cblxuXG4gIHNpZ25VcCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy53ZWJBdXRobkF2YWlsYWJsZSkge1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VXNlcmRhdGEoKTtcbiAgICAgICAgaWYgKHVzZXJEYXRhKSB7XG4gICAgICAgICAgbGV0IHVzZXIgPSB7XG4gICAgICAgICAgICBpZDogdXNlckRhdGE/LnVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsOiB1c2VyRGF0YT8uZW1haWwsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMud2ViQXV0aG5TaWdudXAodXNlcilcbiAgICAgICAgICAgIC50aGVuKChjcmVkZW50aWFsOiBQdWJsaWNLZXlDcmVkZW50aWFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjcmVkZW50aWFscy5jcmVhdGUgUkVTUE9OU0UnLCBjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcih1c2VyLCBjcmVkZW50aWFsKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U25hY2tCYXIodGhpcy5nZXRNZXNzYWdlKCdzaWduVXBPaycpLCBbJ3NuYWNrLXN1Y2Nlc3MnXSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE9rJykpO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJykpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjcmVkZW50aWFscy5jcmVhdGUgRVJST1InLCBlcnJvcik7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE5vaycpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgc2lnbkluKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLndlYkF1dGhuQXZhaWxhYmxlKSB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRVc2VyZGF0YSgpO1xuICAgICAgICBpZiAodXNlckRhdGEpIHtcbiAgICAgICAgICBsZXQgdXNlciA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRGF0YT8udXNlcklkLFxuICAgICAgICAgICAgZW1haWw6IHVzZXJEYXRhPy5lbWFpbCxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBbe31dXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlVXNlcih1c2VyLmlkLCAnd2ViYXV0aG5fa2V5Jykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLndlYmF1dGhuX2tleSAmJiByZXMuZGF0YS53ZWJhdXRobl9rZXkubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3JlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiAgdGhpcy5iYXNlNjRVcmxUb0FycmF5QnVmZmVyKHJlcy5kYXRhLndlYmF1dGhuX2tleVswXSksXG4gICAgICAgICAgICAgICAgICB0eXBlOiAncHVibGljLWtleSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHVzZXIuY3JlZGVudGlhbHMuc3BsaWNlKDAsMSk7XG4gICAgICAgICAgICAgICAgdXNlci5jcmVkZW50aWFscy5wdXNoKFtjcmVkXSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLndlYkF1dGhuU2lnbmluKHVzZXIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU1VDQ0VTU0ZVTExZIEdPVCBBTiBBU1NFUlRJT04hJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGQUlMJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2ludmFsaWRDcmVkZW50aWFscycpLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdpbnZhbGlkQ3JlZGVudGlhbHMnKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ25vQ3JlZGVudGlhbHMnKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdub0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgYWRkQXR0cmlidXRlVXNlcih1c2VySWQ6IGFueSwgY29kZTogYW55LCB2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfS8ke3ZhbHVlfWAse30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZVVzZXIodXNlcklkOiBhbnksIGNvZGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHNob3dTbmFja0JhcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1lc3NhZ2UoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgbXNnID0gJyc7XG4gICAgY29uc3QgbGFuZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTEFORycpO1xuICAgIGNvbnN0IG1lc3NhZ2VzRW46IGFueSA9IHtcbiAgICAgIHNpZ25VcE9rOiAnQ3JlZGVudGlhbHMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgc2lnblVwTm9rOiAnQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJlZ2lzdGVyaW5nIGNyZWRlbnRpYWxzJyxcbiAgICAgIGJyb3dzZXJOb2s6ICdUaGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eScsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnVGhlIHVzZXIgaGFzIG5vIHN0b3JlZCBjcmVkZW50aWFscycsXG4gICAgICBpbnZhbGlkQ3JlZGVudGlhbHM6ICdUaGUgY3JlZGVudGlhbHMgYXJlIGludmFsaWQnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdUaGVyZSB3YXMgYSBwcm9ibGVtIHJldHJpZXZpbmcgY3JlZGVudGlhbHMnLFxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZXNFczogYW55ID0ge1xuICAgICAgc2lnblVwT2s6ICdDcmVkZW5jaWFsZXMgcmVnaXN0cmFkYXMgZXhpdG9zYW1lbnRlJyxcbiAgICAgIHNpZ25VcE5vazogJ1NlIHByb2R1am8gdW4gcHJvYmxlbWEgYWwgcmVnaXN0cmFyIGxhcyBjcmVkZW5jaWFsZXMnLFxuICAgICAgYnJvd3Nlck5vazogJ0VsIG5hdmVnYWRvciBubyBzb3BvcnRhIGVzdGEgZnVuY2lvbmFsaWRhZCcsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnRWwgdXN1YXJpbyBubyB0aWVuZSBjcmVkZW5jaWFsZXMgYWxtYWNlbmFkYXMnLFxuICAgICAgaW52YWxpZENyZWRlbnRpYWxzOiAnTGFzIGNyZWRlbmNpYWxlcyBubyBzb24gdsOhbGlkYXMnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdTZSBwcm9kdWpvIHVuIHByb2JsZW1hIGFsIHJlY3VwZXJhciBsYXMgY3JlZGVuY2lhbGVzJyxcbiAgICB9O1xuICAgIGlmIChsYW5nICYmIGxhbmc9PT0nZW4nKSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VuW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VzW2NvZGVdO1xuICAgIH1cbiAgICByZXR1cm4gbXNnO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -1174,18 +1174,16 @@ class WebAuthnService {
|
|
|
1174
1174
|
name: 'WebAuthn',
|
|
1175
1175
|
},
|
|
1176
1176
|
user: {
|
|
1177
|
-
id:
|
|
1177
|
+
id: Uint8Array.from(user.id, c => c.charCodeAt(0)),
|
|
1178
1178
|
name: user.email,
|
|
1179
1179
|
displayName: user.email,
|
|
1180
1180
|
},
|
|
1181
|
-
pubKeyCredParams: [
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
],
|
|
1186
|
-
authenticatorSelection: {},
|
|
1181
|
+
pubKeyCredParams: [{ alg: -7, type: 'public-key' }],
|
|
1182
|
+
authenticatorSelection: {
|
|
1183
|
+
authenticatorAttachment: 'platform',
|
|
1184
|
+
},
|
|
1187
1185
|
timeout: 60000,
|
|
1188
|
-
attestation: '
|
|
1186
|
+
attestation: 'direct'
|
|
1189
1187
|
};
|
|
1190
1188
|
return navigator.credentials.create({
|
|
1191
1189
|
publicKey: publicKeyCredentialCreationOptions,
|
|
@@ -1213,7 +1211,7 @@ class WebAuthnService {
|
|
|
1213
1211
|
return navigator.credentials.get({ publicKey: publicKeyCredentials });
|
|
1214
1212
|
}
|
|
1215
1213
|
getChallenge() {
|
|
1216
|
-
return
|
|
1214
|
+
return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));
|
|
1217
1215
|
}
|
|
1218
1216
|
register(user, newCredentialInfo) {
|
|
1219
1217
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssi-security-commons.mjs","sources":["../../../projects/ssi-security-commons/src/lib/ssi-security-commons.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.component.ts","../../../projects/ssi-security-commons/src/lib/services/crypto.service.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.html","../../../projects/ssi-security-commons/src/lib/shared/constants.ts","../../../projects/ssi-security-commons/src/lib/services/jwt.service.ts","../../../projects/ssi-security-commons/src/lib/services/session.service.ts","../../../projects/ssi-security-commons/src/lib/services/messages.service.ts","../../../projects/ssi-security-commons/src/lib/services/user-event.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.module.ts","../../../projects/ssi-security-commons/src/lib/services/hybrid-encryption.service.ts","../../../projects/ssi-security-commons/src/lib/services/auth-interceptor.service.ts","../../../projects/ssi-security-commons/src/lib/services/web-authn.service.ts","../../../projects/ssi-security-commons/src/public-api.ts","../../../projects/ssi-security-commons/src/ssi-security-commons.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SsiSecurityCommonsService {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ssi-security-commons',\n template: ` <p>ssi-security-commons works!</p>\n `,\n styles: [\n ]\n})\nexport class SsiSecurityCommonsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\n@Injectable()\nexport class CryptoService {\n\n private configuration: any;\n private key: any;\n private secret = '&E)H@McQfThWmZq4';\n\n constructor() {\n this.configuration = {\n mode: CryptoJS.mode.ECB\n };\n const hash = CryptoJS.SHA1(this.secret);\n this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n }\n\n encrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();\n }\n\n decrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n encryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.encrypt(text, key, this.configuration).toString();\n }\n\n decryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface DialogData {\n title?: string;\n icon?: string;\n type?: string;\n message?: string;\n okText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'lib-app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n\n constructor(\n public dialogRef: MatDialogRef<AlertComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"sec-alert-icon\" *ngIf=\"data.icon==='warn'\">\n <svg width=\"48\" height=\"49\" viewBox=\"0 0 48 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 13.5C24.69 13.5 25.25 14.06 25.25 14.75V27.25C25.25 27.5815 25.1183 27.8995 24.8839 28.1339C24.6495 28.3683 24.3315 28.5 24 28.5C23.6685 28.5 23.3505 28.3683 23.1161 28.1339C22.8817 27.8995 22.75 27.5815 22.75 27.25V14.75C22.75 14.06 23.31 13.5 24 13.5ZM24 34.5C24.5304 34.5 25.0391 34.2893 25.4142 33.9142C25.7893 33.5391 26 33.0304 26 32.5C26 31.9696 25.7893 31.4609 25.4142 31.0858C25.0391 30.7107 24.5304 30.5 24 30.5C23.4696 30.5 22.9609 30.7107 22.5858 31.0858C22.2107 31.4609 22 31.9696 22 32.5C22 33.0304 22.2107 33.5391 22.5858 33.9142C22.9609 34.2893 23.4696 34.5 24 34.5ZM4 24.5C4 13.454 12.954 4.5 24 4.5C35.046 4.5 44 13.454 44 24.5C44 35.546 35.046 44.5 24 44.5C12.954 44.5 4 35.546 4 24.5ZM24 7C14.335 7 6.5 14.835 6.5 24.5C6.5 34.165 14.335 42 24 42C33.665 42 41.5 34.165 41.5 24.5C41.5 14.835 33.665 7 24 7Z\" fill=\"#FF4021\"/>\n </svg>\n</div>\n<h1 mat-dialog-title class=\"sec-alert-title\">{{data.title?data.title:'Alert'}}</h1>\n<div mat-dialog-content class=\"alert-min-width sec-alert-content\">\n <div>\n {{data.message}}\n </div>\n</div>\n<div class=\"sec-alert-actions\"> \n <button mat-flat-button color=\"primary\" class=\"sec-alert-ok\" (click)=\"onConfirm()\">{{data.okText ? data.okText : 'OK'}}</button>\n <button mat-flat-button class=\"sec-alert-cancel\" (click)=\"onCancel()\" *ngIf=\"data.cancelText\">{{data.cancelText ? data.cancelText : 'Cancel'}}</button>\n</div>\n","export const TOKEN = 'TOKEN';\nexport const REFRESH_TOKEN = 'REFRESH_TOKEN';\nexport const USERDATA = 'USERDATA';\nexport const LANG = 'LANG';\n","/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class JwtService {\n\n public decodeTokenOld(token: string) {\n const _decodeToken = (token: string) => {\n try {\n return JSON.parse(atob(token));\n } catch {\n return;\n }\n };\n return token\n .split('.')\n .map(token => _decodeToken(token))\n .reduce((acc, curr) => {\n if (!!curr) acc = { ...acc, ...curr };\n return acc;\n }, Object.create(null));\n }\n\n public decodeToken(token: string) {\n const payload = token.split('.')[1];\n // Add padding if needed\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '=');\n // Decode Base64 to binary string\n const binary = atob(padded);\n // Convert binary string to UTF-8 correctly\n const utf8String = decodeURIComponent(\n Array.from(binary)\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\n .join('')\n );\n // Parse JSON payload\n return JSON.parse(utf8String);\n }\n\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable arrow-body-style */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FrontEndException, UserData } from '../user.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { JwtService } from './jwt.service';\nimport { CryptoService } from './crypto.service';\nimport { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';\n\n\n@Injectable()\nexport class SessionService {\n\n userdata: UserData | undefined;\n token: string | undefined;\n refreshToken: string | undefined;\n endPoint: string;\n loginUrl = 'http://localhost:4200/login';\n applicationId: any;\n environment: any;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any,\n private cryptoService: CryptoService,\n private jwtService: JwtService) {\n this.endPoint = environment.endPointCore;\n this.applicationId = environment.applicationId;\n this.environment = environment;\n }\n\n public buildUserdataFromToken(token: string): any {\n const tokenData = this.jwtService.decodeToken(token);\n const userData: UserData = {\n givenName: tokenData.given_name,\n familyName: tokenData.family_name,\n name: tokenData.name,\n roles: tokenData.realm_access.roles,\n userId: tokenData.sub,\n username: tokenData.preferred_username,\n email: tokenData.email,\n emailVerified: tokenData.email_verified,\n countryCode: tokenData.country_code,\n partyId: tokenData.party_id\n };\n return userData;\n }\n\n public async reviewSessionData(): Promise<any> {\n const value = await this.checkSessionData() as any;\n console.log(`async result: ${value}`);\n return value;\n }\n\n public setUserdata(userdata: any): void {\n this.userdata = userdata;\n }\n\n public setTokens(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n }\n\n public getUserdata(): UserData | undefined {\n return this.userdata;\n }\n\n public setRefreshToken(refreshToken: any): void {\n this.refreshToken = refreshToken;\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n }\n\n public getRefreshToken(): string | undefined {\n return this.refreshToken;\n }\n\n public setToken(token: any): any {\n this.token = token;\n this.saveStorageData(TOKEN, token);\n }\n\n public getToken(): any {\n return this.token;\n }\n\n public destroyCredentials(): void {\n this.token = undefined;\n this.refreshToken = undefined;\n this.deleteStorageData(TOKEN);\n this.deleteStorageData(REFRESH_TOKEN);\n }\n\n public destroyUserData(): void {\n this.userdata = undefined;\n this.deleteStorageData(USERDATA);\n }\n\n public saveCredentials(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n this.saveStorageData(TOKEN, token);\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n this.saveUserData(this.buildUserdataFromToken(token));\n }\n\n public saveUserData(userData: any): void {\n this.userdata = userData;\n this.saveStorageData(USERDATA, JSON.stringify(userData));\n }\n\n public isLoggedIn(): boolean {\n return !!this.userdata;\n }\n\n logout(): Promise<any> {\n let clientId = this.environment.authClient;\n if (this.refreshToken) {\n const decoded = this.jwtService.decodeToken(this.refreshToken);\n clientId = decoded.azp;\n }\n return new Promise((resolve, reject) => {\n this.logoutApiClient(clientId).subscribe(res => {\n console.log(res);\n this.destroyCredentials();\n this.destroyUserData();\n this.goToLogin();\n resolve(null);\n }, (err) => {\n this.destroyCredentials();\n this.destroyUserData();\n console.error(err);\n reject(err);\n });\n });\n }\n\n getNewToken(refreshToken: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getNewTokenClient(refreshToken: string, clientId: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getTokenClientCode(refreshToken: string, clientId: string): Observable<any> {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n\n getLoginUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/login/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n getHomeUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/home/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n logoutApi(): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n logoutApiClient(clientId: string): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + clientId;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n goToLogin(): void {\n this.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n window.location.href = loginUrl;\n }, (err) => {\n console.error(err);\n });\n }\n\n public loadSessionData(): void {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n data = window.localStorage.getItem(u);\n token = window.localStorage.getItem(t);\n refreshToken = window.localStorage.getItem(r);\n if (data && token && refreshToken) {\n data = this.cryptoService.decrypt(data);\n token = this.cryptoService.decrypt(token);\n refreshToken = this.cryptoService.decrypt(refreshToken);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n const user = JSON.parse(data);\n this.setTokens(token, refreshToken);\n this.setUserdata(user);\n }\n }\n\n userHasOptionsInApp(userId: any, applicationId: any): Observable<any> {\n return this.http.get<any>(this.endPoint + `/security/option/${applicationId}/${userId}`)\n .pipe(\n map(res => res));\n }\n\n checkAppPermissions(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n console.log(this.userdata?.userId, this.applicationId);\n if (this.applicationId) {\n this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {\n console.log(res);\n if (res.data) {\n resolve('ok');\n } else {\n this.getHomeUrl().subscribe(res1 => {\n console.log(res1);\n const homeUrl = res1.data;\n window.location.href = homeUrl;\n reject('nok');\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n }\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n } else {\n resolve('ok');\n }\n });\n return promise;\n }\n\n\n // eslint-disable-next-line max-len\n public getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any> {\n const param = {\n userId: this.userdata?.userId,\n applicationId,\n type,\n language,\n entityCode,\n parentOptionId,\n includeData\n };\n return this.http.post<any>(this.endPoint + '/security/option/user', param)\n .pipe(\n map(res => res));\n }\n\n registerException(param: FrontEndException): Observable<any> {\n const headers = new HttpHeaders().set('skipError', 'true');\n return this.http.post<any>(this.endPoint + '/auth/exception/log', param, {headers})\n .pipe(\n map(res => res));\n }\n\n saveStorageData(key: string, value: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = this.cryptoService.encrypt(value);\n window.localStorage.setItem(k, v);\n } else {\n window.localStorage.setItem(key, value);\n }\n }\n\n deleteStorageData(key: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n window.localStorage.removeItem(k);\n } else {\n window.localStorage.removeItem(key);\n }\n }\n\n getStorageData(key: string): string | null {\n let res: string | null;\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = window.localStorage.getItem(k);\n if (v) {\n res = this.cryptoService.decrypt(v);\n return res;\n } else {\n res = null;\n }\n } else {\n res = window.localStorage.getItem(key);\n }\n return res;\n }\n\n\n public removeUrlData(): void {\n const url = new URL(window.location.href);\n const queryParams = url.searchParams;\n queryParams.delete('code');\n queryParams.delete('clientId');\n const newUrl = url.origin + url.pathname + '?' + queryParams.toString();\n window.history.replaceState({}, document.title, newUrl);\n }\n\n public checkSessionData(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n\n const currentUrl = new URL(window.location.href);\n const code = currentUrl.searchParams.get('code');\n console.log('code', code);\n if (code) {\n const codeDecoded = this.getDecodedAuthCode(code);\n // console.log('code', codeDecoded);\n const clientId = currentUrl.searchParams.get('clientId');\n console.log('clientId', clientId);\n const decoded = this.jwtService.decodeToken(codeDecoded);\n this.getTokenClientCode(codeDecoded, clientId?clientId:decoded.azp).subscribe({\n next: (res) => {\n console.log(res);\n token = res.access_token;\n refreshToken = res.refresh_token;\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n this.removeUrlData();\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n data = this.getStorageData(USERDATA);\n token = this.getStorageData(TOKEN);\n refreshToken = this.getStorageData(REFRESH_TOKEN);\n if (data && token && refreshToken) {\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n } else {\n const url = window.location.href;\n if (url.indexOf('/redirect')>-1) {\n resolve('OK');\n } else {\n this.destroyCredentials();\n this.destroyUserData();\n this.getLoginUrl().subscribe(res1 => {\n console.log(res1);\n this.loginUrl = res1.data;\n if (url.indexOf('/login')<0 && url.indexOf('/forgot')<0 &&\n url.indexOf('/reset')<0 && url.indexOf('/verify')<0 &&\n url.indexOf('/sign_up')<0) {\n window.location.href = this.loginUrl + '?continue='+encodeURIComponent(url);\n }\n resolve('NOK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n }\n }\n }\n });\n return promise;\n }\n\n\n\n public checkSessionDataMicrofront(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n const d1 = window.localStorage.getItem(u);\n const d2 = window.localStorage.getItem(t);\n const d3 = window.localStorage.getItem(r);\n if (d1 && d2 && d3) {\n data = this.cryptoService.decrypt(d1);\n token = this.cryptoService.decrypt(d2);\n refreshToken = this.cryptoService.decrypt(d3);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n console.log('local session ok');\n this.saveCredentials(token, refreshToken);\n resolve('OK');\n } else {\n console.error('local session nok');\n reject('NOK');\n }\n });\n return promise;\n }\n\n public getAuthCode(): string {\n const enc = this.cryptoService.encrypt(this.refreshToken?this.refreshToken:'');\n return encodeURIComponent(enc);\n }\n\n private getDecodedAuthCode(code: string): string {\n const dec = decodeURIComponent(code);\n return this.cryptoService.decrypt(dec);\n }\n\n public refreshSession(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n const decoded = this.jwtService.decodeToken(refreshToken);\n this.getNewTokenClient(refreshToken, decoded.azp).subscribe({\n next: (res: any) => {\n console.log(res);\n this.setToken(res.access_token);\n this.setRefreshToken(res.refresh_token);\n this.saveCredentials(res.access_token, res.refresh_token);\n resolve('OK');\n },\n error: (err: any) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n reject('NOK');\n }\n });\n return promise;\n }\n\n}\n\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable quote-props */\nimport { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n// import { Router } from '@angular/router';\nimport { AlertComponent } from '../alert/alert.component';\nimport { FrontEndException } from '../user.model';\nimport { SessionService } from './session.service';\n\n\n@Injectable()\nexport class MessagesService {\n\n private interceptorMessages: any;\n applicationId: any;\n\n constructor(\n public auth: SessionService,\n // private router: Router,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n @Inject('environment') environment: any\n ) {\n this.applicationId = environment.applicationId;\n }\n\n\n // eslint-disable-next-line max-lines-per-function, complexity\n showErrorMessage(error: HttpErrorResponse, request: HttpRequest<any>): void {\n console.log('error: ', error);\n this.registerLog(error, request);\n const msgs: any = this.getInterceptorMessages();\n switch (error.status) {\n case 302: {\n this.messageSnackError(error);\n break;\n }\n case 400: {\n if (error.error.error === 'invalid_grant') {\n this.goNavigateLogin(msgs);\n } else {\n this.showSnackError(error.message, ['snack-error']);\n }\n break;\n }\n case 403: {\n this.goNavigateLogin(msgs);\n break;\n }\n case 404: {\n this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);\n break;\n }\n case 409: {\n this.messageDialog(error, msgs);\n break;\n }\n case 412: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 422: {\n this.messageDialog(error, msgs);\n break;\n }\n case 428: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 500: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 503: {\n this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);\n break;\n }\n case -1: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n case 0: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n }\n }\n\n messageSnackError(error: any): void {\n const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :\n error.error.message ? error.error.message : error.message;\n this.showSnackError(errorMessage, ['snack-error']);\n }\n\n goNavigateLogin(msgs: any): void {\n // if (this.router.url !== '/login') {\n this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);\n // this.router.navigate(['/login']);\n this.auth.destroyCredentials();\n this.auth.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl) < 0) {\n window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n // }\n }\n\n messageAlertDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n if (error.error.exception) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exception; }\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else if (error.error.message) {\n message = error.error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n if (error.error.referenceError) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.referenceError; }\n } else if (error.message) {\n message = error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n messageDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n } else if (error.error.message) {\n message = error.error.message;\n } else if (error.message) {\n message = error.message;\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n showSnackError(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n setInterceptorMessages(message: any): void {\n this.interceptorMessages = message;\n }\n\n // eslint-disable-next-line max-lines-per-function\n getInterceptorMessages(): string {\n if (!this.interceptorMessages) {\n let lang = window.localStorage.getItem('LANG');\n if (!lang) {\n const userLang = navigator.language;\n lang = userLang.split('-')[0];\n }\n const messagesEn = {\n auth_interceptor: {\n session_lost: 'Session lost, you have to login again.',\n not_found: 'Resource not found',\n title: 'We are sorry',\n message: 'We had a problem trying to process your request.',\n code: 'Code',\n unavailable: 'Service unavailable, please try again in a few minutes.',\n connection_error: 'Could not connect to server, please check your network connection.',\n accept_text: 'OK',\n cancel_text: 'Cancel'\n }\n };\n const messagesEs = {\n auth_interceptor: {\n session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',\n not_found: 'Recurso no encontrado',\n title: 'Lo sentimos',\n message: 'Tuvimos un problema al tratar de procesar su solicitud.',\n code: 'Código',\n unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',\n connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.',\n accept_text: 'Aceptar',\n cancel_text: 'Cancelar'\n }\n };\n if (lang && lang === 'es') {\n this.interceptorMessages = messagesEs;\n } else {\n this.interceptorMessages = messagesEn;\n }\n }\n return this.interceptorMessages;\n }\n\n\n registerLog(error: HttpErrorResponse, request: HttpRequest<any>): void {\n const u = this.auth.getUserdata();\n const param: FrontEndException = {\n httpStatus: error.status,\n httpStatusText: error.statusText,\n errorMessage: error.message,\n currentUrl: window.location.href,\n requestUrl: request.urlWithParams ? request.urlWithParams : undefined,\n requestBody: request.body ? JSON.stringify(this.obfuscateData(request.body)) : undefined,\n userId: u ? u.userId : undefined,\n applicationId: this.applicationId,\n requestDate: new Date()\n };\n this.auth.registerException(param).subscribe({\n next: (response) => {\n console.log('registerException', response);\n },\n error: (err: any) => {\n console.error('registerException', err);\n }\n });\n }\n\n private obfuscateData(data: any): any {\n const sensitiveKeys = ['password', 'card', 'cardnumber', 'token'];\n const obfuscateHandle = (input: any): any => {\n // Si es array itera uno por uno\n if (Array.isArray(input)) {\n return input.map(item => obfuscateHandle(item));\n }\n\n // Si es objeto valida si el atributo es string u object, lo demas lo salta\n if (typeof input === 'object' && input !== undefined) {\n const result: any = {};\n for (const key of Object.keys(input)) {\n const lowerKey = key.toLowerCase();\n const value = input[key];\n if (sensitiveKeys.includes(lowerKey) && typeof value === 'string') { // Key string\n result[key] = '*********'; //btoa(value);\n } else if (typeof value === 'object') { // Key object -> busca en objeto anidado\n result[key] = obfuscateHandle(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n return input;\n };\n return obfuscateHandle(data);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class UserEventService {\n\n endPoint: string;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any) {\n this.endPoint = environment.endPointCore;\n }\n\n public registerUserEvent(eventType: string,\n optionId: number | null,\n entityType: string | null,\n entityId: string | null,\n paramsIn: string | null,\n paramsOut: string | null): Observable<any> {\n const param = {\n eventType,\n optionId,\n entityType,\n entityId,\n paramsIn,\n paramsOut\n };\n return this.http.post<any>(this.endPoint + '/security/user/event', param)\n .pipe(\n map((res: any) => res));\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CryptoService } from './services/crypto.service';\nimport { AlertComponent } from './alert/alert.component';\nimport { MessagesService } from './services/messages.service';\nimport { SessionService } from './services/session.service';\nimport { SsiSecurityCommonsComponent } from './ssi-security-commons.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { JwtService } from './services/jwt.service';\nimport { CommonModule } from '@angular/common';\nimport { UserEventService } from \"./services/user-event.service\";\n\n\n@NgModule({\n declarations: [\n SsiSecurityCommonsComponent,\n AlertComponent\n ],\n imports: [\n MatSnackBarModule,\n MatDialogModule,\n MatButtonModule,\n CommonModule\n ],\n exports: [\n SsiSecurityCommonsComponent\n ],\n providers: [\n MessagesService,\n SessionService,\n CryptoService,\n JwtService,\n UserEventService\n ]\n})\nexport class SsiSecurityCommonsModule {\n static forRoot(environment: any): ModuleWithProviders<SsiSecurityCommonsModule> {\n return {\n ngModule: SsiSecurityCommonsModule,\n providers: [{provide: 'environment', useValue: environment}]\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HybridEncryptionService {\n private publicKeyPem = `-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydjMaPDQvcNCPsB3zmuA\nRyDw/eVPjH8eITcWq+TnmqW4FCxwTxAQQy8bEnO7HC8eUVaD8tlNaLVjiRRCo0+o\nJMDZC5S9aUGpz/Ueghp5aziu0abk7pZ+x/BrfpAN+7VteZh00d/YAtZlbQ6kHM44\noz2d7Fj1MPzB22ZoEnmcFqBlvsW8yblM38HEAKRXj9733XiayDoq6ivP046IFBpP\nCgg7kOLfOYMt7ZNkaKzDeYBfQAvhW+Nd6EN+8CCrI8//fnwRbrItzgR5KXwJ0F5T\nw6/YhIkJi7Ce6kR8D7aYdXNoRKzX5m+GxSkLtiMImHOnVWg+wo/lvCbLRWS+QQ14\npQIDAQAB\n-----END PUBLIC KEY-----`;\n private publicKey!: CryptoKey;\n\n constructor() {\n this.loadPublicKey();\n }\n\n /** Import RSA public key */\n private async loadPublicKey(): Promise<void> {\n const pemHeader = '-----BEGIN PUBLIC KEY-----';\n const pemFooter = '-----END PUBLIC KEY-----';\n const pemContents = this.publicKeyPem\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n const binaryDer = Uint8Array.from(atob(pemContents), c => c.charCodeAt(0));\n\n this.publicKey = await crypto.subtle.importKey(\n 'spki',\n binaryDer.buffer,\n {\n name: 'RSA-OAEP',\n hash: 'SHA-256'\n },\n true,\n ['encrypt']\n );\n }\n\n /** Generate a random AES key */\n private async generateAesKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n }\n\n /** Encrypt large data with AES and AES key with RSA */\n async encrypt(data: any): Promise<{ encryptedKey: string; encryptedData: string; iv: string }> {\n if (!this.publicKey) {\n await this.loadPublicKey();\n }\n\n // Convert payload to JSON + Uint8Array\n const encoder = new TextEncoder();\n const plainBytes = encoder.encode(JSON.stringify(data));\n\n // Generate AES key + IV\n const aesKey = await this.generateAesKey();\n const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM nonce\n\n // Encrypt data with AES\n const encryptedDataBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n aesKey,\n plainBytes\n );\n\n // Export AES key\n const rawAesKey = await crypto.subtle.exportKey('raw', aesKey);\n\n // Encrypt AES key with RSA\n const encryptedKeyBuffer = await crypto.subtle.encrypt(\n { name: 'RSA-OAEP' },\n this.publicKey,\n rawAesKey\n );\n\n return {\n encryptedKey: this.arrayBufferToBase64(encryptedKeyBuffer),\n encryptedData: this.arrayBufferToBase64(encryptedDataBuffer),\n iv: this.arrayBufferToBase64(iv.buffer)\n };\n }\n\n /** Convert ArrayBuffer → Base64 */\n private arrayBufferToBase64(buffer: ArrayBuffer): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n }\n}\n","/* eslint-disable */\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpErrorResponse,\n HttpResponse\n} from '@angular/common/http';\nimport { BehaviorSubject, from, Observable, throwError } from 'rxjs';\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { MessagesService } from './messages.service';\nimport { CryptoService } from './crypto.service';\nimport { Router } from '@angular/router';\nimport { SessionService } from './session.service';\nimport { LANG, TOKEN } from '../shared/constants';\nimport { JwtService } from './jwt.service';\nimport { HybridEncryptionService } from './hybrid-encryption.service';\n\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n private environment;\n\n constructor(private cryptoService: CryptoService, private hybridEncryptionService: HybridEncryptionService, @Inject('environment') environment: any) {\n console.log('AuthInterceptor constructor');\n this.environment = environment;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n let token;\n if(this.environment.production) {\n const t = this.cryptoService.encrypt(TOKEN);\n const to = window.localStorage.getItem(t);\n if (to) {\n token = this.cryptoService.decrypt(to);\n }\n } else {\n token = window.localStorage.getItem(TOKEN);\n }\n\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true'){\n let body = request.body;\n let bodyStr = JSON.stringify(body);\n var newBody = {\n encrypted: this.cryptoService.encrypt(bodyStr)\n }\n request = request.clone({\n body: newBody\n });\n }\n if (token) {\n request = request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token,\n }\n });\n }\n\n const l = window.localStorage.getItem(LANG);\n if (l && request.url.indexOf(this.environment.authEndPoint)<0) {\n request = request.clone({\n headers: request.headers.append('Language', l)\n });\n }\n\n const isEncrypted = request.headers.get('X-Encrypted');\n if (isEncrypted === 'true' && request.body) {\n return from(this.hybridEncryptionService.encrypt(request.body)).pipe(\n switchMap(encryptedPayload => {\n const newReq = request.clone({\n body: encryptedPayload\n });\n return next.handle(newReq);\n })\n );\n }\n\n return next.handle(request);\n }\n}\n\n\n@Injectable()\nexport class ResponseInterceptor implements HttpInterceptor {\n\n private messages: MessagesService | undefined;\n private isRefreshing = false;\n private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n constructor(private injector: Injector,\n private router: Router,\n private cryptoService: CryptoService,\n private jwtService: JwtService,\n private sessionService: SessionService) {\n setTimeout(() => {\n this.messages = this.injector.get(MessagesService);\n })\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(request).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true' && event.body.encrypted){\n event = event.clone({body: this.decryptBody(event.body)});\n }\n }\n return event;\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse) {\n console.error(error);\n let nerror = error;\n if (this.router.url != '/login' && this.router.url.indexOf('/login')<0) {\n if (nerror.status === 401) {\n return this.handle401Error(request, next);\n } else {\n let skipError = request.headers.get('skipError');\n if(skipError && skipError==='true'){\n return throwError(nerror);\n } else {\n this.messages?.showErrorMessage(nerror, request);\n }\n }\n } else {\n return throwError(nerror);\n }\n }\n })) as Observable<HttpEvent<any>>;\n }\n\n decryptBody(body: any): any {\n let encrypted = body.encrypted;\n let strJson = this.cryptoService.decrypt(encrypted);\n return JSON.parse(strJson);\n }\n\n\n private handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshTokenSubject.next(null);\n const refreshToken = this.sessionService.getRefreshToken();\n if (refreshToken){\n const decoded = this.jwtService.decodeToken(refreshToken);\n return this.sessionService.getNewTokenClient(refreshToken, decoded.azp).pipe(\n switchMap((res: any) => {\n console.log('refresh token response');\n console.log(res);\n this.isRefreshing = false;\n this.sessionService.setToken(res.access_token);\n this.sessionService.setRefreshToken(res.refresh_token);\n this.refreshTokenSubject.next(res.access_token);\n return next.handle(this.addTokenHeader(request, res.access_token));\n }),\n catchError((err) => {\n this.isRefreshing = false;\n this.sessionService.logout();\n this.goToLogin();\n return throwError(err);\n })\n );\n }\n } else {\n return this.refreshTokenSubject.pipe(\n filter(token => token !== null),\n take(1),\n switchMap((token) => next.handle(this.addTokenHeader(request, token)))\n );\n }\n }\n\n private addTokenHeader(request: HttpRequest<any>, token: string) {\n return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });\n }\n\n private goToLogin(): void {\n this.sessionService.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n }\n\n}\n\n\n\n\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable prefer-const */\nimport { Inject, Injectable } from '@angular/core';\nimport { UserWebauthn } from '../user.model';\nimport { SessionService } from './session.service';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, map } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebAuthnService {\n\n webAuthnAvailable = !!navigator.credentials && !!navigator.credentials.create;\n environment: any;\n\n public constructor(\n private sessionService: SessionService,\n private http: HttpClient,\n private snackBar: MatSnackBar,\n @Inject('environment') environment: any\n ) {\n this.environment = environment;\n }\n\n webAuthnSignup(user: UserWebauthn): Promise<any> {\n console.log('[webAuthnSignup]');\n const publicKeyCredentialCreationOptions: PublicKeyCredentialCreationOptions = {\n challenge: this.getChallenge(),\n rp: {\n name: 'WebAuthn',\n },\n user: {\n id: this.base64UrlToArrayBuffer(user.id),\n name: user.email,\n displayName: user.email,\n },\n pubKeyCredParams: [\n { alg: -8, type: 'public-key' },\n { alg: -7, type: 'public-key' },\n { alg: -257, type: 'public-key' },\n ],\n authenticatorSelection: {\n },\n timeout: 60000,\n attestation: 'none'\n };\n\n return navigator.credentials.create({\n publicKey: publicKeyCredentialCreationOptions,\n });\n\n }\n\n webAuthnSignin(user: UserWebauthn): Promise<any> {\n console.log(user);\n /* {\n \"id\": \"b18ee077-f896-44f4-a2d4-3ac831eb1c90\",\n \"email\": \"test.user@email.com\",\n \"password\": \"\",\n \"credentials\": [\n [\n {\n \"id\": {},\n \"type\": \"public-key\"\n }\n ]\n ]\n } */\n let publicKeyCredentials = {\n challenge: this.getChallenge(),\n allowCredentials: user.credentials[0]\n };\n return navigator.credentials.get({ publicKey: publicKeyCredentials });\n }\n\n\n getChallenge(): ArrayBuffer {\n return this.base64UrlToArrayBuffer('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z');\n }\n\n register(user: UserWebauthn, newCredentialInfo: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let enc = new TextDecoder('utf-8');\n let clientDataJSON = enc.decode(newCredentialInfo.response.clientDataJSON);\n console.log(clientDataJSON);\n let clientData = JSON.parse(clientDataJSON);\n console.log(clientData);\n const publicKey = this.arrayBufferToBase64Url(newCredentialInfo.rawId);\n let idList = [{\n // id: newCredentialInfo.rawId,\n id: publicKey,\n type: 'public-key'\n }];\n user.credentials.push(idList);\n console.log(user);\n this.addAttributeUser(user.id, 'webauthn_key', publicKey).subscribe({\n next: (res) => {\n console.log(res);\n resolve(res);\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n });\n return promise;\n }\n\n\n base64UrlToArrayBuffer(base64UrlString: string): ArrayBuffer {\n const base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');\n const paddedBase64String = base64String.padEnd(Math.ceil(base64String.length / 4) * 4, '=');\n const uint8Array = new Uint8Array(\n atob(paddedBase64String)\n .split('')\n .map((char) => char.charCodeAt(0))\n );\n return uint8Array.buffer;\n }\n\n arrayBufferToBase64Url(arrayBuffer: ArrayBuffer): string {\n const uint8Array = new Uint8Array(arrayBuffer);\n let base64String = btoa(String.fromCharCode.apply(null, Array.from(uint8Array)));\n base64String = base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n return base64String;\n }\n\n\n signUp(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: []\n };\n this.webAuthnSignup(user)\n .then((credential: PublicKeyCredential) => {\n console.log('credentials.create RESPONSE', credential);\n this.register(user, credential).then((res: any) => {\n console.log(res);\n this.showSnackBar(this.getMessage('signUpOk'), ['snack-success']);\n resolve(this.getMessage('signUpOk'));\n }).catch((err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }).catch((error) => {\n console.error('credentials.create ERROR', error);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n signIn(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: [{}]\n };\n\n this.getAttributeUser(user.id, 'webauthn_key').subscribe({\n next: (res) => {\n console.log(res);\n if (res.data && res.data.webauthn_key && res.data.webauthn_key.length > 0) {\n\n const cred = {\n id: this.base64UrlToArrayBuffer(res.data.webauthn_key[0]),\n type: 'public-key'\n };\n user.credentials.splice(0,1);\n user.credentials.push([cred]);\n\n this.webAuthnSignin(user).then((response) => {\n console.log('SUCCESSFULLY GOT AN ASSERTION!', response);\n resolve('ok');\n })\n .catch((error) => {\n console.error('FAIL', error);\n this.showSnackBar(this.getMessage('invalidCredentials'), ['snack-error']);\n reject(this.getMessage('invalidCredentials'));\n });\n } else {\n this.showSnackBar(this.getMessage('noCredentials'), ['snack-error']);\n reject(this.getMessage('noCredentials'));\n }\n },\n error: (err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('errorRetrievingCredentials'), ['snack-error']);\n reject(this.getMessage('errorRetrievingCredentials'));\n }\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n addAttributeUser(userId: any, code: any, value: any): Observable<any> {\n return this.http.post<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}/${value}`,{})\n .pipe(\n map(res => res));\n }\n\n getAttributeUser(userId: any, code: any): Observable<any> {\n return this.http.get<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}`)\n .pipe(\n map(res => res));\n }\n\n showSnackBar(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n getMessage(code: string): string {\n let msg = '';\n const lang = window.localStorage.getItem('LANG');\n const messagesEn: any = {\n signUpOk: 'Credentials registered successfully',\n signUpNok: 'A problem occurred while registering credentials',\n browserNok: 'The browser does not support this functionality',\n noCredentials: 'The user has no stored credentials',\n invalidCredentials: 'The credentials are invalid',\n errorRetrievingCredentials: 'There was a problem retrieving credentials',\n };\n const messagesEs: any = {\n signUpOk: 'Credenciales registradas exitosamente',\n signUpNok: 'Se produjo un problema al registrar las credenciales',\n browserNok: 'El navegador no soporta esta funcionalidad',\n noCredentials: 'El usuario no tiene credenciales almacenadas',\n invalidCredentials: 'Las credenciales no son válidas',\n errorRetrievingCredentials: 'Se produjo un problema al recuperar las credenciales',\n };\n if (lang && lang==='en') {\n msg = messagesEn[code];\n } else {\n msg = messagesEs[code];\n }\n return msg;\n }\n\n}\n","/*\n * Public API Surface of ssi-security-commons\n */\n\nexport * from './lib/ssi-security-commons.service';\nexport * from './lib/ssi-security-commons.component';\nexport * from './lib/ssi-security-commons.module';\nexport * from './lib/services/auth-interceptor.service';\nexport * from './lib/services/session.service';\nexport * from './lib/services/messages.service';\nexport * from './lib/services/web-authn.service';\nexport * from './lib/user.model';\nexport * from './lib/services/crypto.service';\nexport * from './lib/services/jwt.service';\nexport * from './lib/shared/constants';\nexport * from './lib/services/user-event.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CryptoService","i3.JwtService","i3","i1.CryptoService","i4.JwtService","i5.SessionService","map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ssi-security-commons.mjs","sources":["../../../projects/ssi-security-commons/src/lib/ssi-security-commons.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.component.ts","../../../projects/ssi-security-commons/src/lib/services/crypto.service.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.html","../../../projects/ssi-security-commons/src/lib/shared/constants.ts","../../../projects/ssi-security-commons/src/lib/services/jwt.service.ts","../../../projects/ssi-security-commons/src/lib/services/session.service.ts","../../../projects/ssi-security-commons/src/lib/services/messages.service.ts","../../../projects/ssi-security-commons/src/lib/services/user-event.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.module.ts","../../../projects/ssi-security-commons/src/lib/services/hybrid-encryption.service.ts","../../../projects/ssi-security-commons/src/lib/services/auth-interceptor.service.ts","../../../projects/ssi-security-commons/src/lib/services/web-authn.service.ts","../../../projects/ssi-security-commons/src/public-api.ts","../../../projects/ssi-security-commons/src/ssi-security-commons.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SsiSecurityCommonsService {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ssi-security-commons',\n template: ` <p>ssi-security-commons works!</p>\n `,\n styles: [\n ]\n})\nexport class SsiSecurityCommonsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\n@Injectable()\nexport class CryptoService {\n\n private configuration: any;\n private key: any;\n private secret = '&E)H@McQfThWmZq4';\n\n constructor() {\n this.configuration = {\n mode: CryptoJS.mode.ECB\n };\n const hash = CryptoJS.SHA1(this.secret);\n this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n }\n\n encrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();\n }\n\n decrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n encryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.encrypt(text, key, this.configuration).toString();\n }\n\n decryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface DialogData {\n title?: string;\n icon?: string;\n type?: string;\n message?: string;\n okText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'lib-app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n\n constructor(\n public dialogRef: MatDialogRef<AlertComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"sec-alert-icon\" *ngIf=\"data.icon==='warn'\">\n <svg width=\"48\" height=\"49\" viewBox=\"0 0 48 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 13.5C24.69 13.5 25.25 14.06 25.25 14.75V27.25C25.25 27.5815 25.1183 27.8995 24.8839 28.1339C24.6495 28.3683 24.3315 28.5 24 28.5C23.6685 28.5 23.3505 28.3683 23.1161 28.1339C22.8817 27.8995 22.75 27.5815 22.75 27.25V14.75C22.75 14.06 23.31 13.5 24 13.5ZM24 34.5C24.5304 34.5 25.0391 34.2893 25.4142 33.9142C25.7893 33.5391 26 33.0304 26 32.5C26 31.9696 25.7893 31.4609 25.4142 31.0858C25.0391 30.7107 24.5304 30.5 24 30.5C23.4696 30.5 22.9609 30.7107 22.5858 31.0858C22.2107 31.4609 22 31.9696 22 32.5C22 33.0304 22.2107 33.5391 22.5858 33.9142C22.9609 34.2893 23.4696 34.5 24 34.5ZM4 24.5C4 13.454 12.954 4.5 24 4.5C35.046 4.5 44 13.454 44 24.5C44 35.546 35.046 44.5 24 44.5C12.954 44.5 4 35.546 4 24.5ZM24 7C14.335 7 6.5 14.835 6.5 24.5C6.5 34.165 14.335 42 24 42C33.665 42 41.5 34.165 41.5 24.5C41.5 14.835 33.665 7 24 7Z\" fill=\"#FF4021\"/>\n </svg>\n</div>\n<h1 mat-dialog-title class=\"sec-alert-title\">{{data.title?data.title:'Alert'}}</h1>\n<div mat-dialog-content class=\"alert-min-width sec-alert-content\">\n <div>\n {{data.message}}\n </div>\n</div>\n<div class=\"sec-alert-actions\"> \n <button mat-flat-button color=\"primary\" class=\"sec-alert-ok\" (click)=\"onConfirm()\">{{data.okText ? data.okText : 'OK'}}</button>\n <button mat-flat-button class=\"sec-alert-cancel\" (click)=\"onCancel()\" *ngIf=\"data.cancelText\">{{data.cancelText ? data.cancelText : 'Cancel'}}</button>\n</div>\n","export const TOKEN = 'TOKEN';\nexport const REFRESH_TOKEN = 'REFRESH_TOKEN';\nexport const USERDATA = 'USERDATA';\nexport const LANG = 'LANG';\n","/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class JwtService {\n\n public decodeTokenOld(token: string) {\n const _decodeToken = (token: string) => {\n try {\n return JSON.parse(atob(token));\n } catch {\n return;\n }\n };\n return token\n .split('.')\n .map(token => _decodeToken(token))\n .reduce((acc, curr) => {\n if (!!curr) acc = { ...acc, ...curr };\n return acc;\n }, Object.create(null));\n }\n\n public decodeToken(token: string) {\n const payload = token.split('.')[1];\n // Add padding if needed\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '=');\n // Decode Base64 to binary string\n const binary = atob(padded);\n // Convert binary string to UTF-8 correctly\n const utf8String = decodeURIComponent(\n Array.from(binary)\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\n .join('')\n );\n // Parse JSON payload\n return JSON.parse(utf8String);\n }\n\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable arrow-body-style */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FrontEndException, UserData } from '../user.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { JwtService } from './jwt.service';\nimport { CryptoService } from './crypto.service';\nimport { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';\n\n\n@Injectable()\nexport class SessionService {\n\n userdata: UserData | undefined;\n token: string | undefined;\n refreshToken: string | undefined;\n endPoint: string;\n loginUrl = 'http://localhost:4200/login';\n applicationId: any;\n environment: any;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any,\n private cryptoService: CryptoService,\n private jwtService: JwtService) {\n this.endPoint = environment.endPointCore;\n this.applicationId = environment.applicationId;\n this.environment = environment;\n }\n\n public buildUserdataFromToken(token: string): any {\n const tokenData = this.jwtService.decodeToken(token);\n const userData: UserData = {\n givenName: tokenData.given_name,\n familyName: tokenData.family_name,\n name: tokenData.name,\n roles: tokenData.realm_access.roles,\n userId: tokenData.sub,\n username: tokenData.preferred_username,\n email: tokenData.email,\n emailVerified: tokenData.email_verified,\n countryCode: tokenData.country_code,\n partyId: tokenData.party_id\n };\n return userData;\n }\n\n public async reviewSessionData(): Promise<any> {\n const value = await this.checkSessionData() as any;\n console.log(`async result: ${value}`);\n return value;\n }\n\n public setUserdata(userdata: any): void {\n this.userdata = userdata;\n }\n\n public setTokens(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n }\n\n public getUserdata(): UserData | undefined {\n return this.userdata;\n }\n\n public setRefreshToken(refreshToken: any): void {\n this.refreshToken = refreshToken;\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n }\n\n public getRefreshToken(): string | undefined {\n return this.refreshToken;\n }\n\n public setToken(token: any): any {\n this.token = token;\n this.saveStorageData(TOKEN, token);\n }\n\n public getToken(): any {\n return this.token;\n }\n\n public destroyCredentials(): void {\n this.token = undefined;\n this.refreshToken = undefined;\n this.deleteStorageData(TOKEN);\n this.deleteStorageData(REFRESH_TOKEN);\n }\n\n public destroyUserData(): void {\n this.userdata = undefined;\n this.deleteStorageData(USERDATA);\n }\n\n public saveCredentials(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n this.saveStorageData(TOKEN, token);\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n this.saveUserData(this.buildUserdataFromToken(token));\n }\n\n public saveUserData(userData: any): void {\n this.userdata = userData;\n this.saveStorageData(USERDATA, JSON.stringify(userData));\n }\n\n public isLoggedIn(): boolean {\n return !!this.userdata;\n }\n\n logout(): Promise<any> {\n let clientId = this.environment.authClient;\n if (this.refreshToken) {\n const decoded = this.jwtService.decodeToken(this.refreshToken);\n clientId = decoded.azp;\n }\n return new Promise((resolve, reject) => {\n this.logoutApiClient(clientId).subscribe(res => {\n console.log(res);\n this.destroyCredentials();\n this.destroyUserData();\n this.goToLogin();\n resolve(null);\n }, (err) => {\n this.destroyCredentials();\n this.destroyUserData();\n console.error(err);\n reject(err);\n });\n });\n }\n\n getNewToken(refreshToken: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getNewTokenClient(refreshToken: string, clientId: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getTokenClientCode(refreshToken: string, clientId: string): Observable<any> {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n\n getLoginUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/login/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n getHomeUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/home/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n logoutApi(): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n logoutApiClient(clientId: string): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + clientId;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n goToLogin(): void {\n this.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n window.location.href = loginUrl;\n }, (err) => {\n console.error(err);\n });\n }\n\n public loadSessionData(): void {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n data = window.localStorage.getItem(u);\n token = window.localStorage.getItem(t);\n refreshToken = window.localStorage.getItem(r);\n if (data && token && refreshToken) {\n data = this.cryptoService.decrypt(data);\n token = this.cryptoService.decrypt(token);\n refreshToken = this.cryptoService.decrypt(refreshToken);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n const user = JSON.parse(data);\n this.setTokens(token, refreshToken);\n this.setUserdata(user);\n }\n }\n\n userHasOptionsInApp(userId: any, applicationId: any): Observable<any> {\n return this.http.get<any>(this.endPoint + `/security/option/${applicationId}/${userId}`)\n .pipe(\n map(res => res));\n }\n\n checkAppPermissions(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n console.log(this.userdata?.userId, this.applicationId);\n if (this.applicationId) {\n this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {\n console.log(res);\n if (res.data) {\n resolve('ok');\n } else {\n this.getHomeUrl().subscribe(res1 => {\n console.log(res1);\n const homeUrl = res1.data;\n window.location.href = homeUrl;\n reject('nok');\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n }\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n } else {\n resolve('ok');\n }\n });\n return promise;\n }\n\n\n // eslint-disable-next-line max-len\n public getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any> {\n const param = {\n userId: this.userdata?.userId,\n applicationId,\n type,\n language,\n entityCode,\n parentOptionId,\n includeData\n };\n return this.http.post<any>(this.endPoint + '/security/option/user', param)\n .pipe(\n map(res => res));\n }\n\n registerException(param: FrontEndException): Observable<any> {\n const headers = new HttpHeaders().set('skipError', 'true');\n return this.http.post<any>(this.endPoint + '/auth/exception/log', param, {headers})\n .pipe(\n map(res => res));\n }\n\n saveStorageData(key: string, value: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = this.cryptoService.encrypt(value);\n window.localStorage.setItem(k, v);\n } else {\n window.localStorage.setItem(key, value);\n }\n }\n\n deleteStorageData(key: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n window.localStorage.removeItem(k);\n } else {\n window.localStorage.removeItem(key);\n }\n }\n\n getStorageData(key: string): string | null {\n let res: string | null;\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = window.localStorage.getItem(k);\n if (v) {\n res = this.cryptoService.decrypt(v);\n return res;\n } else {\n res = null;\n }\n } else {\n res = window.localStorage.getItem(key);\n }\n return res;\n }\n\n\n public removeUrlData(): void {\n const url = new URL(window.location.href);\n const queryParams = url.searchParams;\n queryParams.delete('code');\n queryParams.delete('clientId');\n const newUrl = url.origin + url.pathname + '?' + queryParams.toString();\n window.history.replaceState({}, document.title, newUrl);\n }\n\n public checkSessionData(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n\n const currentUrl = new URL(window.location.href);\n const code = currentUrl.searchParams.get('code');\n console.log('code', code);\n if (code) {\n const codeDecoded = this.getDecodedAuthCode(code);\n // console.log('code', codeDecoded);\n const clientId = currentUrl.searchParams.get('clientId');\n console.log('clientId', clientId);\n const decoded = this.jwtService.decodeToken(codeDecoded);\n this.getTokenClientCode(codeDecoded, clientId?clientId:decoded.azp).subscribe({\n next: (res) => {\n console.log(res);\n token = res.access_token;\n refreshToken = res.refresh_token;\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n this.removeUrlData();\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n data = this.getStorageData(USERDATA);\n token = this.getStorageData(TOKEN);\n refreshToken = this.getStorageData(REFRESH_TOKEN);\n if (data && token && refreshToken) {\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n } else {\n const url = window.location.href;\n if (url.indexOf('/redirect')>-1) {\n resolve('OK');\n } else {\n this.destroyCredentials();\n this.destroyUserData();\n this.getLoginUrl().subscribe(res1 => {\n console.log(res1);\n this.loginUrl = res1.data;\n if (url.indexOf('/login')<0 && url.indexOf('/forgot')<0 &&\n url.indexOf('/reset')<0 && url.indexOf('/verify')<0 &&\n url.indexOf('/sign_up')<0) {\n window.location.href = this.loginUrl + '?continue='+encodeURIComponent(url);\n }\n resolve('NOK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n }\n }\n }\n });\n return promise;\n }\n\n\n\n public checkSessionDataMicrofront(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n const d1 = window.localStorage.getItem(u);\n const d2 = window.localStorage.getItem(t);\n const d3 = window.localStorage.getItem(r);\n if (d1 && d2 && d3) {\n data = this.cryptoService.decrypt(d1);\n token = this.cryptoService.decrypt(d2);\n refreshToken = this.cryptoService.decrypt(d3);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n console.log('local session ok');\n this.saveCredentials(token, refreshToken);\n resolve('OK');\n } else {\n console.error('local session nok');\n reject('NOK');\n }\n });\n return promise;\n }\n\n public getAuthCode(): string {\n const enc = this.cryptoService.encrypt(this.refreshToken?this.refreshToken:'');\n return encodeURIComponent(enc);\n }\n\n private getDecodedAuthCode(code: string): string {\n const dec = decodeURIComponent(code);\n return this.cryptoService.decrypt(dec);\n }\n\n public refreshSession(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n const decoded = this.jwtService.decodeToken(refreshToken);\n this.getNewTokenClient(refreshToken, decoded.azp).subscribe({\n next: (res: any) => {\n console.log(res);\n this.setToken(res.access_token);\n this.setRefreshToken(res.refresh_token);\n this.saveCredentials(res.access_token, res.refresh_token);\n resolve('OK');\n },\n error: (err: any) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n reject('NOK');\n }\n });\n return promise;\n }\n\n}\n\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable quote-props */\nimport { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n// import { Router } from '@angular/router';\nimport { AlertComponent } from '../alert/alert.component';\nimport { FrontEndException } from '../user.model';\nimport { SessionService } from './session.service';\n\n\n@Injectable()\nexport class MessagesService {\n\n private interceptorMessages: any;\n applicationId: any;\n\n constructor(\n public auth: SessionService,\n // private router: Router,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n @Inject('environment') environment: any\n ) {\n this.applicationId = environment.applicationId;\n }\n\n\n // eslint-disable-next-line max-lines-per-function, complexity\n showErrorMessage(error: HttpErrorResponse, request: HttpRequest<any>): void {\n console.log('error: ', error);\n this.registerLog(error, request);\n const msgs: any = this.getInterceptorMessages();\n switch (error.status) {\n case 302: {\n this.messageSnackError(error);\n break;\n }\n case 400: {\n if (error.error.error === 'invalid_grant') {\n this.goNavigateLogin(msgs);\n } else {\n this.showSnackError(error.message, ['snack-error']);\n }\n break;\n }\n case 403: {\n this.goNavigateLogin(msgs);\n break;\n }\n case 404: {\n this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);\n break;\n }\n case 409: {\n this.messageDialog(error, msgs);\n break;\n }\n case 412: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 422: {\n this.messageDialog(error, msgs);\n break;\n }\n case 428: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 500: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 503: {\n this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);\n break;\n }\n case -1: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n case 0: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n }\n }\n\n messageSnackError(error: any): void {\n const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :\n error.error.message ? error.error.message : error.message;\n this.showSnackError(errorMessage, ['snack-error']);\n }\n\n goNavigateLogin(msgs: any): void {\n // if (this.router.url !== '/login') {\n this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);\n // this.router.navigate(['/login']);\n this.auth.destroyCredentials();\n this.auth.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl) < 0) {\n window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n // }\n }\n\n messageAlertDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n if (error.error.exception) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exception; }\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else if (error.error.message) {\n message = error.error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n if (error.error.referenceError) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.referenceError; }\n } else if (error.message) {\n message = error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n messageDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n } else if (error.error.message) {\n message = error.error.message;\n } else if (error.message) {\n message = error.message;\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n showSnackError(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n setInterceptorMessages(message: any): void {\n this.interceptorMessages = message;\n }\n\n // eslint-disable-next-line max-lines-per-function\n getInterceptorMessages(): string {\n if (!this.interceptorMessages) {\n let lang = window.localStorage.getItem('LANG');\n if (!lang) {\n const userLang = navigator.language;\n lang = userLang.split('-')[0];\n }\n const messagesEn = {\n auth_interceptor: {\n session_lost: 'Session lost, you have to login again.',\n not_found: 'Resource not found',\n title: 'We are sorry',\n message: 'We had a problem trying to process your request.',\n code: 'Code',\n unavailable: 'Service unavailable, please try again in a few minutes.',\n connection_error: 'Could not connect to server, please check your network connection.',\n accept_text: 'OK',\n cancel_text: 'Cancel'\n }\n };\n const messagesEs = {\n auth_interceptor: {\n session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',\n not_found: 'Recurso no encontrado',\n title: 'Lo sentimos',\n message: 'Tuvimos un problema al tratar de procesar su solicitud.',\n code: 'Código',\n unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',\n connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.',\n accept_text: 'Aceptar',\n cancel_text: 'Cancelar'\n }\n };\n if (lang && lang === 'es') {\n this.interceptorMessages = messagesEs;\n } else {\n this.interceptorMessages = messagesEn;\n }\n }\n return this.interceptorMessages;\n }\n\n\n registerLog(error: HttpErrorResponse, request: HttpRequest<any>): void {\n const u = this.auth.getUserdata();\n const param: FrontEndException = {\n httpStatus: error.status,\n httpStatusText: error.statusText,\n errorMessage: error.message,\n currentUrl: window.location.href,\n requestUrl: request.urlWithParams ? request.urlWithParams : undefined,\n requestBody: request.body ? JSON.stringify(this.obfuscateData(request.body)) : undefined,\n userId: u ? u.userId : undefined,\n applicationId: this.applicationId,\n requestDate: new Date()\n };\n this.auth.registerException(param).subscribe({\n next: (response) => {\n console.log('registerException', response);\n },\n error: (err: any) => {\n console.error('registerException', err);\n }\n });\n }\n\n private obfuscateData(data: any): any {\n const sensitiveKeys = ['password', 'card', 'cardnumber', 'token'];\n const obfuscateHandle = (input: any): any => {\n // Si es array itera uno por uno\n if (Array.isArray(input)) {\n return input.map(item => obfuscateHandle(item));\n }\n\n // Si es objeto valida si el atributo es string u object, lo demas lo salta\n if (typeof input === 'object' && input !== undefined) {\n const result: any = {};\n for (const key of Object.keys(input)) {\n const lowerKey = key.toLowerCase();\n const value = input[key];\n if (sensitiveKeys.includes(lowerKey) && typeof value === 'string') { // Key string\n result[key] = '*********'; //btoa(value);\n } else if (typeof value === 'object') { // Key object -> busca en objeto anidado\n result[key] = obfuscateHandle(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n return input;\n };\n return obfuscateHandle(data);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class UserEventService {\n\n endPoint: string;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any) {\n this.endPoint = environment.endPointCore;\n }\n\n public registerUserEvent(eventType: string,\n optionId: number | null,\n entityType: string | null,\n entityId: string | null,\n paramsIn: string | null,\n paramsOut: string | null): Observable<any> {\n const param = {\n eventType,\n optionId,\n entityType,\n entityId,\n paramsIn,\n paramsOut\n };\n return this.http.post<any>(this.endPoint + '/security/user/event', param)\n .pipe(\n map((res: any) => res));\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CryptoService } from './services/crypto.service';\nimport { AlertComponent } from './alert/alert.component';\nimport { MessagesService } from './services/messages.service';\nimport { SessionService } from './services/session.service';\nimport { SsiSecurityCommonsComponent } from './ssi-security-commons.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { JwtService } from './services/jwt.service';\nimport { CommonModule } from '@angular/common';\nimport { UserEventService } from \"./services/user-event.service\";\n\n\n@NgModule({\n declarations: [\n SsiSecurityCommonsComponent,\n AlertComponent\n ],\n imports: [\n MatSnackBarModule,\n MatDialogModule,\n MatButtonModule,\n CommonModule\n ],\n exports: [\n SsiSecurityCommonsComponent\n ],\n providers: [\n MessagesService,\n SessionService,\n CryptoService,\n JwtService,\n UserEventService\n ]\n})\nexport class SsiSecurityCommonsModule {\n static forRoot(environment: any): ModuleWithProviders<SsiSecurityCommonsModule> {\n return {\n ngModule: SsiSecurityCommonsModule,\n providers: [{provide: 'environment', useValue: environment}]\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HybridEncryptionService {\n private publicKeyPem = `-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydjMaPDQvcNCPsB3zmuA\nRyDw/eVPjH8eITcWq+TnmqW4FCxwTxAQQy8bEnO7HC8eUVaD8tlNaLVjiRRCo0+o\nJMDZC5S9aUGpz/Ueghp5aziu0abk7pZ+x/BrfpAN+7VteZh00d/YAtZlbQ6kHM44\noz2d7Fj1MPzB22ZoEnmcFqBlvsW8yblM38HEAKRXj9733XiayDoq6ivP046IFBpP\nCgg7kOLfOYMt7ZNkaKzDeYBfQAvhW+Nd6EN+8CCrI8//fnwRbrItzgR5KXwJ0F5T\nw6/YhIkJi7Ce6kR8D7aYdXNoRKzX5m+GxSkLtiMImHOnVWg+wo/lvCbLRWS+QQ14\npQIDAQAB\n-----END PUBLIC KEY-----`;\n private publicKey!: CryptoKey;\n\n constructor() {\n this.loadPublicKey();\n }\n\n /** Import RSA public key */\n private async loadPublicKey(): Promise<void> {\n const pemHeader = '-----BEGIN PUBLIC KEY-----';\n const pemFooter = '-----END PUBLIC KEY-----';\n const pemContents = this.publicKeyPem\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n const binaryDer = Uint8Array.from(atob(pemContents), c => c.charCodeAt(0));\n\n this.publicKey = await crypto.subtle.importKey(\n 'spki',\n binaryDer.buffer,\n {\n name: 'RSA-OAEP',\n hash: 'SHA-256'\n },\n true,\n ['encrypt']\n );\n }\n\n /** Generate a random AES key */\n private async generateAesKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n }\n\n /** Encrypt large data with AES and AES key with RSA */\n async encrypt(data: any): Promise<{ encryptedKey: string; encryptedData: string; iv: string }> {\n if (!this.publicKey) {\n await this.loadPublicKey();\n }\n\n // Convert payload to JSON + Uint8Array\n const encoder = new TextEncoder();\n const plainBytes = encoder.encode(JSON.stringify(data));\n\n // Generate AES key + IV\n const aesKey = await this.generateAesKey();\n const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM nonce\n\n // Encrypt data with AES\n const encryptedDataBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n aesKey,\n plainBytes\n );\n\n // Export AES key\n const rawAesKey = await crypto.subtle.exportKey('raw', aesKey);\n\n // Encrypt AES key with RSA\n const encryptedKeyBuffer = await crypto.subtle.encrypt(\n { name: 'RSA-OAEP' },\n this.publicKey,\n rawAesKey\n );\n\n return {\n encryptedKey: this.arrayBufferToBase64(encryptedKeyBuffer),\n encryptedData: this.arrayBufferToBase64(encryptedDataBuffer),\n iv: this.arrayBufferToBase64(iv.buffer)\n };\n }\n\n /** Convert ArrayBuffer → Base64 */\n private arrayBufferToBase64(buffer: ArrayBuffer): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n }\n}\n","/* eslint-disable */\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpErrorResponse,\n HttpResponse\n} from '@angular/common/http';\nimport { BehaviorSubject, from, Observable, throwError } from 'rxjs';\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { MessagesService } from './messages.service';\nimport { CryptoService } from './crypto.service';\nimport { Router } from '@angular/router';\nimport { SessionService } from './session.service';\nimport { LANG, TOKEN } from '../shared/constants';\nimport { JwtService } from './jwt.service';\nimport { HybridEncryptionService } from './hybrid-encryption.service';\n\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n private environment;\n\n constructor(private cryptoService: CryptoService, private hybridEncryptionService: HybridEncryptionService, @Inject('environment') environment: any) {\n console.log('AuthInterceptor constructor');\n this.environment = environment;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n let token;\n if(this.environment.production) {\n const t = this.cryptoService.encrypt(TOKEN);\n const to = window.localStorage.getItem(t);\n if (to) {\n token = this.cryptoService.decrypt(to);\n }\n } else {\n token = window.localStorage.getItem(TOKEN);\n }\n\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true'){\n let body = request.body;\n let bodyStr = JSON.stringify(body);\n var newBody = {\n encrypted: this.cryptoService.encrypt(bodyStr)\n }\n request = request.clone({\n body: newBody\n });\n }\n if (token) {\n request = request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token,\n }\n });\n }\n\n const l = window.localStorage.getItem(LANG);\n if (l && request.url.indexOf(this.environment.authEndPoint)<0) {\n request = request.clone({\n headers: request.headers.append('Language', l)\n });\n }\n\n const isEncrypted = request.headers.get('X-Encrypted');\n if (isEncrypted === 'true' && request.body) {\n return from(this.hybridEncryptionService.encrypt(request.body)).pipe(\n switchMap(encryptedPayload => {\n const newReq = request.clone({\n body: encryptedPayload\n });\n return next.handle(newReq);\n })\n );\n }\n\n return next.handle(request);\n }\n}\n\n\n@Injectable()\nexport class ResponseInterceptor implements HttpInterceptor {\n\n private messages: MessagesService | undefined;\n private isRefreshing = false;\n private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n constructor(private injector: Injector,\n private router: Router,\n private cryptoService: CryptoService,\n private jwtService: JwtService,\n private sessionService: SessionService) {\n setTimeout(() => {\n this.messages = this.injector.get(MessagesService);\n })\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(request).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true' && event.body.encrypted){\n event = event.clone({body: this.decryptBody(event.body)});\n }\n }\n return event;\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse) {\n console.error(error);\n let nerror = error;\n if (this.router.url != '/login' && this.router.url.indexOf('/login')<0) {\n if (nerror.status === 401) {\n return this.handle401Error(request, next);\n } else {\n let skipError = request.headers.get('skipError');\n if(skipError && skipError==='true'){\n return throwError(nerror);\n } else {\n this.messages?.showErrorMessage(nerror, request);\n }\n }\n } else {\n return throwError(nerror);\n }\n }\n })) as Observable<HttpEvent<any>>;\n }\n\n decryptBody(body: any): any {\n let encrypted = body.encrypted;\n let strJson = this.cryptoService.decrypt(encrypted);\n return JSON.parse(strJson);\n }\n\n\n private handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshTokenSubject.next(null);\n const refreshToken = this.sessionService.getRefreshToken();\n if (refreshToken){\n const decoded = this.jwtService.decodeToken(refreshToken);\n return this.sessionService.getNewTokenClient(refreshToken, decoded.azp).pipe(\n switchMap((res: any) => {\n console.log('refresh token response');\n console.log(res);\n this.isRefreshing = false;\n this.sessionService.setToken(res.access_token);\n this.sessionService.setRefreshToken(res.refresh_token);\n this.refreshTokenSubject.next(res.access_token);\n return next.handle(this.addTokenHeader(request, res.access_token));\n }),\n catchError((err) => {\n this.isRefreshing = false;\n this.sessionService.logout();\n this.goToLogin();\n return throwError(err);\n })\n );\n }\n } else {\n return this.refreshTokenSubject.pipe(\n filter(token => token !== null),\n take(1),\n switchMap((token) => next.handle(this.addTokenHeader(request, token)))\n );\n }\n }\n\n private addTokenHeader(request: HttpRequest<any>, token: string) {\n return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });\n }\n\n private goToLogin(): void {\n this.sessionService.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n }\n\n}\n\n\n\n\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable prefer-const */\nimport { Inject, Injectable } from '@angular/core';\nimport { UserWebauthn } from '../user.model';\nimport { SessionService } from './session.service';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, map } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebAuthnService {\n\n webAuthnAvailable = !!navigator.credentials && !!navigator.credentials.create;\n environment: any;\n\n public constructor(\n private sessionService: SessionService,\n private http: HttpClient,\n private snackBar: MatSnackBar,\n @Inject('environment') environment: any\n ) {\n this.environment = environment;\n }\n\n webAuthnSignup(user: UserWebauthn): Promise<any> {\n console.log('[webAuthnSignup]');\n const publicKeyCredentialCreationOptions: PublicKeyCredentialCreationOptions = {\n challenge: this.getChallenge(),\n rp: {\n name: 'WebAuthn',\n },\n user: {\n id: Uint8Array.from(user.id, c => c.charCodeAt(0)),\n name: user.email,\n displayName: user.email,\n },\n pubKeyCredParams: [{ alg: -7, type: 'public-key' }],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n },\n timeout: 60000,\n attestation: 'direct'\n };\n\n return navigator.credentials.create({\n publicKey: publicKeyCredentialCreationOptions,\n });\n\n }\n\n webAuthnSignin(user: UserWebauthn): Promise<any> {\n console.log(user);\n /* {\n \"id\": \"b18ee077-f896-44f4-a2d4-3ac831eb1c90\",\n \"email\": \"test.user@email.com\",\n \"password\": \"\",\n \"credentials\": [\n [\n {\n \"id\": {},\n \"type\": \"public-key\"\n }\n ]\n ]\n } */\n let publicKeyCredentials = {\n challenge: this.getChallenge(),\n allowCredentials: user.credentials[0]\n };\n return navigator.credentials.get({ publicKey: publicKeyCredentials });\n }\n\n\n getChallenge(): Uint8Array {\n return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));\n }\n\n register(user: UserWebauthn, newCredentialInfo: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let enc = new TextDecoder('utf-8');\n let clientDataJSON = enc.decode(newCredentialInfo.response.clientDataJSON);\n console.log(clientDataJSON);\n let clientData = JSON.parse(clientDataJSON);\n console.log(clientData);\n const publicKey = this.arrayBufferToBase64Url(newCredentialInfo.rawId);\n let idList = [{\n // id: newCredentialInfo.rawId,\n id: publicKey,\n type: 'public-key'\n }];\n user.credentials.push(idList);\n console.log(user);\n this.addAttributeUser(user.id, 'webauthn_key', publicKey).subscribe({\n next: (res) => {\n console.log(res);\n resolve(res);\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n });\n return promise;\n }\n\n\n base64UrlToArrayBuffer(base64UrlString: string): ArrayBuffer {\n const base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');\n const paddedBase64String = base64String.padEnd(Math.ceil(base64String.length / 4) * 4, '=');\n const uint8Array = new Uint8Array(\n atob(paddedBase64String)\n .split('')\n .map((char) => char.charCodeAt(0))\n );\n return uint8Array.buffer;\n }\n\n arrayBufferToBase64Url(arrayBuffer: ArrayBuffer): string {\n const uint8Array = new Uint8Array(arrayBuffer);\n let base64String = btoa(String.fromCharCode.apply(null, Array.from(uint8Array)));\n base64String = base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n return base64String;\n }\n\n\n signUp(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: []\n };\n this.webAuthnSignup(user)\n .then((credential: PublicKeyCredential) => {\n console.log('credentials.create RESPONSE', credential);\n this.register(user, credential).then((res: any) => {\n console.log(res);\n this.showSnackBar(this.getMessage('signUpOk'), ['snack-success']);\n resolve(this.getMessage('signUpOk'));\n }).catch((err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }).catch((error) => {\n console.error('credentials.create ERROR', error);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n signIn(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: [{}]\n };\n\n this.getAttributeUser(user.id, 'webauthn_key').subscribe({\n next: (res) => {\n console.log(res);\n if (res.data && res.data.webauthn_key && res.data.webauthn_key.length > 0) {\n\n const cred = {\n id: this.base64UrlToArrayBuffer(res.data.webauthn_key[0]),\n type: 'public-key'\n };\n user.credentials.splice(0,1);\n user.credentials.push([cred]);\n\n this.webAuthnSignin(user).then((response) => {\n console.log('SUCCESSFULLY GOT AN ASSERTION!', response);\n resolve('ok');\n })\n .catch((error) => {\n console.error('FAIL', error);\n this.showSnackBar(this.getMessage('invalidCredentials'), ['snack-error']);\n reject(this.getMessage('invalidCredentials'));\n });\n } else {\n this.showSnackBar(this.getMessage('noCredentials'), ['snack-error']);\n reject(this.getMessage('noCredentials'));\n }\n },\n error: (err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('errorRetrievingCredentials'), ['snack-error']);\n reject(this.getMessage('errorRetrievingCredentials'));\n }\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n addAttributeUser(userId: any, code: any, value: any): Observable<any> {\n return this.http.post<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}/${value}`,{})\n .pipe(\n map(res => res));\n }\n\n getAttributeUser(userId: any, code: any): Observable<any> {\n return this.http.get<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}`)\n .pipe(\n map(res => res));\n }\n\n showSnackBar(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n getMessage(code: string): string {\n let msg = '';\n const lang = window.localStorage.getItem('LANG');\n const messagesEn: any = {\n signUpOk: 'Credentials registered successfully',\n signUpNok: 'A problem occurred while registering credentials',\n browserNok: 'The browser does not support this functionality',\n noCredentials: 'The user has no stored credentials',\n invalidCredentials: 'The credentials are invalid',\n errorRetrievingCredentials: 'There was a problem retrieving credentials',\n };\n const messagesEs: any = {\n signUpOk: 'Credenciales registradas exitosamente',\n signUpNok: 'Se produjo un problema al registrar las credenciales',\n browserNok: 'El navegador no soporta esta funcionalidad',\n noCredentials: 'El usuario no tiene credenciales almacenadas',\n invalidCredentials: 'Las credenciales no son válidas',\n errorRetrievingCredentials: 'Se produjo un problema al recuperar las credenciales',\n };\n if (lang && lang==='en') {\n msg = messagesEn[code];\n } else {\n msg = messagesEs[code];\n }\n return msg;\n }\n\n}\n","/*\n * Public API Surface of ssi-security-commons\n */\n\nexport * from './lib/ssi-security-commons.service';\nexport * from './lib/ssi-security-commons.component';\nexport * from './lib/ssi-security-commons.module';\nexport * from './lib/services/auth-interceptor.service';\nexport * from './lib/services/session.service';\nexport * from './lib/services/messages.service';\nexport * from './lib/services/web-authn.service';\nexport * from './lib/user.model';\nexport * from './lib/services/crypto.service';\nexport * from './lib/services/jwt.service';\nexport * from './lib/shared/constants';\nexport * from './lib/services/user-event.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CryptoService","i3.JwtService","i3","i1.CryptoService","i4.JwtService","i5.SessionService","map"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export declare class WebAuthnService {
|
|
|
13
13
|
constructor(sessionService: SessionService, http: HttpClient, snackBar: MatSnackBar, environment: any);
|
|
14
14
|
webAuthnSignup(user: UserWebauthn): Promise<any>;
|
|
15
15
|
webAuthnSignin(user: UserWebauthn): Promise<any>;
|
|
16
|
-
getChallenge():
|
|
16
|
+
getChallenge(): Uint8Array;
|
|
17
17
|
register(user: UserWebauthn, newCredentialInfo: any): Promise<any>;
|
|
18
18
|
base64UrlToArrayBuffer(base64UrlString: string): ArrayBuffer;
|
|
19
19
|
arrayBufferToBase64Url(arrayBuffer: ArrayBuffer): string;
|