@idea-ionic/auth 5.28.0 → 5.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -15
- package/bundles/idea-ionic-auth.umd.js +14 -14
- package/bundles/idea-ionic-auth.umd.js.map +1 -1
- package/bundles/idea-ionic-auth.umd.min.js +2 -2
- package/bundles/idea-ionic-auth.umd.min.js.map +1 -1
- package/environment.d.ts +21 -0
- package/esm2015/environment.js +22 -0
- package/esm2015/environment.ngsummary.json +1 -0
- package/esm2015/src/auth.service.js +7 -6
- package/esm2015/src/signIn.page.js +6 -5
- package/esm2015/src/signUp.page.js +3 -2
- package/fesm2015/idea-ionic-auth.js +11 -10
- package/fesm2015/idea-ionic-auth.js.map +1 -1
- package/idea-ionic-auth.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,14 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { Storage } from '@ionic/storage';
|
|
4
4
|
import { AuthenticationDetails, CognitoUser, CognitoUserAttribute, CognitoUserPool, CognitoRefreshToken } from 'amazon-cognito-identity-js';
|
|
5
|
-
|
|
5
|
+
import { environment as env } from '@env';
|
|
6
|
+
const DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);
|
|
6
7
|
export class IDEAAuthService {
|
|
7
8
|
constructor(storage) {
|
|
8
9
|
this.storage = storage;
|
|
9
10
|
this.userPool = new CognitoUserPool({
|
|
10
|
-
UserPoolId:
|
|
11
|
-
ClientId:
|
|
11
|
+
UserPoolId: env.aws.cognito.userPoolId,
|
|
12
|
+
ClientId: env.aws.cognito.userPoolClientId
|
|
12
13
|
});
|
|
13
14
|
}
|
|
14
15
|
prepareAuthDetails(username, pwd) {
|
|
@@ -72,7 +73,7 @@ export class IDEAAuthService {
|
|
|
72
73
|
user.getSession((err) => __awaiter(this, void 0, void 0, function* () {
|
|
73
74
|
if (err)
|
|
74
75
|
return resolve();
|
|
75
|
-
if (
|
|
76
|
+
if (env.idea.auth.singleSimultaneousSession)
|
|
76
77
|
yield this.setCurrentDeviceForProject(null);
|
|
77
78
|
if (options.global)
|
|
78
79
|
user.globalSignOut({ onSuccess: () => resolve(), onFailure: err => reject(err) });
|
|
@@ -157,7 +158,7 @@ export class IDEAAuthService {
|
|
|
157
158
|
const isRobot = groups.some(x => x === 'robots');
|
|
158
159
|
if (isRobot)
|
|
159
160
|
return callback(new Error('ROBOT_USER'));
|
|
160
|
-
if (
|
|
161
|
+
if (env.idea.auth.singleSimultaneousSession)
|
|
161
162
|
return this.checkForSimultaneousSessions(userDetails, callback);
|
|
162
163
|
callback();
|
|
163
164
|
}
|
|
@@ -210,4 +211,4 @@ IDEAAuthService.decorators = [
|
|
|
210
211
|
IDEAAuthService.ctorParameters = () => [
|
|
211
212
|
{ type: Storage }
|
|
212
213
|
];
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsbUJBQW1CLEVBR3BCLE1BQU0sNEJBQTRCLENBQUM7QUFXcEMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBUTVELE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQXNCLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUNsQyxVQUFVLEVBQUUsNkJBQTZCO1lBQ3pDLFFBQVEsRUFBRSw4QkFBOEI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUtTLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsR0FBVztRQUN4RCxPQUFPLElBQUkscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFJUyxrQkFBa0IsQ0FBQyxRQUFnQjtRQUMzQyxPQUFPLElBQUksV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUlTLG9CQUFvQixDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3hELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUss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QyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBclNGLFVBQVU7OztZQTNCRixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uRGV0YWlscyxcbiAgQ29nbml0b1VzZXIsXG4gIENvZ25pdG9Vc2VyQXR0cmlidXRlLFxuICBDb2duaXRvVXNlclBvb2wsXG4gIENvZ25pdG9SZWZyZXNoVG9rZW4sXG4gIENvZ25pdG9Vc2VyU2Vzc2lvbixcbiAgSVNpZ25VcFJlc3VsdFxufSBmcm9tICdhbWF6b24tY29nbml0by1pZGVudGl0eS1qcyc7XG5cbi8vIGZyb20gaWRlYS1jb25maWcuanNcbmRlY2xhcmUgY29uc3QgSURFQV9QUk9KRUNUOiBzdHJpbmc7XG5kZWNsYXJlIGNvbnN0IElERUFfQVdTX0NPR05JVE9fVVNFUl9QT09MX0lEOiBzdHJpbmc7XG5kZWNsYXJlIGNvbnN0IElERUFfQVdTX0NPR05JVE9fV0VCX0NMSUVOVF9JRDogc3RyaW5nO1xuZGVjbGFyZSBjb25zdCBJREVBX0FXU19DT0dOSVRPX09OTFlfT05FX1NJTVVMVEFORU9VU19TRVNTSU9OOiBib29sZWFuO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBDb2duaXRvJ3MgdXNlciBhdHRyaWJ1dGUgd2hpY2ggY29udGFpbnMgdGhlIGtleSBvZiB0aGUgbGFzdCBkZXZpY2UgdG8gbG9naW4gaW4gdGhpcyBwcm9qZWN0LlxuICovXG5jb25zdCBERVZJQ0VfS0VZX0FUVFJJQlVURSA9ICdjdXN0b206Jy5jb25jYXQoSURFQV9QUk9KRUNUKTtcblxuLyoqXG4gKiBDb2duaXRvIHdyYXBwZXIgdG8gbWFuYWdlIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93LlxuICpcbiAqIE5vdGU6IGluIElERUEncyBDb2duaXRvIHVzZXJzIHBvb2xzLCB0aGUgZW1haWwgaXMgYW4gYWxpYXMgb2YgdGhlIHVzZXJuYW1lLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSURFQUF1dGhTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHVzZXJQb29sOiBDb2duaXRvVXNlclBvb2w7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICB0aGlzLnVzZXJQb29sID0gbmV3IENvZ25pdG9Vc2VyUG9vbCh7XG4gICAgICBVc2VyUG9vbElkOiBJREVBX0FXU19DT0dOSVRPX1VTRVJfUE9PTF9JRCxcbiAgICAgIENsaWVudElkOiBJREVBX0FXU19DT0dOSVRPX1dFQl9DTElFTlRfSURcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBuZWNlc3Nhcnkgc3RydWN0dXJlIHRvIGdldCBhdXRob3JpemVkIGluIENvZ25pdG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUF1dGhEZXRhaWxzKHVzZXJuYW1lOiBzdHJpbmcsIHB3ZDogc3RyaW5nKTogQXV0aGVudGljYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lOiB1c2VybmFtZSwgUGFzc3dvcmQ6IHB3ZCB9KTtcbiAgfVxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZSB0byBpZGVudGlmeSBhIENvZ25pdG8gdXNlci5cbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWU6IHN0cmluZyk6IENvZ25pdG9Vc2VyIHtcbiAgICByZXR1cm4gbmV3IENvZ25pdG9Vc2VyKHsgVXNlcm5hbWU6IHVzZXJuYW1lLCBQb29sOiB0aGlzLnVzZXJQb29sIH0pO1xuICB9XG4gIC8qKlxuICAgKiBQcmVwYXJlIGEgdXNlciBhdHRyaWJ1dGUgKHRoZXkgYXJlIGFsbCBzdHJpbmdzKSBpbiBDb2duaXRvJ3MgZm9ybWF0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVVc2VyQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IENvZ25pdG9Vc2VyQXR0cmlidXRlIHtcbiAgICByZXR1cm4gbmV3IENvZ25pdG9Vc2VyQXR0cmlidXRlKHsgTmFtZTogbmFtZSwgVmFsdWU6IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBsb2dpbiB0aHJvdWdoIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgICovXG4gIHB1YmxpYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGdldCBhIGNvZ25pdG8gdXNlciBhbmQgdHJ5IHRvIGF1dGhlbnRpY2F0ZVxuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLmF1dGhlbnRpY2F0ZVVzZXIodGhpcy5wcmVwYXJlQXV0aERldGFpbHModXNlcm5hbWUsIHBhc3N3b3JkKSwge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHJlc29sdmUoZmFsc2UpLFxuICAgICAgICBvbkZhaWx1cmU6IChlcnI6IEVycm9yKSA9PiByZWplY3QoZXJyKSxcbiAgICAgICAgbmV3UGFzc3dvcmRSZXF1aXJlZDogKCkgPT4gcmVzb2x2ZSh0cnVlKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgY29tcGxldGUgbmV3IHBhc3N3b3JkIGZsb3cgaW4gdGhlIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbmZpcm1OZXdQYXNzd29yZCh1c2VybmFtZTogc3RyaW5nLCB0ZW1wUGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2dpbiB3aXRoIHRoZSBvbGQgcGFzc3dvcmRcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByZXBhcmVDb2duaXRvVXNlcih1c2VybmFtZSk7XG4gICAgICB1c2VyLmF1dGhlbnRpY2F0ZVVzZXIodGhpcy5wcmVwYXJlQXV0aERldGFpbHModXNlcm5hbWUsIHRlbXBQYXNzd29yZCksIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgIG9uRmFpbHVyZTogKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpLFxuICAgICAgICBuZXdQYXNzd29yZFJlcXVpcmVkOiAoKSA9PlxuICAgICAgICAgIC8vIGNvbXBsZXRlIHRoZSBuZXcgcGFzc3dvcmQgY2hhbGxlbmdlXG4gICAgICAgICAgdXNlci5jb21wbGV0ZU5ld1Bhc3N3b3JkQ2hhbGxlbmdlKFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgIG9uRmFpbHVyZTogKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbmV3IHVzZXIgYSBzZXQgaXRzIGRlZmF1bHQgYXR0cmlidXRlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhdHRyaWJ1dGVzPzogYW55KTogUHJvbWlzZTxDb2duaXRvVXNlcj4ge1xuICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhZGQgYXR0cmlidXRlcyBsaWtlIHRoZSBlbWFpbCBhZGRyZXNzIGFuZCB0aGUgZnVsbG5hbWVcbiAgICAgIGNvbnN0IGF0dHJzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gYXR0cmlidXRlcylcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXNbcHJvcF0pIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKSk7XG4gICAgICAvLyBhZGQgdGhlIGVtYWlsLCB3aGljaCBpcyBlcXVhbCB0byB0aGUgdXNlcm5hbWUgZm9yIG1vc3Qgb2Ygb3VyIFBvb2xzXG4gICAgICBpZiAoIWF0dHJpYnV0ZXMuZW1haWwpIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZSgnZW1haWwnLCB1c2VybmFtZSkpO1xuICAgICAgLy8gcmVnaXN0ZXIgdGhlIG5ldyB1c2VyIHRvIHRoZSBwb29sXG4gICAgICB0aGlzLnVzZXJQb29sLnNpZ25VcCh1c2VybmFtZSwgcGFzc3dvcmQsIGF0dHJzLCBudWxsLCAoZXJyOiBFcnJvciwgcmVzOiBJU2lnblVwUmVzdWx0KSA9PlxuICAgICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzLnVzZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDb25maXJtIGEgbmV3IHJlZ2lzdHJhdGlvbiB0aHJvdWdoIHRoZSBjb25maXJtYXRpb24gY29kZSBzZW50IGJ5IENvZ25pdG8uXG4gICAqL1xuICBwdWJsaWMgY29uZmlybVJlZ2lzdHJhdGlvbih1c2VybmFtZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLmNvbmZpcm1SZWdpc3RyYXRpb24oY29kZSwgdHJ1ZSwgKGVycjogRXJyb3IpID0+XG4gICAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kIGFnYWluIGEgY29uZmlybWF0aW9uIGNvZGUgZm9yIGEgbmV3IHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZXNlbmRDb25maXJtYXRpb25Db2RlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLnJlc2VuZENvbmZpcm1hdGlvbkNvZGUoKGVycjogRXJyb3IpID0+IChlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKSkpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBMb2dvdXQgdGhlIGN1cnJlbnRseSBzaWduZWQtaW4gdXNlci5cbiAgICovXG4gIHB1YmxpYyBsb2dvdXQob3B0aW9ucz86IHsgZ2xvYmFsOiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGdsb2JhbDogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBwcmV2aW9zbHkgc2F2ZWRcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ0F1dGhSZWZyZXNoVG9rZW4nKS50aGVuKCgpID0+XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb3B0aW9uYWwgYXV0aCBkZXRhaWxzXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ0F1dGhVc2VyRGV0YWlscycpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGdldCB0aGUgdXNlciBhbmQgdGhlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyUG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgIHVzZXIuZ2V0U2Vzc2lvbihhc3luYyAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNlc3Npb24gaXMgYWN0aXZlLCBydW4gdGhlIG9ubGluZSBzaWduLW91dDsgb3RoZXJ3aXNlLCBvbmx5IHRoZSBsb2NhbCBkYXRhIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAvLyBpZiBhIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHdhcyBzYXZlZCwgZm9yZ2V0IGl0XG4gICAgICAgICAgICBpZiAoSURFQV9BV1NfQ09HTklUT19PTkxZX09ORV9TSU1VTFRBTkVPVVNfU0VTU0lPTikgYXdhaXQgdGhpcy5zZXRDdXJyZW50RGV2aWNlRm9yUHJvamVjdChudWxsKTtcbiAgICAgICAgICAgIC8vIHNpZ24tb3V0IGZyb20gdGhlIHBvb2wgKHRlcm1pbmF0ZSB0aGUgY3VycmVudCBzZXNzaW9uIG9yIGFsbCB0aGUgc2Vzc2lvbnMpXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5nbG9iYWwpIHVzZXIuZ2xvYmFsU2lnbk91dCh7IG9uU3VjY2VzczogKCkgPT4gcmVzb2x2ZSgpLCBvbkZhaWx1cmU6IGVyciA9PiByZWplY3QoZXJyKSB9KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB1c2VyLnNpZ25PdXQoKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogU2VuZCBhIHBhc3N3b3JkIHJlc2V0IHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgZm9yZ290UGFzc3dvcmQodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnByZXBhcmVDb2duaXRvVXNlcih1c2VybmFtZSkuZm9yZ290UGFzc3dvcmQoe1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyOiBFcnJvcikgPT4gcmVqZWN0KGVycilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDb25maXJtIGEgbmV3IHBhc3N3b3JkIGFmdGVyIGEgcGFzc3dvcmQgcmVzZXQgcmVxdWVzdC5cbiAgICovXG4gIHB1YmxpYyBjb25maXJtUGFzc3dvcmQodXNlcm5hbWU6IHN0cmluZywgY29kZTogc3RyaW5nLCBuZXdQd2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBnZXQgdGhlIHVzZXIgYW5kIGNvbmZpcm0gYSBuZXcgcGFzc3dvcmRcbiAgICAgIHRoaXMucHJlcGFyZUNvZ25pdG9Vc2VyKHVzZXJuYW1lKS5jb25maXJtUGFzc3dvcmQoY29kZSwgbmV3UHdkLCB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICBvbkZhaWx1cmU6IChlcnI6IEVycm9yKSA9PiByZWplY3QoZXJyKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdXNlciBpcyBjdXJyZW50bHkgYXV0aGVudGljYXRlZC5cbiAgICogQHBhcmFtIG9mZmxpbmVBbGxvd2VkIGlmIHNldCBhbmQgaWYgb2ZmbGluZSwgc2tpcCBhdXRoZW50aWNhdGlvbiBhbmQgcmV0cmlldmUgZGF0YSBsb2NhbGx5XG4gICAqIEBwYXJhbSBnZXRGcmVzaElkVG9rZW5PbkV4cCBjYiBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGlkVG9rZW4gaXMgcmVmcmVzaGVkXG4gICAqL1xuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkKG9mZmxpbmVBbGxvd2VkOiBib29sZWFuLCBnZXRGcmVzaElkVG9rZW5PbkV4cD86IChmcmVzaElkVG9rZW46IHN0cmluZykgPT4gdm9pZCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChvZmZsaW5lQWxsb3dlZCAmJiAhbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KCdBdXRoVXNlckRldGFpbHMnKS50aGVuKHVzZXJEZXRhaWxzID0+IHJlc29sdmUoeyBpZFRva2VuOiBudWxsLCB1c2VyRGV0YWlscyB9KSk7XG4gICAgICAgIC8vIHJlLWV4ZWN1dGUgdGhlIG1ldGhvZCB3aGVuIGJhY2sgb25saW5lLCBzbyB0aGF0IHlvdSBjYW4gcmV0cmlldmUgYSB0b2tlbiB0byBtYWtlIHJlcXVlc3RzXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PlxuICAgICAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkKHRydWUsIGdldEZyZXNoSWRUb2tlbk9uRXhwKVxuICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXcgdG9rZW4gYXMgaWYgaXQgd2FzIHJlZnJlc2hlZFxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IGdldEZyZXNoSWRUb2tlbk9uRXhwKHJlc3VsdC5pZFRva2VuKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXJQb29sLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICghdXNlcikgcmV0dXJuIHJlamVjdCgpO1xuICAgICAgICB1c2VyLmdldFNlc3Npb24oKGVycjogRXJyb3IsIHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAvLyBnZXQgdXNlciBhdHRyaWJ1dGVzXG4gICAgICAgICAgdXNlci5nZXRVc2VyQXR0cmlidXRlcygoZTogRXJyb3IsIGF0dHJpYnV0ZXM6IENvZ25pdG9Vc2VyQXR0cmlidXRlW10pID0+IHtcbiAgICAgICAgICAgIGlmIChlKSByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICAgICAgLy8gcmVtYXAgdXNlciBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBjb25zdCB1c2VyRGV0YWlsczogYW55ID0ge307XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goKGE6IENvZ25pdG9Vc2VyQXR0cmlidXRlKSA9PiAodXNlckRldGFpbHNbYS5nZXROYW1lKCldID0gYS5nZXRWYWx1ZSgpKSk7XG4gICAgICAgICAgICAvLyBhZGQgdGhlIHVzZXIncyBncm91cHMgdG8gdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gc2Vzc2lvbi5nZXRBY2Nlc3NUb2tlbigpLmRlY29kZVBheWxvYWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3Vwczogc3RyaW5nW10gPSBzZXNzaW9uSW5mb1snY29nbml0bzpncm91cHMnXSB8fCBbXTtcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzWydncm91cHMnXSA9IGdyb3VwcztcbiAgICAgICAgICAgIC8vIHJ1biBzb21lIGNoZWNrcyBjb25zaWRlcmluZyB0aGUgdXNlcidzIGdyb3VwcyBhbmQgZGV2aWNlcyAoYmFzZWQgb24gdGhlIHByb2plY3QncyBjb25maWd1cmF0aW9uKVxuICAgICAgICAgICAgdGhpcy5ydW5Qb3N0QXV0aENoZWNrcyh1c2VyRGV0YWlscywgZXJyID0+IHtcbiAgICAgICAgICAgICAgLy8gaW4gY2FzZSBzb21lIGNoZWNrIGZhaWxlZCwgcmVqZWN0IHRoZSBhdXRob3Jpc2F0aW9uIGZsb3dcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAvLyAoYXN5bmMpIHNhdmUgdGhlIHJlZnJlc2ggdG9rZW4gc28gaXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IG90aGVyIHByb2NlZHVyZXNcbiAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgnQXV0aFJlZnJlc2hUb2tlbicsIHNlc3Npb24uZ2V0UmVmcmVzaFRva2VuKCkuZ2V0VG9rZW4oKSk7XG4gICAgICAgICAgICAgIC8vIHNldCBhIHRpbWVyIHRvIG1hbmFnZSB0aGUgYXV0b3JlZnJlc2ggb2YgdGhlIGlkVG9rZW4gKHRocm91Z2ggdGhlIHJlZnJlc2hUb2tlbilcbiAgICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnJlZnJlc2hTZXNzaW9uKHVzZXIsIHNlc3Npb24uZ2V0UmVmcmVzaFRva2VuKCkuZ2V0VG9rZW4oKSwgZ2V0RnJlc2hJZFRva2VuT25FeHApLFxuICAgICAgICAgICAgICAgIDE1ICogNjAgKiAxMDAwXG4gICAgICAgICAgICAgICk7IC8vIGV2ZXJ5IDE1IG1pbnV0ZXNcbiAgICAgICAgICAgICAgLy8gKGFzeW5jKSBpZiBvZmZsaW5lQWxsb3dlZCwgc2F2ZSBkYXRhIGxvY2FsbHksIHRvIHVzZSBpdCBuZXh0IHRpbWUgd2UnbGwgYmUgb2ZmbGluZVxuICAgICAgICAgICAgICBpZiAob2ZmbGluZUFsbG93ZWQpIHRoaXMuc3RvcmFnZS5zZXQoJ0F1dGhVc2VyRGV0YWlscycsIHVzZXJEZXRhaWxzKTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBpZFRva2VuICh0byB1c2Ugd2l0aCBBUEkpXG4gICAgICAgICAgICAgIHJlc29sdmUoeyBpZFRva2VuOiBzZXNzaW9uLmdldElkVG9rZW4oKS5nZXRKd3RUb2tlbigpLCB1c2VyRGV0YWlscyB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIHRvIHJlZnJlc2ggdGhlIHNlc3Npb24gZXZlcnkgTiBtaW51dGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZnJlc2hTZXNzaW9uKHVzZXI6IENvZ25pdG9Vc2VyLCByZWZyZXNoVG9rZW46IHN0cmluZywgY2FsbGJhY2s6IChmcmVzaElkVG9rZW46IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHVzZXIucmVmcmVzaFNlc3Npb24oXG4gICAgICBuZXcgQ29nbml0b1JlZnJlc2hUb2tlbih7IFJlZnJlc2hUb2tlbjogcmVmcmVzaFRva2VuIH0pLFxuICAgICAgKGVycjogRXJyb3IsIHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgLy8gdHJ5IGFnYWluIGluIDEgbWludXRlXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hTZXNzaW9uKHVzZXIsIHJlZnJlc2hUb2tlbiwgY2FsbGJhY2spLCAxICogNjAgKiAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAoYXN5bmMpIHNhdmUgdGhlIHJlZnJlc2ggdG9rZW4gc28gaXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IG90aGVyIHByb2NlZHVyZXNcbiAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdBdXRoUmVmcmVzaFRva2VuJywgc2Vzc2lvbi5nZXRSZWZyZXNoVG9rZW4oKS5nZXRUb2tlbigpKTtcbiAgICAgICAgICAvLyByZXBlYXQgZXZlcnkgMTUgbWludXRlc1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoU2Vzc2lvbih1c2VyLCBzZXNzaW9uLmdldFJlZnJlc2hUb2tlbigpLmdldFRva2VuKCksIGNhbGxiYWNrKSwgMTUgKiA2MCAqIDEwMDApO1xuICAgICAgICAgIC8vIHJ1biB0aGUgY2FsbGJhY2sgYWN0aW9uLCBpZiBzZXRcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKHNlc3Npb24uZ2V0SWRUb2tlbigpLmdldEp3dFRva2VuKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUnVuIHNvbWUgcG9zdC1hdXRoIGNoZWNrcywgYmFzZWQgb24gdGhlIHVzZXJzIGdyb3VwcyBhbmQgb24gdGhlIGFwcCdzIGNvbmZpZ3VyYXRpb246XG4gICAqICAtIHVzZXJzIGluIHRoZSBDb2duaXRvJ3MgXCJhZG1pbnNcIiBncnVwIHNraXAgYWxsIHRoZSBmb2xsb3dpbmcgcnVsZXMuXG4gICAqICAtIHVzZXJzIGluIHRoZSBDb2duaXRvJ3MgXCJyb2JvdHNcIiBncm91cCBjYW4ndCBzaWduLWludG8gZnJvbnQtZW5kcyAodGhleSBzZXJ2ZSBvbmx5IGJhY2stZW5kIHB1cnBvc2VzKS5cbiAgICogIC0gaWYgYElERUFfQVdTX0NPR05JVE9fT05MWV9PTkVfU0lNVUxUQU5FT1VTX1NFU1NJT05gIGlzIG9uLCBtYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgYWN0aXZlIHNlc3Npb24gcGVyIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcnVuUG9zdEF1dGhDaGVja3ModXNlckRldGFpbHM6IGFueSwgY2FsbGJhY2s6IChlcnI/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IGdyb3Vwczogc3RyaW5nW10gPSB1c2VyRGV0YWlsc1snZ3JvdXBzJ107XG4gICAgLy8gc2tpcCBjaGVja3MgaWYgdGhlIHVzZXIgaXMgaW4gdGhlIFwiYWRtaW5zXCIgZ3JvdXBcbiAgICBjb25zdCBpc0FkbWluID0gZ3JvdXBzLnNvbWUoeCA9PiB4ID09PSAnYWRtaW5zJyk7XG4gICAgaWYgKGlzQWRtaW4pIHJldHVybiBjYWxsYmFjaygpO1xuICAgIC8vIHVzZXJzIGluIHRoZSBcInJvYm90c1wiIGdyb3VwIGNhbid0IHNpZ24taW50byBmcm9udC1lbmRzICh0aGV5IHNlcnZlIG9ubHkgYmFjay1lbmQgcHVycG9zZXMpXG4gICAgY29uc3QgaXNSb2JvdCA9IGdyb3Vwcy5zb21lKHggPT4geCA9PT0gJ3JvYm90cycpO1xuICAgIGlmIChpc1JvYm90KSByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdST0JPVF9VU0VSJykpO1xuICAgIC8vIGluIGNhc2UgdGhlIHByb2plY3QgbGltaXRzIGVhY2ggYWNjb3VudCB0byBvbmx5IG9uZSBzaW11bHRhbmVvdXMgc2Vzc2lvbiwgcnVuIGEgY2hlY2tcbiAgICBpZiAoSURFQV9BV1NfQ09HTklUT19PTkxZX09ORV9TSU1VTFRBTkVPVVNfU0VTU0lPTikgcmV0dXJuIHRoaXMuY2hlY2tGb3JTaW11bHRhbmVvdXNTZXNzaW9ucyh1c2VyRGV0YWlscywgY2FsbGJhY2spO1xuICAgIC8vIG90aGVyd2lzZSwgd2UncmUgZG9uZVxuICAgIGNhbGxiYWNrKCk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgc2lnbmVkLWludG8gbXVsdGlwbGUgZGV2aWNlcy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja0ZvclNpbXVsdGFuZW91c1Nlc3Npb25zKHVzZXJEZXRhaWxzOiBhbnksIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICAvLyBnZXQgb3IgY3JlYXRlIGEga2V5IGZvciB0aGUgY3VycmVudCBkZXZpY2UgKH5yYW5kb20pXG4gICAgbGV0IGN1cnJlbnREZXZpY2VLZXkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KCdBdXRoRGV2aWNlS2V5Jyk7XG4gICAgaWYgKCFjdXJyZW50RGV2aWNlS2V5KSB7XG4gICAgICBjb25zdCByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTApO1xuICAgICAgY3VycmVudERldmljZUtleSA9IHJhbmRvbUtleS5jb25jYXQoU3RyaW5nKERhdGUubm93KCkpKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoJ0F1dGhEZXZpY2VLZXknLCBjdXJyZW50RGV2aWNlS2V5KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGUgbGFzdCBkZXZpY2UgdG8gc2lnbi1pbnRvIHRoaXMgcHJvamVjdCAoaWYgYW55KSBpcyB0aGUgY3VycmVudCBvbmVcbiAgICBjb25zdCBsYXN0RGV2aWNlVG9TaWduSW50b1RoaXNQcm9qZWN0ID0gdXNlckRldGFpbHNbREVWSUNFX0tFWV9BVFRSSUJVVEVdO1xuICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0IHVzZXIncyBkZXZpY2UgdG8gc2lnbi1pbiwgc2F2ZSB0aGUgcmVmZXJlbmNlIGluIENvZ25pdG8gYW5kIHJlc29sdmVcbiAgICBpZiAoIWxhc3REZXZpY2VUb1NpZ25JbnRvVGhpc1Byb2plY3QpIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudERldmljZUZvclByb2plY3QoY3VycmVudERldmljZUtleSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FsbGJhY2soKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignQ0FOVF9TRVRfREVWSUNFJykpKTtcbiAgICAgIC8vIGlmIHRoZSBkZXZpY2UgZGlkbid0IGNoYW5nZSwgcmVzb2x2ZVxuICAgIH0gZWxzZSBpZiAobGFzdERldmljZVRvU2lnbkludG9UaGlzUHJvamVjdCA9PT0gY3VycmVudERldmljZUtleSkgY2FsbGJhY2soKTtcbiAgICAvLyBvdGh3ZXJ3aXNlLCByZXBvcnQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzaW11bHRhbmVvdXMgc2Vzc2lvblxuICAgIGVsc2UgY2FsbGJhY2sobmV3IEVycm9yKCdTSU1VTFRBTkVPVVNfU0VTU0lPTicpKTtcbiAgfVxuICAvKipcbiAgICogU2V0IChvciByZXNldCkgdGhlIGN1cnJlbnQgdXNlcidzIGRldmljZSAoYnkga2V5KSBpbiB0aGUgY3VycmVudCBwcm9qZWN0IChzdG9yZWQgaW4gQ29nbml0bykuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0Q3VycmVudERldmljZUZvclByb2plY3QoZGV2aWNlS2V5Pzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXR0cmlidXRlczogYW55ID0ge307XG4gICAgLy8gbm90ZTogYW4gZW1wdHkgc3RyaW5nIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSBDb2duaXRvXG4gICAgYXR0cmlidXRlc1tERVZJQ0VfS0VZX0FUVFJJQlVURV0gPSBkZXZpY2VLZXkgfHwgJyc7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVXNlckF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyJ3MgYXR0cmlidXRlcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVVc2VyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gcHJlcGFyZSB0aGUgYXR0cmlidXRlcyB3ZSB3YW50IHRvIGNoYW5nZVxuICAgICAgY29uc3QgYXR0cnMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIGF0dHJpYnV0ZXMpXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW3Byb3BdICE9PSB1bmRlZmluZWQpIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKSk7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyUG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgaWYgKCF1c2VyKSByZXR1cm4gcmVqZWN0KCk7XG4gICAgICAvLyB3ZSBuZWVkIHRvIGdldCB0aGUgc2Vzc2lvbiBiZWZvcmUgdG8gbWFrZSBjaGFuZ2VzXG4gICAgICB1c2VyLmdldFNlc3Npb24oKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICAgIGVsc2UgdXNlci51cGRhdGVBdHRyaWJ1dGVzKGF0dHJzLCAoZTogRXJyb3IpID0+IChlID8gcmVqZWN0KGUpIDogcmVzb2x2ZSgpKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsbUJBQW1CLEVBR3BCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLMUMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFRaEUsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFBc0IsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ3RDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUtTLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsR0FBVztRQUN4RCxPQUFPLElBQUkscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFJUyxrQkFBa0IsQ0FBQyxRQUFnQjtRQUMzQyxPQUFPLElBQUksV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFB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QUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBclNGLFVBQVU7OztZQXZCRixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uRGV0YWlscyxcbiAgQ29nbml0b1VzZXIsXG4gIENvZ25pdG9Vc2VyQXR0cmlidXRlLFxuICBDb2duaXRvVXNlclBvb2wsXG4gIENvZ25pdG9SZWZyZXNoVG9rZW4sXG4gIENvZ25pdG9Vc2VyU2Vzc2lvbixcbiAgSVNpZ25VcFJlc3VsdFxufSBmcm9tICdhbWF6b24tY29nbml0by1pZGVudGl0eS1qcyc7XG5cbmltcG9ydCB7IGVudmlyb25tZW50IGFzIGVudiB9IGZyb20gJ0BlbnYnO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBDb2duaXRvJ3MgdXNlciBhdHRyaWJ1dGUgd2hpY2ggY29udGFpbnMgdGhlIGtleSBvZiB0aGUgbGFzdCBkZXZpY2UgdG8gbG9naW4gaW4gdGhpcyBwcm9qZWN0LlxuICovXG5jb25zdCBERVZJQ0VfS0VZX0FUVFJJQlVURSA9ICdjdXN0b206Jy5jb25jYXQoZW52LmlkZWEucHJvamVjdCk7XG5cbi8qKlxuICogQ29nbml0byB3cmFwcGVyIHRvIG1hbmFnZSB0aGUgYXV0aGVudGljYXRpb24gZmxvdy5cbiAqXG4gKiBOb3RlOiBpbiBJREVBJ3MgQ29nbml0byB1c2VycyBwb29scywgdGhlIGVtYWlsIGlzIGFuIGFsaWFzIG9mIHRoZSB1c2VybmFtZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElERUFBdXRoU2VydmljZSB7XG4gIHByb3RlY3RlZCB1c2VyUG9vbDogQ29nbml0b1VzZXJQb29sO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgdGhpcy51c2VyUG9vbCA9IG5ldyBDb2duaXRvVXNlclBvb2woe1xuICAgICAgVXNlclBvb2xJZDogZW52LmF3cy5jb2duaXRvLnVzZXJQb29sSWQsXG4gICAgICBDbGllbnRJZDogZW52LmF3cy5jb2duaXRvLnVzZXJQb29sQ2xpZW50SWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBuZWNlc3Nhcnkgc3RydWN0dXJlIHRvIGdldCBhdXRob3JpemVkIGluIENvZ25pdG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUF1dGhEZXRhaWxzKHVzZXJuYW1lOiBzdHJpbmcsIHB3ZDogc3RyaW5nKTogQXV0aGVudGljYXRpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lOiB1c2VybmFtZSwgUGFzc3dvcmQ6IHB3ZCB9KTtcbiAgfVxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZSB0byBpZGVudGlmeSBhIENvZ25pdG8gdXNlci5cbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWU6IHN0cmluZyk6IENvZ25pdG9Vc2VyIHtcbiAgICByZXR1cm4gbmV3IENvZ25pdG9Vc2VyKHsgVXNlcm5hbWU6IHVzZXJuYW1lLCBQb29sOiB0aGlzLnVzZXJQb29sIH0pO1xuICB9XG4gIC8qKlxuICAgKiBQcmVwYXJlIGEgdXNlciBhdHRyaWJ1dGUgKHRoZXkgYXJlIGFsbCBzdHJpbmdzKSBpbiBDb2duaXRvJ3MgZm9ybWF0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVVc2VyQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IENvZ25pdG9Vc2VyQXR0cmlidXRlIHtcbiAgICByZXR1cm4gbmV3IENvZ25pdG9Vc2VyQXR0cmlidXRlKHsgTmFtZTogbmFtZSwgVmFsdWU6IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBsb2dpbiB0aHJvdWdoIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgICovXG4gIHB1YmxpYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGdldCBhIGNvZ25pdG8gdXNlciBhbmQgdHJ5IHRvIGF1dGhlbnRpY2F0ZVxuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLmF1dGhlbnRpY2F0ZVVzZXIodGhpcy5wcmVwYXJlQXV0aERldGFpbHModXNlcm5hbWUsIHBhc3N3b3JkKSwge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHJlc29sdmUoZmFsc2UpLFxuICAgICAgICBvbkZhaWx1cmU6IChlcnI6IEVycm9yKSA9PiByZWplY3QoZXJyKSxcbiAgICAgICAgbmV3UGFzc3dvcmRSZXF1aXJlZDogKCkgPT4gcmVzb2x2ZSh0cnVlKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgY29tcGxldGUgbmV3IHBhc3N3b3JkIGZsb3cgaW4gdGhlIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbmZpcm1OZXdQYXNzd29yZCh1c2VybmFtZTogc3RyaW5nLCB0ZW1wUGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2dpbiB3aXRoIHRoZSBvbGQgcGFzc3dvcmRcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByZXBhcmVDb2duaXRvVXNlcih1c2VybmFtZSk7XG4gICAgICB1c2VyLmF1dGhlbnRpY2F0ZVVzZXIodGhpcy5wcmVwYXJlQXV0aERldGFpbHModXNlcm5hbWUsIHRlbXBQYXNzd29yZCksIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgIG9uRmFpbHVyZTogKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpLFxuICAgICAgICBuZXdQYXNzd29yZFJlcXVpcmVkOiAoKSA9PlxuICAgICAgICAgIC8vIGNvbXBsZXRlIHRoZSBuZXcgcGFzc3dvcmQgY2hhbGxlbmdlXG4gICAgICAgICAgdXNlci5jb21wbGV0ZU5ld1Bhc3N3b3JkQ2hhbGxlbmdlKFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgIG9uRmFpbHVyZTogKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbmV3IHVzZXIgYSBzZXQgaXRzIGRlZmF1bHQgYXR0cmlidXRlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhdHRyaWJ1dGVzPzogYW55KTogUHJvbWlzZTxDb2duaXRvVXNlcj4ge1xuICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhZGQgYXR0cmlidXRlcyBsaWtlIHRoZSBlbWFpbCBhZGRyZXNzIGFuZCB0aGUgZnVsbG5hbWVcbiAgICAgIGNvbnN0IGF0dHJzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gYXR0cmlidXRlcylcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXNbcHJvcF0pIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKSk7XG4gICAgICAvLyBhZGQgdGhlIGVtYWlsLCB3aGljaCBpcyBlcXVhbCB0byB0aGUgdXNlcm5hbWUgZm9yIG1vc3Qgb2Ygb3VyIFBvb2xzXG4gICAgICBpZiAoIWF0dHJpYnV0ZXMuZW1haWwpIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZSgnZW1haWwnLCB1c2VybmFtZSkpO1xuICAgICAgLy8gcmVnaXN0ZXIgdGhlIG5ldyB1c2VyIHRvIHRoZSBwb29sXG4gICAgICB0aGlzLnVzZXJQb29sLnNpZ25VcCh1c2VybmFtZSwgcGFzc3dvcmQsIGF0dHJzLCBudWxsLCAoZXJyOiBFcnJvciwgcmVzOiBJU2lnblVwUmVzdWx0KSA9PlxuICAgICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzLnVzZXIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDb25maXJtIGEgbmV3IHJlZ2lzdHJhdGlvbiB0aHJvdWdoIHRoZSBjb25maXJtYXRpb24gY29kZSBzZW50IGJ5IENvZ25pdG8uXG4gICAqL1xuICBwdWJsaWMgY29uZmlybVJlZ2lzdHJhdGlvbih1c2VybmFtZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLmNvbmZpcm1SZWdpc3RyYXRpb24oY29kZSwgdHJ1ZSwgKGVycjogRXJyb3IpID0+XG4gICAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kIGFnYWluIGEgY29uZmlybWF0aW9uIGNvZGUgZm9yIGEgbmV3IHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZXNlbmRDb25maXJtYXRpb25Db2RlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLnJlc2VuZENvbmZpcm1hdGlvbkNvZGUoKGVycjogRXJyb3IpID0+IChlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKSkpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBMb2dvdXQgdGhlIGN1cnJlbnRseSBzaWduZWQtaW4gdXNlci5cbiAgICovXG4gIHB1YmxpYyBsb2dvdXQob3B0aW9ucz86IHsgZ2xvYmFsOiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGdsb2JhbDogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBwcmV2aW9zbHkgc2F2ZWRcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ0F1dGhSZWZyZXNoVG9rZW4nKS50aGVuKCgpID0+XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb3B0aW9uYWwgYXV0aCBkZXRhaWxzXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ0F1dGhVc2VyRGV0YWlscycpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGdldCB0aGUgdXNlciBhbmQgdGhlIHNlc3Npb25cbiAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyUG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgIHVzZXIuZ2V0U2Vzc2lvbihhc3luYyAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNlc3Npb24gaXMgYWN0aXZlLCBydW4gdGhlIG9ubGluZSBzaWduLW91dDsgb3RoZXJ3aXNlLCBvbmx5IHRoZSBsb2NhbCBkYXRhIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAvLyBpZiBhIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHdhcyBzYXZlZCwgZm9yZ2V0IGl0XG4gICAgICAgICAgICBpZiAoZW52LmlkZWEuYXV0aC5zaW5nbGVTaW11bHRhbmVvdXNTZXNzaW9uKSBhd2FpdCB0aGlzLnNldEN1cnJlbnREZXZpY2VGb3JQcm9qZWN0KG51bGwpO1xuICAgICAgICAgICAgLy8gc2lnbi1vdXQgZnJvbSB0aGUgcG9vbCAodGVybWluYXRlIHRoZSBjdXJyZW50IHNlc3Npb24gb3IgYWxsIHRoZSBzZXNzaW9ucylcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmdsb2JhbCkgdXNlci5nbG9iYWxTaWduT3V0KHsgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksIG9uRmFpbHVyZTogZXJyID0+IHJlamVjdChlcnIpIH0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHVzZXIuc2lnbk91dCgpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kIGEgcGFzc3dvcmQgcmVzZXQgcmVxdWVzdC5cbiAgICovXG4gIHB1YmxpYyBmb3Jnb3RQYXNzd29yZCh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucHJlcGFyZUNvZ25pdG9Vc2VyKHVzZXJuYW1lKS5mb3Jnb3RQYXNzd29yZCh7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICBvbkZhaWx1cmU6IChlcnI6IEVycm9yKSA9PiByZWplY3QoZXJyKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbmZpcm0gYSBuZXcgcGFzc3dvcmQgYWZ0ZXIgYSBwYXNzd29yZCByZXNldCByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIGNvbmZpcm1QYXNzd29yZCh1c2VybmFtZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIG5ld1B3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGdldCB0aGUgdXNlciBhbmQgY29uZmlybSBhIG5ldyBwYXNzd29yZFxuICAgICAgdGhpcy5wcmVwYXJlQ29nbml0b1VzZXIodXNlcm5hbWUpLmNvbmZpcm1QYXNzd29yZChjb2RlLCBuZXdQd2QsIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgIG9uRmFpbHVyZTogKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB1c2VyIGlzIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkLlxuICAgKiBAcGFyYW0gb2ZmbGluZUFsbG93ZWQgaWYgc2V0IGFuZCBpZiBvZmZsaW5lLCBza2lwIGF1dGhlbnRpY2F0aW9uIGFuZCByZXRyaWV2ZSBkYXRhIGxvY2FsbHlcbiAgICogQHBhcmFtIGdldEZyZXNoSWRUb2tlbk9uRXhwIGNiIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgaWRUb2tlbiBpcyByZWZyZXNoZWRcbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQob2ZmbGluZUFsbG93ZWQ6IGJvb2xlYW4sIGdldEZyZXNoSWRUb2tlbk9uRXhwPzogKGZyZXNoSWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKG9mZmxpbmVBbGxvd2VkICYmICFuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXQoJ0F1dGhVc2VyRGV0YWlscycpLnRoZW4odXNlckRldGFpbHMgPT4gcmVzb2x2ZSh7IGlkVG9rZW46IG51bGwsIHVzZXJEZXRhaWxzIH0pKTtcbiAgICAgICAgLy8gcmUtZXhlY3V0ZSB0aGUgbWV0aG9kIHdoZW4gYmFjayBvbmxpbmUsIHNvIHRoYXQgeW91IGNhbiByZXRyaWV2ZSBhIHRva2VuIHRvIG1ha2UgcmVxdWVzdHNcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICgpID0+XG4gICAgICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQodHJ1ZSwgZ2V0RnJlc2hJZFRva2VuT25FeHApXG4gICAgICAgICAgICAvLyBzZXQgdGhlIG5ldyB0b2tlbiBhcyBpZiBpdCB3YXMgcmVmcmVzaGVkXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gZ2V0RnJlc2hJZFRva2VuT25FeHAocmVzdWx0LmlkVG9rZW4pKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlclBvb2wuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgaWYgKCF1c2VyKSByZXR1cm4gcmVqZWN0KCk7XG4gICAgICAgIHVzZXIuZ2V0U2Vzc2lvbigoZXJyOiBFcnJvciwgc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIC8vIGdldCB1c2VyIGF0dHJpYnV0ZXNcbiAgICAgICAgICB1c2VyLmdldFVzZXJBdHRyaWJ1dGVzKChlOiBFcnJvciwgYXR0cmlidXRlczogQ29nbml0b1VzZXJBdHRyaWJ1dGVbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUpIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgICAgICAvLyByZW1hcCB1c2VyIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuZm9yRWFjaCgoYTogQ29nbml0b1VzZXJBdHRyaWJ1dGUpID0+ICh1c2VyRGV0YWlsc1thLmdldE5hbWUoKV0gPSBhLmdldFZhbHVlKCkpKTtcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgdXNlcidzIGdyb3VwcyB0byB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbkluZm8gPSBzZXNzaW9uLmdldEFjY2Vzc1Rva2VuKCkuZGVjb2RlUGF5bG9hZCgpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzOiBzdHJpbmdbXSA9IHNlc3Npb25JbmZvWydjb2duaXRvOmdyb3VwcyddIHx8IFtdO1xuICAgICAgICAgICAgdXNlckRldGFpbHNbJ2dyb3VwcyddID0gZ3JvdXBzO1xuICAgICAgICAgICAgLy8gcnVuIHNvbWUgY2hlY2tzIGNvbnNpZGVyaW5nIHRoZSB1c2VyJ3MgZ3JvdXBzIGFuZCBkZXZpY2VzIChiYXNlZCBvbiB0aGUgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgICB0aGlzLnJ1blBvc3RBdXRoQ2hlY2tzKHVzZXJEZXRhaWxzLCBlcnIgPT4ge1xuICAgICAgICAgICAgICAvLyBpbiBjYXNlIHNvbWUgY2hlY2sgZmFpbGVkLCByZWplY3QgdGhlIGF1dGhvcmlzYXRpb24gZmxvd1xuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgIC8vIChhc3luYykgc2F2ZSB0aGUgcmVmcmVzaCB0b2tlbiBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgb3RoZXIgcHJvY2VkdXJlc1xuICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdBdXRoUmVmcmVzaFRva2VuJywgc2Vzc2lvbi5nZXRSZWZyZXNoVG9rZW4oKS5nZXRUb2tlbigpKTtcbiAgICAgICAgICAgICAgLy8gc2V0IGEgdGltZXIgdG8gbWFuYWdlIHRoZSBhdXRvcmVmcmVzaCBvZiB0aGUgaWRUb2tlbiAodGhyb3VnaCB0aGUgcmVmcmVzaFRva2VuKVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMucmVmcmVzaFNlc3Npb24odXNlciwgc2Vzc2lvbi5nZXRSZWZyZXNoVG9rZW4oKS5nZXRUb2tlbigpLCBnZXRGcmVzaElkVG9rZW5PbkV4cCksXG4gICAgICAgICAgICAgICAgMTUgKiA2MCAqIDEwMDBcbiAgICAgICAgICAgICAgKTsgLy8gZXZlcnkgMTUgbWludXRlc1xuICAgICAgICAgICAgICAvLyAoYXN5bmMpIGlmIG9mZmxpbmVBbGxvd2VkLCBzYXZlIGRhdGEgbG9jYWxseSwgdG8gdXNlIGl0IG5leHQgdGltZSB3ZSdsbCBiZSBvZmZsaW5lXG4gICAgICAgICAgICAgIGlmIChvZmZsaW5lQWxsb3dlZCkgdGhpcy5zdG9yYWdlLnNldCgnQXV0aFVzZXJEZXRhaWxzJywgdXNlckRldGFpbHMpO1xuICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIGlkVG9rZW4gKHRvIHVzZSB3aXRoIEFQSSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IGlkVG9rZW46IHNlc3Npb24uZ2V0SWRUb2tlbigpLmdldEp3dFRva2VuKCksIHVzZXJEZXRhaWxzIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcmVmcmVzaCB0aGUgc2Vzc2lvbiBldmVyeSBOIG1pbnV0ZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVmcmVzaFNlc3Npb24odXNlcjogQ29nbml0b1VzZXIsIHJlZnJlc2hUb2tlbjogc3RyaW5nLCBjYWxsYmFjazogKGZyZXNoSWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdXNlci5yZWZyZXNoU2Vzc2lvbihcbiAgICAgIG5ldyBDb2duaXRvUmVmcmVzaFRva2VuKHsgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW4gfSksXG4gICAgICAoZXJyOiBFcnJvciwgc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyB0cnkgYWdhaW4gaW4gMSBtaW51dGVcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaFNlc3Npb24odXNlciwgcmVmcmVzaFRva2VuLCBjYWxsYmFjayksIDEgKiA2MCAqIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIChhc3luYykgc2F2ZSB0aGUgcmVmcmVzaCB0b2tlbiBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgb3RoZXIgcHJvY2VkdXJlc1xuICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ0F1dGhSZWZyZXNoVG9rZW4nLCBzZXNzaW9uLmdldFJlZnJlc2hUb2tlbigpLmdldFRva2VuKCkpO1xuICAgICAgICAgIC8vIHJlcGVhdCBldmVyeSAxNSBtaW51dGVzXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hTZXNzaW9uKHVzZXIsIHNlc3Npb24uZ2V0UmVmcmVzaFRva2VuKCkuZ2V0VG9rZW4oKSwgY2FsbGJhY2spLCAxNSAqIDYwICogMTAwMCk7XG4gICAgICAgICAgLy8gcnVuIHRoZSBjYWxsYmFjayBhY3Rpb24sIGlmIHNldFxuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soc2Vzc2lvbi5nZXRJZFRva2VuKCkuZ2V0Snd0VG9rZW4oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSdW4gc29tZSBwb3N0LWF1dGggY2hlY2tzLCBiYXNlZCBvbiB0aGUgdXNlcnMgZ3JvdXBzIGFuZCBvbiB0aGUgYXBwJ3MgY29uZmlndXJhdGlvbjpcbiAgICogIC0gdXNlcnMgaW4gdGhlIENvZ25pdG8ncyBcImFkbWluc1wiIGdydXAgc2tpcCBhbGwgdGhlIGZvbGxvd2luZyBydWxlcy5cbiAgICogIC0gdXNlcnMgaW4gdGhlIENvZ25pdG8ncyBcInJvYm90c1wiIGdyb3VwIGNhbid0IHNpZ24taW50byBmcm9udC1lbmRzICh0aGV5IHNlcnZlIG9ubHkgYmFjay1lbmQgcHVycG9zZXMpLlxuICAgKiAgLSBpZiBgZW52LmlkZWEuYXV0aC5zaW5nbGVTaW11bHRhbmVvdXNTZXNzaW9uYCBpcyBvbiwgbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgb25lIGFjdGl2ZSBzZXNzaW9uIHBlciB1c2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJ1blBvc3RBdXRoQ2hlY2tzKHVzZXJEZXRhaWxzOiBhbnksIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICBjb25zdCBncm91cHM6IHN0cmluZ1tdID0gdXNlckRldGFpbHNbJ2dyb3VwcyddO1xuICAgIC8vIHNraXAgY2hlY2tzIGlmIHRoZSB1c2VyIGlzIGluIHRoZSBcImFkbWluc1wiIGdyb3VwXG4gICAgY29uc3QgaXNBZG1pbiA9IGdyb3Vwcy5zb21lKHggPT4geCA9PT0gJ2FkbWlucycpO1xuICAgIGlmIChpc0FkbWluKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAvLyB1c2VycyBpbiB0aGUgXCJyb2JvdHNcIiBncm91cCBjYW4ndCBzaWduLWludG8gZnJvbnQtZW5kcyAodGhleSBzZXJ2ZSBvbmx5IGJhY2stZW5kIHB1cnBvc2VzKVxuICAgIGNvbnN0IGlzUm9ib3QgPSBncm91cHMuc29tZSh4ID0+IHggPT09ICdyb2JvdHMnKTtcbiAgICBpZiAoaXNSb2JvdCkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignUk9CT1RfVVNFUicpKTtcbiAgICAvLyBpbiBjYXNlIHRoZSBwcm9qZWN0IGxpbWl0cyBlYWNoIGFjY291bnQgdG8gb25seSBvbmUgc2ltdWx0YW5lb3VzIHNlc3Npb24sIHJ1biBhIGNoZWNrXG4gICAgaWYgKGVudi5pZGVhLmF1dGguc2luZ2xlU2ltdWx0YW5lb3VzU2Vzc2lvbikgcmV0dXJuIHRoaXMuY2hlY2tGb3JTaW11bHRhbmVvdXNTZXNzaW9ucyh1c2VyRGV0YWlscywgY2FsbGJhY2spO1xuICAgIC8vIG90aGVyd2lzZSwgd2UncmUgZG9uZVxuICAgIGNhbGxiYWNrKCk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgc2lnbmVkLWludG8gbXVsdGlwbGUgZGV2aWNlcy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja0ZvclNpbXVsdGFuZW91c1Nlc3Npb25zKHVzZXJEZXRhaWxzOiBhbnksIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICAvLyBnZXQgb3IgY3JlYXRlIGEga2V5IGZvciB0aGUgY3VycmVudCBkZXZpY2UgKH5yYW5kb20pXG4gICAgbGV0IGN1cnJlbnREZXZpY2VLZXkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KCdBdXRoRGV2aWNlS2V5Jyk7XG4gICAgaWYgKCFjdXJyZW50RGV2aWNlS2V5KSB7XG4gICAgICBjb25zdCByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTApO1xuICAgICAgY3VycmVudERldmljZUtleSA9IHJhbmRvbUtleS5jb25jYXQoU3RyaW5nKERhdGUubm93KCkpKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoJ0F1dGhEZXZpY2VLZXknLCBjdXJyZW50RGV2aWNlS2V5KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGUgbGFzdCBkZXZpY2UgdG8gc2lnbi1pbnRvIHRoaXMgcHJvamVjdCAoaWYgYW55KSBpcyB0aGUgY3VycmVudCBvbmVcbiAgICBjb25zdCBsYXN0RGV2aWNlVG9TaWduSW50b1RoaXNQcm9qZWN0ID0gdXNlckRldGFpbHNbREVWSUNFX0tFWV9BVFRSSUJVVEVdO1xuICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0IHVzZXIncyBkZXZpY2UgdG8gc2lnbi1pbiwgc2F2ZSB0aGUgcmVmZXJlbmNlIGluIENvZ25pdG8gYW5kIHJlc29sdmVcbiAgICBpZiAoIWxhc3REZXZpY2VUb1NpZ25JbnRvVGhpc1Byb2plY3QpIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudERldmljZUZvclByb2plY3QoY3VycmVudERldmljZUtleSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FsbGJhY2soKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignQ0FOVF9TRVRfREVWSUNFJykpKTtcbiAgICAgIC8vIGlmIHRoZSBkZXZpY2UgZGlkbid0IGNoYW5nZSwgcmVzb2x2ZVxuICAgIH0gZWxzZSBpZiAobGFzdERldmljZVRvU2lnbkludG9UaGlzUHJvamVjdCA9PT0gY3VycmVudERldmljZUtleSkgY2FsbGJhY2soKTtcbiAgICAvLyBvdGh3ZXJ3aXNlLCByZXBvcnQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzaW11bHRhbmVvdXMgc2Vzc2lvblxuICAgIGVsc2UgY2FsbGJhY2sobmV3IEVycm9yKCdTSU1VTFRBTkVPVVNfU0VTU0lPTicpKTtcbiAgfVxuICAvKipcbiAgICogU2V0IChvciByZXNldCkgdGhlIGN1cnJlbnQgdXNlcidzIGRldmljZSAoYnkga2V5KSBpbiB0aGUgY3VycmVudCBwcm9qZWN0IChzdG9yZWQgaW4gQ29nbml0bykuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0Q3VycmVudERldmljZUZvclByb2plY3QoZGV2aWNlS2V5Pzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXR0cmlidXRlczogYW55ID0ge307XG4gICAgLy8gbm90ZTogYW4gZW1wdHkgc3RyaW5nIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSBDb2duaXRvXG4gICAgYXR0cmlidXRlc1tERVZJQ0VfS0VZX0FUVFJJQlVURV0gPSBkZXZpY2VLZXkgfHwgJyc7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVXNlckF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyJ3MgYXR0cmlidXRlcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVVc2VyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gcHJlcGFyZSB0aGUgYXR0cmlidXRlcyB3ZSB3YW50IHRvIGNoYW5nZVxuICAgICAgY29uc3QgYXR0cnMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIGF0dHJpYnV0ZXMpXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW3Byb3BdICE9PSB1bmRlZmluZWQpIGF0dHJzLnB1c2godGhpcy5wcmVwYXJlVXNlckF0dHJpYnV0ZShwcm9wLCBhdHRyaWJ1dGVzW3Byb3BdKSk7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyUG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgaWYgKCF1c2VyKSByZXR1cm4gcmVqZWN0KCk7XG4gICAgICAvLyB3ZSBuZWVkIHRvIGdldCB0aGUgc2Vzc2lvbiBiZWZvcmUgdG8gbWFrZSBjaGFuZ2VzXG4gICAgICB1c2VyLmdldFNlc3Npb24oKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICAgIGVsc2UgdXNlci51cGRhdGVBdHRyaWJ1dGVzKGF0dHJzLCAoZTogRXJyb3IpID0+IChlID8gcmVqZWN0KGUpIDogcmVzb2x2ZSgpKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -5,6 +5,7 @@ import { Plugins } from '@capacitor/core';
|
|
|
5
5
|
const { Browser } = Plugins;
|
|
6
6
|
import { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';
|
|
7
7
|
import { IDEAAuthService } from './auth.service';
|
|
8
|
+
import { environment as env } from '@env';
|
|
8
9
|
export class IDEASignInPage {
|
|
9
10
|
constructor(navCtrl, tc, message, loading, auth, t) {
|
|
10
11
|
this.navCtrl = navCtrl;
|
|
@@ -13,10 +14,10 @@ export class IDEASignInPage {
|
|
|
13
14
|
this.loading = loading;
|
|
14
15
|
this.auth = auth;
|
|
15
16
|
this.t = t;
|
|
16
|
-
this.title =
|
|
17
|
-
this.registrationPossible =
|
|
18
|
-
this.hasIntroPage =
|
|
19
|
-
this.website =
|
|
17
|
+
this.title = env.idea.app.title;
|
|
18
|
+
this.registrationPossible = env.idea.auth.registrationIsPossible;
|
|
19
|
+
this.hasIntroPage = env.idea.app.hasIntroPage;
|
|
20
|
+
this.website = env.idea.website;
|
|
20
21
|
this.agreementsCheck = true;
|
|
21
22
|
}
|
|
22
23
|
ionViewDidEnter() {
|
|
@@ -80,4 +81,4 @@ IDEASignInPage.ctorParameters = () => [
|
|
|
80
81
|
{ type: IDEAAuthService },
|
|
81
82
|
{ type: IDEATranslationsService }
|
|
82
83
|
];
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25Jbi5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPMUMsTUFBTSxPQUFPLGNBQWM7SUFzQ3pCLFlBQ1MsT0FBc0IsRUFDdEIsRUFBcUIsRUFDckIsT0FBMkIsRUFDM0IsT0FBMkIsRUFDM0IsSUFBcUIsRUFDckIsQ0FBMEI7UUFMMUIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUVqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDakUsSUFBSSxDQUFDLFlBQVksR0FBRyxH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ZTtZQUY0Qyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBQbHVnaW5zIH0gZnJvbSAnQGNhcGFjaXRvci9jb3JlJztcbmNvbnN0IHsgQnJvd3NlciB9ID0gUGx1Z2lucztcbmltcG9ydCB7IElERUFNZXNzYWdlU2VydmljZSwgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBVGluQ2FuU2VydmljZSwgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbmltcG9ydCB7IGVudmlyb25tZW50IGFzIGVudiB9IGZyb20gJ0BlbnYnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNpZ24taW4nLFxuICB0ZW1wbGF0ZVVybDogJ3NpZ25Jbi5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0aC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQVNpZ25JblBhZ2Uge1xuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwdWJsaWMgcmVnaXN0cmF0aW9uIGlzIGFsbG93ZWQgZm9yIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdHJhdGlvblBvc3NpYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvamVjdCBoYXMgYW4gaW50cm8gKGV4cGxhbmF0b3J5KSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGhhc0ludHJvUGFnZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gSURFQSdzIHdlYnNpdGUuXG4gICAqL1xuICBwdWJsaWMgd2Vic2l0ZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVtYWlsIGFkZHJlc3MgdG8gaWRlbnRpZnkgYSB1c2VyLlxuICAgKi9cbiAgcHVibGljIGVtYWlsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgdG8gbG9naW4gZm9yIHRoZSBlbWFpbCBzZWxlY3RlZC5cbiAgICovXG4gIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgYWdyZWVtZW50cyBoYXZlIGJlZW4gYWNjZXB0ZWQuXG4gICAqL1xuICBwdWJsaWMgYWdyZWVtZW50c0NoZWNrOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciBhIG5ldyBhY2NvdW50IHdhcyBqdXN0IGNyZWF0ZWQgdGhyb3VnaCB0aGUgU2lnblVwIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgbmV3QWNjb3VudFJlZ2lzdGVyZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBVSSwgaWYgYW55LlxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHVibGljIHRjOiBJREVBVGluQ2FuU2VydmljZSxcbiAgICBwdWJsaWMgbWVzc2FnZTogSURFQU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2FkaW5nOiBJREVBTG9hZGluZ1NlcnZpY2UsXG4gICAgcHVibGljIGF1dGg6IElERUFBdXRoU2VydmljZSxcbiAgICBwdWJsaWMgdDogSURFQVRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aXRsZSA9IGVudi5pZGVhLmFwcC50aXRsZTtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvblBvc3NpYmxlID0gZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlO1xuICAgIHRoaXMuaGFzSW50cm9QYWdlID0gZW52LmlkZWEuYXBwLmhhc0ludHJvUGFnZTtcbiAgICB0aGlzLndlYnNpdGUgPSBlbnYuaWRlYS53ZWJzaXRlO1xuICAgIHRoaXMuYWdyZWVtZW50c0NoZWNrID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgaW9uVmlld0RpZEVudGVyKCkge1xuICAgIC8vIG1hbmFnZSB0aGUgc2NlbmFyaW8gaW4gd2hpY2ggd2UganVzdCBjcmVhdGVkIGEgbmV3IGFjY291bnQgKHNob3cgYSBleHBsYW5hdG9yeSBtZXNzYWdlOiBlbWFpbCBtdXN0IGJlIGNvbmZpcm1lZClcbiAgICBpZiAodGhpcy50Yy5nZXQoJ25ld0FjY291bnRSZWdpc3RlcmVkJykpIHtcbiAgICAgIHRoaXMubmV3QWNjb3VudFJlZ2lzdGVyZWQgPSB0cnVlO1xuICAgICAgdGhpcy5lbWFpbCA9IHRoaXMudGMuZ2V0KCduZXdBY2NvdW50UmVnaXN0ZXJlZCcsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduLWluIHdpdGggdGhlIGF1dGggZGV0YWlscyBwcm92aWRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbigpIHtcbiAgICBpZiAoIXRoaXMuYWdyZWVtZW50c0NoZWNrKSByZXR1cm47XG4gICAgdGhpcy5lcnJvck1zZyA9IG51bGw7XG4gICAgYXdhaXQgdGhpcy5sb2FkaW5nLnNob3coKTtcbiAgICB0aGlzLmF1dGhcbiAgICAgIC5sb2dpbih0aGlzLmVtYWlsLCB0aGlzLnBhc3N3b3JkKVxuICAgICAgLnRoZW4obmVlZE5ld1Bhc3N3b3JkID0+IHtcbiAgICAgICAgaWYgKG5lZWROZXdQYXNzd29yZCkge1xuICAgICAgICAgIHRoaXMudGMuc2V0KCdlbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgICAgICAgIHRoaXMudGMuc2V0KCdwYXNzd29yZCcsIHRoaXMucGFzc3dvcmQpO1xuICAgICAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoL25ldy1wYXNzd29yZCddKTtcbiAgICAgICAgfSBlbHNlIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJycpOyAvLyBoYXJkIHJlbG9hZFxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdVc2VyTm90Q29uZmlybWVkRXhjZXB0aW9uJykgdGhpcy5lcnJvck1zZyA9IHRoaXMudC5fKCdJREVBX0FVVEguQ09ORklSTV9ZT1VSX0VNQUlMX1RPX0xPR0lOJyk7XG4gICAgICAgIHRoaXMubWVzc2FnZS5lcnJvcignSURFQV9BVVRILkFVVEhFTlRJQ0FUSU9OX0ZBSUxFRCcpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZy5oaWRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIHRoZSBob21lcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnb1RvSW50cm8oKSB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlQmFjayhbJ2ludHJvJ10pO1xuICB9XG4gIC8qKlxuICAgKiBHbyB0byB0aGUgZm9yZ290IHBhc3N3b3JkIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ29Ub0ZvcmdvdFBhc3N3b3JkKCkge1xuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoL2ZvcmdvdC1wYXNzd29yZCddKTtcbiAgfVxuICAvKipcbiAgICogR28gdG8gcmVnaXN0cmF0aW9uIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ29Ub1JlZ2lzdHJhdGlvbigpIHtcbiAgICB0aGlzLnRjLnNldCgnZW1haWwnLCB0aGlzLmVtYWlsKTtcbiAgICB0aGlzLnRjLnNldCgncGFzc3dvcmQnLCB0aGlzLnBhc3N3b3JkKTtcbiAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICdzaWduLXVwJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBVUkwgaW4gdGhlIGJyb3dzZXIuXG4gICAqL1xuICBwdWJsaWMgb3BlbkxpbmsodXJsOiBzdHJpbmcpIHtcbiAgICBCcm93c2VyLm9wZW4oeyB1cmwgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,6 +4,7 @@ import { NavController } from '@ionic/angular';
|
|
|
4
4
|
import { isEmpty } from 'idea-toolbox';
|
|
5
5
|
import { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';
|
|
6
6
|
import { IDEAAuthService } from './auth.service';
|
|
7
|
+
import { environment as env } from '@env';
|
|
7
8
|
export class IDEASignUpPage {
|
|
8
9
|
constructor(navCtrl, tc, message, loading, auth, t) {
|
|
9
10
|
this.navCtrl = navCtrl;
|
|
@@ -17,7 +18,7 @@ export class IDEASignUpPage {
|
|
|
17
18
|
this.agreementsCheck = false;
|
|
18
19
|
}
|
|
19
20
|
ngOnInit() {
|
|
20
|
-
if (
|
|
21
|
+
if (!env.idea.auth.registrationIsPossible)
|
|
21
22
|
return this.goToAuth();
|
|
22
23
|
this.agreementsCheck =
|
|
23
24
|
this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')
|
|
@@ -70,4 +71,4 @@ IDEASignUpPage.ctorParameters = () => [
|
|
|
70
71
|
{ type: IDEAAuthService },
|
|
71
72
|
{ type: IDEATranslationsService }
|
|
72
73
|
];
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblVwLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25VcC5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xQyxNQUFNLE9BQU8sY0FBYztJQWtCekIsWUFDUyxPQUFzQixFQUN0QixFQUFxQixFQUNyQixPQUEyQixFQUMzQixPQUEyQixFQUMzQixJQUFxQixFQUNyQixDQUEwQjtRQUwxQixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLE1BQUMsR0FBRCxDQUFDLENBQXlCO1FBRWpDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWxFLElBQUksQ0FBQyxlQUFlO1lBQ2xCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUNBQW1DLENBQUM7Z0JBQ2xHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZTtnQkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNiLENBQUM7SUFLWSxRQUFROztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztnQkFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7aUJBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU1RSxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUU5RSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUk7aUJBQ04sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUVYLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUM7aUJBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO0tBQUE7SUFLTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7OztZQW5GRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLDQ4SUFBK0I7O2FBRWhDOzs7WUFaUSxhQUFhO1lBRTJCLGlCQUFpQjtZQUF6RCxrQkFBa0I7WUFBRSxrQkFBa0I7WUFFdEMsZUFBZTtZQUY0Qyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnaWRlYS10b29sYm94JztcbmltcG9ydCB7IElERUFNZXNzYWdlU2VydmljZSwgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBVGluQ2FuU2VydmljZSwgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbmltcG9ydCB7IGVudmlyb25tZW50IGFzIGVudiB9IGZyb20gJ0BlbnYnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNpZ24tdXAnLFxuICB0ZW1wbGF0ZVVybDogJ3NpZ25VcC5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0aC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQVNpZ25VcFBhZ2Uge1xuICAvKipcbiAgICogVGhlIGVtYWlsIGFkZHJlc3MgdXNlZCB0byBpZGVudGlmeSB0aGUgbmV3IGFjY291bnQuXG4gICAqL1xuICBwdWJsaWMgZW1haWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnQuXG4gICAqL1xuICBwdWJsaWMgcGFzc3dvcmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFncmVlbWVudHMgaGF2ZSBiZWVuIGFjY2VwdGVkLlxuICAgKi9cbiAgcHVibGljIGFncmVlbWVudHNDaGVjazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIFVJLCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgZXJyb3JNc2c6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmF2Q3RybDogTmF2Q29udHJvbGxlcixcbiAgICBwdWJsaWMgdGM6IElERUFUaW5DYW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBJREVBTWVzc2FnZVNlcnZpY2UsXG4gICAgcHVibGljIGxvYWRpbmc6IElERUFMb2FkaW5nU2VydmljZSxcbiAgICBwdWJsaWMgYXV0aDogSURFQUF1dGhTZXJ2aWNlLFxuICAgIHB1YmxpYyB0OiBJREVBVHJhbnNsYXRpb25zU2VydmljZVxuICApIHtcbiAgICB0aGlzLmVtYWlsID0gdGhpcy50Yy5nZXQoJ2VtYWlsJywgdHJ1ZSk7XG4gICAgdGhpcy5wYXNzd29yZCA9IHRoaXMudGMuZ2V0KCdwYXNzd29yZCcsIHRydWUpO1xuICAgIHRoaXMuYWdyZWVtZW50c0NoZWNrID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICghZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlKSByZXR1cm4gdGhpcy5nb1RvQXV0aCgpO1xuICAgIC8vIGlmIHRoZXJlIGlzbid0IGFueSBhZ3JlZW1lbnQgdG8gYWdyZWUgdG8sIHNldCB0aGUgY2hlY2sgdHJ1ZVxuICAgIHRoaXMuYWdyZWVtZW50c0NoZWNrID1cbiAgICAgIHRoaXMudC5fKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKSB8fCB0aGlzLnQuXygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJylcbiAgICAgICAgPyB0aGlzLmFncmVlbWVudHNDaGVja1xuICAgICAgICA6IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIG5ldyB1c2VyIGluIGNvZ25pdG8gKG5vdGUgRHluYW1vREIgc3RpbGwgbmVlZCB0byBiZSBtYW5hZ2VkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlcigpIHtcbiAgICB0aGlzLmVycm9yTXNnID0gbnVsbDtcbiAgICAvLyBjaGVjayB0aGUgZmllbGRzXG4gICAgaWYgKGlzRW1wdHkodGhpcy5lbWFpbCwgJ2VtYWlsJykpIHRoaXMuZXJyb3JNc2cgPSB0aGlzLnQuXygnSURFQV9BVVRILlZBTElEX0VNQUlMX09CTElHQVRPUlknKTtcbiAgICBlbHNlIGlmICghdGhpcy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkLmxlbmd0aCA8IDgpXG4gICAgICB0aGlzLmVycm9yTXNnID0gdGhpcy50Ll8oJ0lERUFfQVVUSC5QQVNTV09SRF9QT0xJQ1lfVklPTEFUSU9OJywgeyBuOiA4IH0pO1xuICAgIC8vIG91dHB1dCB0aGUgZXJyb3IsIGlmIHRoZXJlIHdhcyBvbmVcbiAgICBpZiAodGhpcy5lcnJvck1zZykgcmV0dXJuIHRoaXMubWVzc2FnZS5lcnJvcignSURFQV9BVVRILlJFR0lTVFJBVElPTl9GQUlMRUQnKTtcbiAgICAvLyBzdGFydCB0aGUgcmVnaXN0cmF0aW9uXG4gICAgYXdhaXQgdGhpcy5sb2FkaW5nLnNob3coKTtcbiAgICB0aGlzLmF1dGhcbiAgICAgIC5yZWdpc3Rlcih0aGlzLmVtYWlsLCB0aGlzLnBhc3N3b3JkKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2Uuc3VjY2VzcygnSURFQV9BVVRILlJFR0lTVFJBVElPTl9DT01QTEVURUQnKTtcbiAgICAgICAgdGhpcy50Yy5zZXQoJ25ld0FjY291bnRSZWdpc3RlcmVkJywgdGhpcy5lbWFpbCk7XG4gICAgICAgIHRoaXMuZ29Ub0F1dGgoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgLy8gc2hvdyB0aGUgdW5leHBlY3RlZCBlcnJvciBvbiBzY3JlZW4gKGVuZ2xpc2gpXG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmVycm9yKCdJREVBX0FVVEguUkVHSVNUUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZy5oaWRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRvIHRoZSByZXNlbmQgbGluayBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdvVG9SZXNlbmRMaW5rKCkge1xuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoL3Jlc2VuZC1saW5rJ10pO1xuICB9XG4gIC8qKlxuICAgKiBHbyB0byBhdXRoIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ29Ub0F1dGgoKSB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlQmFjayhbJ2F1dGgnXSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,15 +8,16 @@ import { __awaiter } from 'tslib';
|
|
|
8
8
|
import { Plugins } from '@capacitor/core';
|
|
9
9
|
import { Storage } from '@ionic/storage';
|
|
10
10
|
import { CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserAttribute, CognitoRefreshToken } from 'amazon-cognito-identity-js';
|
|
11
|
+
import { environment } from '@env';
|
|
11
12
|
import { isEmpty } from 'idea-toolbox';
|
|
12
13
|
|
|
13
|
-
const DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(
|
|
14
|
+
const DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(environment.idea.project);
|
|
14
15
|
class IDEAAuthService {
|
|
15
16
|
constructor(storage) {
|
|
16
17
|
this.storage = storage;
|
|
17
18
|
this.userPool = new CognitoUserPool({
|
|
18
|
-
UserPoolId:
|
|
19
|
-
ClientId:
|
|
19
|
+
UserPoolId: environment.aws.cognito.userPoolId,
|
|
20
|
+
ClientId: environment.aws.cognito.userPoolClientId
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
prepareAuthDetails(username, pwd) {
|
|
@@ -80,7 +81,7 @@ class IDEAAuthService {
|
|
|
80
81
|
user.getSession((err) => __awaiter(this, void 0, void 0, function* () {
|
|
81
82
|
if (err)
|
|
82
83
|
return resolve();
|
|
83
|
-
if (
|
|
84
|
+
if (environment.idea.auth.singleSimultaneousSession)
|
|
84
85
|
yield this.setCurrentDeviceForProject(null);
|
|
85
86
|
if (options.global)
|
|
86
87
|
user.globalSignOut({ onSuccess: () => resolve(), onFailure: err => reject(err) });
|
|
@@ -165,7 +166,7 @@ class IDEAAuthService {
|
|
|
165
166
|
const isRobot = groups.some(x => x === 'robots');
|
|
166
167
|
if (isRobot)
|
|
167
168
|
return callback(new Error('ROBOT_USER'));
|
|
168
|
-
if (
|
|
169
|
+
if (environment.idea.auth.singleSimultaneousSession)
|
|
169
170
|
return this.checkForSimultaneousSessions(userDetails, callback);
|
|
170
171
|
callback();
|
|
171
172
|
}
|
|
@@ -228,10 +229,10 @@ class IDEASignInPage {
|
|
|
228
229
|
this.loading = loading;
|
|
229
230
|
this.auth = auth;
|
|
230
231
|
this.t = t;
|
|
231
|
-
this.title =
|
|
232
|
-
this.registrationPossible =
|
|
233
|
-
this.hasIntroPage =
|
|
234
|
-
this.website =
|
|
232
|
+
this.title = environment.idea.app.title;
|
|
233
|
+
this.registrationPossible = environment.idea.auth.registrationIsPossible;
|
|
234
|
+
this.hasIntroPage = environment.idea.app.hasIntroPage;
|
|
235
|
+
this.website = environment.idea.website;
|
|
235
236
|
this.agreementsCheck = true;
|
|
236
237
|
}
|
|
237
238
|
ionViewDidEnter() {
|
|
@@ -309,7 +310,7 @@ class IDEASignUpPage {
|
|
|
309
310
|
this.agreementsCheck = false;
|
|
310
311
|
}
|
|
311
312
|
ngOnInit() {
|
|
312
|
-
if (
|
|
313
|
+
if (!environment.idea.auth.registrationIsPossible)
|
|
313
314
|
return this.goToAuth();
|
|
314
315
|
this.agreementsCheck =
|
|
315
316
|
this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idea-ionic-auth.js","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/auth.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Storage } from '@ionic/storage';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult\n} from 'amazon-cognito-identity-js';\n\n// from idea-config.js\ndeclare const IDEA_PROJECT: string;\ndeclare const IDEA_AWS_COGNITO_USER_POOL_ID: string;\ndeclare const IDEA_AWS_COGNITO_WEB_CLIENT_ID: string;\ndeclare const IDEA_AWS_COGNITO_ONLY_ONE_SIMULTANEOUS_SESSION: boolean;\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(IDEA_PROJECT);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable()\nexport class IDEAAuthService {\n protected userPool: CognitoUserPool;\n\n constructor(protected storage: Storage) {\n this.userPool = new CognitoUserPool({\n UserPoolId: IDEA_AWS_COGNITO_USER_POOL_ID,\n ClientId: IDEA_AWS_COGNITO_WEB_CLIENT_ID\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n protected prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n protected prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n protected prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n public login(username: string, password: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n // get a cognito user and try to authenticate\n this.prepareCognitoUser(username).authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: () => resolve(false),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () => resolve(true)\n });\n });\n }\n /**\n * Complete a complete new password flow in the authentication.\n */\n public confirmNewPassword(username: string, tempPassword: string, newPassword: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // login with the old password\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, tempPassword), {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () =>\n // complete the new password challenge\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n }\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n public register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject) => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult) =>\n err ? reject(err) : resolve(res.user)\n );\n });\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n public confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error) =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n public resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error) => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n public logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject) => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(() =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then(() => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error) => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (IDEA_AWS_COGNITO_ONLY_ONE_SIMULTANEOUS_SESSION) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global) user.globalSignOut({ onSuccess: () => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n public forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n public confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // get the user and confirm a new password\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n public isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject) => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener('online', () =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession) => {\n if (err) return reject(err);\n // get user attributes\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]) => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute) => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n () => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n protected refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void) {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession) => {\n if (err) {\n // try again in 1 minute\n setTimeout(() => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(() => this.refreshSession(user, session.getRefreshToken().getToken(), callback), 15 * 60 * 1000);\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `IDEA_AWS_COGNITO_ONLY_ONE_SIMULTANEOUS_SESSION` is on, make sure there is only one active session per user.\n */\n protected runPostAuthChecks(userDetails: any, callback: (err?: Error) => void) {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (IDEA_AWS_COGNITO_ONLY_ONE_SIMULTANEOUS_SESSION) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n protected async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void) {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then(() => callback())\n .catch(() => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n protected setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n public updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject) => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error) => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error) => (e ? reject(e) : resolve()));\n });\n });\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Plugins } from '@capacitor/core';\nconst { Browser } = Plugins;\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n// from idea-config.js\ndeclare const IDEA_APP_TITLE: string;\ndeclare const IDEA_AUTH_WEBSITE: string;\ndeclare const IDEA_AUTH_REGISTRATION_POSSIBLE: boolean;\ndeclare const IDEA_HAS_INTRO_PAGE: boolean;\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n /**\n * The title of the project.\n */\n public title: string;\n /**\n * Whether the public registration is allowed for the project.\n */\n public registrationPossible: boolean;\n /**\n * Whether the project has an intro (explanatory) page.\n */\n public hasIntroPage: boolean;\n /**\n * The URL to IDEA's website.\n */\n public website: string;\n /**\n * The email address to identify a user.\n */\n public email: string;\n /**\n * The password to login for the email selected.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * Whether a new account was just created through the SignUp page.\n */\n public newAccountRegistered: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.title = IDEA_APP_TITLE;\n this.registrationPossible = IDEA_AUTH_REGISTRATION_POSSIBLE;\n this.hasIntroPage = IDEA_HAS_INTRO_PAGE;\n this.website = IDEA_AUTH_WEBSITE;\n this.agreementsCheck = true;\n }\n public ionViewDidEnter() {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n if (this.tc.get('newAccountRegistered')) {\n this.newAccountRegistered = true;\n this.email = this.tc.get('newAccountRegistered', true);\n }\n }\n\n /**\n * Sign-in with the auth details provided.\n */\n public async login() {\n if (!this.agreementsCheck) return;\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .login(this.email, this.password)\n .then(needNewPassword => {\n if (needNewPassword) {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth/new-password']);\n } else window.location.assign(''); // hard reload\n })\n .catch(err => {\n if (err.name === 'UserNotConfirmedException') this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the homepage.\n */\n public goToIntro() {\n this.navCtrl.navigateBack(['intro']);\n }\n /**\n * Go to the forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n /**\n * Go to registration page.\n */\n public goToRegistration() {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n /**\n * Open a URL in the browser.\n */\n public openLink(url: string) {\n Browser.open({ url });\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n// from idea-config.js\ndeclare const IDEA_AUTH_REGISTRATION_POSSIBLE: boolean;\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage {\n /**\n * The email address used to identify the new account.\n */\n public email: string;\n /**\n * The password of the new account.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n this.agreementsCheck = false;\n }\n public ngOnInit() {\n if (IDEA_AUTH_REGISTRATION_POSSIBLE === false) return this.goToAuth();\n // if there isn't any agreement to agree to, set the check true\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n /**\n * Register the new user in cognito (note DynamoDB still need to be managed).\n */\n public async register() {\n this.errorMsg = null;\n // check the fields\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else if (!this.password || this.password.length < 8)\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n // output the error, if there was one\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n // start the registration\n await this.loading.show();\n this.auth\n .register(this.email, this.password)\n .then(() => {\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.tc.set('newAccountRegistered', this.email);\n this.goToAuth();\n })\n .catch(err => {\n // show the unexpected error on screen (english)\n this.errorMsg = err.message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the resend link page.\n */\n public goToResendLink() {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The current temporary password.\n */\n public password: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n if (!this.email || !this.password) this.goToAuth();\n }\n\n /**\n * Confirm a new password (auth flow that follows a registration or a password reset).\n */\n public async confirmNewPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmNewPassword(this.email, this.password, this.newPassword)\n // we are logged in\n .then(() => window.location.assign(''))\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Resend the link to confirm the email address.\n */\n public async resendConfirmationLink() {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n await this.loading.show();\n this.auth\n .resendConfirmationCode(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * \"I forgot my password\" procedure.\n */\n public async forgotPassword() {\n await this.loading.show();\n this.auth\n .forgotPassword(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n })\n .catch(() => this.message.error('IDEA_AUTH.USER_NOT_FOUND'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the confirm password page.\n */\n public goToConfirmPassword() {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email || null } });\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The code (received via email), to use for confirming the account.\n */\n public code: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public route: ActivatedRoute,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.route.snapshot.queryParamMap.get('email') || null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n /**\n * Confirm new password.\n */\n public async confirmPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmPassword(this.email, this.code, this.newPassword)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_PASSWORD_ERROR', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ])\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage\n ]\n})\nexport class IDEAAuthModule {}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"idea-ionic-auth.js","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/auth.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Storage } from '@ionic/storage';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult\n} from 'amazon-cognito-identity-js';\n\nimport { environment as env } from '@env';\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable()\nexport class IDEAAuthService {\n protected userPool: CognitoUserPool;\n\n constructor(protected storage: Storage) {\n this.userPool = new CognitoUserPool({\n UserPoolId: env.aws.cognito.userPoolId,\n ClientId: env.aws.cognito.userPoolClientId\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n protected prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n protected prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n protected prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n public login(username: string, password: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n // get a cognito user and try to authenticate\n this.prepareCognitoUser(username).authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: () => resolve(false),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () => resolve(true)\n });\n });\n }\n /**\n * Complete a complete new password flow in the authentication.\n */\n public confirmNewPassword(username: string, tempPassword: string, newPassword: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // login with the old password\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, tempPassword), {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () =>\n // complete the new password challenge\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n }\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n public register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject) => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult) =>\n err ? reject(err) : resolve(res.user)\n );\n });\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n public confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error) =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n public resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error) => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n public logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject) => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(() =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then(() => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error) => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (env.idea.auth.singleSimultaneousSession) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global) user.globalSignOut({ onSuccess: () => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n public forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n public confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // get the user and confirm a new password\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n public isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject) => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener('online', () =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession) => {\n if (err) return reject(err);\n // get user attributes\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]) => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute) => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n () => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n protected refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void) {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession) => {\n if (err) {\n // try again in 1 minute\n setTimeout(() => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(() => this.refreshSession(user, session.getRefreshToken().getToken(), callback), 15 * 60 * 1000);\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `env.idea.auth.singleSimultaneousSession` is on, make sure there is only one active session per user.\n */\n protected runPostAuthChecks(userDetails: any, callback: (err?: Error) => void) {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (env.idea.auth.singleSimultaneousSession) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n protected async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void) {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then(() => callback())\n .catch(() => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n protected setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n public updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject) => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error) => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error) => (e ? reject(e) : resolve()));\n });\n });\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Plugins } from '@capacitor/core';\nconst { Browser } = Plugins;\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n /**\n * The title of the project.\n */\n public title: string;\n /**\n * Whether the public registration is allowed for the project.\n */\n public registrationPossible: boolean;\n /**\n * Whether the project has an intro (explanatory) page.\n */\n public hasIntroPage: boolean;\n /**\n * The URL to IDEA's website.\n */\n public website: string;\n /**\n * The email address to identify a user.\n */\n public email: string;\n /**\n * The password to login for the email selected.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * Whether a new account was just created through the SignUp page.\n */\n public newAccountRegistered: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.title = env.idea.app.title;\n this.registrationPossible = env.idea.auth.registrationIsPossible;\n this.hasIntroPage = env.idea.app.hasIntroPage;\n this.website = env.idea.website;\n this.agreementsCheck = true;\n }\n public ionViewDidEnter() {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n if (this.tc.get('newAccountRegistered')) {\n this.newAccountRegistered = true;\n this.email = this.tc.get('newAccountRegistered', true);\n }\n }\n\n /**\n * Sign-in with the auth details provided.\n */\n public async login() {\n if (!this.agreementsCheck) return;\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .login(this.email, this.password)\n .then(needNewPassword => {\n if (needNewPassword) {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth/new-password']);\n } else window.location.assign(''); // hard reload\n })\n .catch(err => {\n if (err.name === 'UserNotConfirmedException') this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the homepage.\n */\n public goToIntro() {\n this.navCtrl.navigateBack(['intro']);\n }\n /**\n * Go to the forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n /**\n * Go to registration page.\n */\n public goToRegistration() {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n /**\n * Open a URL in the browser.\n */\n public openLink(url: string) {\n Browser.open({ url });\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage {\n /**\n * The email address used to identify the new account.\n */\n public email: string;\n /**\n * The password of the new account.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n this.agreementsCheck = false;\n }\n public ngOnInit() {\n if (!env.idea.auth.registrationIsPossible) return this.goToAuth();\n // if there isn't any agreement to agree to, set the check true\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n /**\n * Register the new user in cognito (note DynamoDB still need to be managed).\n */\n public async register() {\n this.errorMsg = null;\n // check the fields\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else if (!this.password || this.password.length < 8)\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n // output the error, if there was one\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n // start the registration\n await this.loading.show();\n this.auth\n .register(this.email, this.password)\n .then(() => {\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.tc.set('newAccountRegistered', this.email);\n this.goToAuth();\n })\n .catch(err => {\n // show the unexpected error on screen (english)\n this.errorMsg = err.message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the resend link page.\n */\n public goToResendLink() {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The current temporary password.\n */\n public password: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n if (!this.email || !this.password) this.goToAuth();\n }\n\n /**\n * Confirm a new password (auth flow that follows a registration or a password reset).\n */\n public async confirmNewPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmNewPassword(this.email, this.password, this.newPassword)\n // we are logged in\n .then(() => window.location.assign(''))\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Resend the link to confirm the email address.\n */\n public async resendConfirmationLink() {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n await this.loading.show();\n this.auth\n .resendConfirmationCode(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * \"I forgot my password\" procedure.\n */\n public async forgotPassword() {\n await this.loading.show();\n this.auth\n .forgotPassword(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n })\n .catch(() => this.message.error('IDEA_AUTH.USER_NOT_FOUND'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the confirm password page.\n */\n public goToConfirmPassword() {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email || null } });\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The code (received via email), to use for confirming the account.\n */\n public code: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public route: ActivatedRoute,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.route.snapshot.queryParamMap.get('email') || null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n /**\n * Confirm new password.\n */\n public async confirmPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmPassword(this.email, this.code, this.newPassword)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_PASSWORD_ERROR', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ])\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage\n ]\n})\nexport class IDEAAuthModule {}\n"],"names":["env"],"mappings":"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"}
|