@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
139 lines • 18.8 kB
JavaScript
import { pick, findKey, get, has, reduce, map, omit } from 'lodash-es';
import { gettext } from '@c8y/ngx-components';
export var AlgorithmType;
(function (AlgorithmType) {
AlgorithmType["PCKS"] = "PCKS";
AlgorithmType["RSA"] = "RSA";
})(AlgorithmType || (AlgorithmType = {}));
export const algorithmTypeConfig = {
[AlgorithmType.PCKS]: {
name: 'PCKS',
value: 'PCKS',
label: gettext('X.509 certificate (PEM format)')
},
[AlgorithmType.RSA]: {
name: 'RSA',
value: 'RSA',
label: gettext('RSA public key (X.509 Subject Public Key Info)')
}
};
export var CertificateType;
(function (CertificateType) {
CertificateType["CUSTOM"] = "CUSTOM";
CertificateType["AZURE"] = "AZURE";
CertificateType["ADFS"] = "ADFS";
CertificateType["JWKS"] = "JWKS";
})(CertificateType || (CertificateType = {}));
export const certificateTypeConfig = {
[CertificateType.CUSTOM]: {
name: 'CUSTOM',
label: gettext('Custom'),
value: 'CUSTOM',
signatureVerificationConfigFragment: 'manual',
ordinal: 0
},
[CertificateType.AZURE]: {
name: 'AZURE',
label: 'Azure',
value: 'AZURE',
signatureVerificationConfigFragment: 'aad',
ordinal: 1
},
[CertificateType.ADFS]: {
name: 'ADFS',
label: gettext('ADFS manifest'),
value: 'ADFS',
signatureVerificationConfigFragment: 'adfsManifest',
ordinal: 2
},
[CertificateType.JWKS]: {
name: 'JWKS',
label: 'JWKS',
value: 'JWKS',
signatureVerificationConfigFragment: 'jwks',
ordinal: 3
}
};
export class SignatureConfiguration {
constructor(signatureVerificationConfig) {
this.manual = new CustomSignatureVerification(signatureVerificationConfig.manual || { certIdFromField: false });
this.aad = signatureVerificationConfig.aad || { publicKeyDiscoveryUrl: '' };
this.jwks = signatureVerificationConfig.jwks || { jwksUri: '' };
this.adfsManifest = signatureVerificationConfig.adfsManifest || { manifestUrl: '' };
this.certificateTypeChosen = this.getCertificateType(signatureVerificationConfig);
}
toSignatureVerificationConfig() {
const result = {
manual: this.manual.toManual(),
aad: this.aad,
jwks: this.jwks,
adfsManifest: this.adfsManifest
};
return pick(result, certificateTypeConfig[this.certificateTypeChosen].signatureVerificationConfigFragment);
}
getCertificateType(signatureVerificationConfig) {
const templateCertificateType = findKey(certificateTypeConfig, certificateType => has(signatureVerificationConfig, certificateType.signatureVerificationConfigFragment));
return templateCertificateType || CertificateType.CUSTOM;
}
}
// tslint:disable-next-line:max-classes-per-file
class CustomSignatureVerification {
constructor(manual) {
this.customCertificates = [];
this.certIdFromField = manual.certIdFromField;
this.certIdField = manual.certIdField;
this.customCertificates = this.getCustomCertificates(manual);
}
getCustomCertificates(manual) {
const certificates = get(manual, 'certificates', []);
const customCertificates = map(certificates, (certificate, key) => ({
...certificate,
key,
validFrom: new Date(certificate.validFrom),
validTill: new Date(certificate.validTill)
}));
if (customCertificates.length === 0) {
const newCustomCertificate = { alg: 'RSA' };
customCertificates.push(newCustomCertificate);
}
return customCertificates;
}
addCustomCertificate() {
const newCustomCertificate = { alg: AlgorithmType.RSA, key: '', publicKey: '' };
this.customCertificates.push(newCustomCertificate);
}
removeCustomCertificate(customCertificate) {
const indexOfCustomCertificate = this.customCertificates.indexOf(customCertificate);
this.customCertificates.splice(indexOfCustomCertificate, 1);
}
toManual() {
const manual = this.getManualSignatureVerificationConfig();
manual.certificates = this.getSignatureCertificates();
return manual;
}
getSignatureCertificates() {
if (this.customCertificates.length < 2) {
this.customCertificates[0].key = 'default';
}
return reduce(this.customCertificates, (signatureCertificates, customCertificate) => ({
...signatureCertificates,
[customCertificate.key]: {
alg: customCertificate.alg,
publicKey: customCertificate.publicKey,
validFrom: customCertificate.validFrom,
validTill: customCertificate.validTill
}
}), {});
}
getManualSignatureVerificationConfig() {
let manual = {
certIdFromField: this.customCertificates.length > 1,
certIdField: this.certIdField
};
if (!manual.certIdFromField) {
manual = omit(manual, 'certIdField');
}
return manual;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLWNvbmZpZ3VyYXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vc3NvLWNvbmZpZ3VyYXRpb24vdGVtcGxhdGUtcGFydHMvc2lnbmF0dXJlLWNvbmZpZ3VyYXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2Qiw4QkFBYSxDQUFBO0lBQ2IsNEJBQVcsQ0FBQTtBQUNiLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO0tBQ2pEO0lBQ0QsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxFQUFFLEtBQUs7UUFDWCxLQUFLLEVBQUUsS0FBSztRQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsZ0RBQWdELENBQUM7S0FDakU7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixvQ0FBaUIsQ0FBQTtJQUNqQixrQ0FBZSxDQUFBO0lBQ2YsZ0NBQWEsQ0FBQTtJQUNiLGdDQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsZUFBZSxLQUFmLGVBQWUsUUFLMUI7QUFFRCxNQUFNLENBQUMs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cmlmaWNhdGlvbkNvbmZpZyxcbiAgQWRmc1NpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyxcbiAgQ3VzdG9tU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLFxuICBKd2tzU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLFxuICBTaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdcbn0gZnJvbSAnLi4vc3NvLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgcGljaywgZmluZEtleSwgZ2V0LCBoYXMsIHJlZHVjZSwgbWFwLCBvbWl0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuZXhwb3J0IGVudW0gQWxnb3JpdGhtVHlwZSB7XG4gIFBDS1MgPSAnUENLUycsXG4gIFJTQSA9ICdSU0EnXG59XG5cbmV4cG9ydCBjb25zdCBhbGdvcml0aG1UeXBlQ29uZmlnID0ge1xuICBbQWxnb3JpdGhtVHlwZS5QQ0tTXToge1xuICAgIG5hbWU6ICdQQ0tTJyxcbiAgICB2YWx1ZTogJ1BDS1MnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdYLjUwOSBjZXJ0aWZpY2F0ZSAoUEVNIGZvcm1hdCknKVxuICB9LFxuICBbQWxnb3JpdGhtVHlwZS5SU0FdOiB7XG4gICAgbmFtZTogJ1JTQScsXG4gICAgdmFsdWU6ICdSU0EnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdSU0EgcHVibGljIGtleSAoWC41MDkgU3ViamVjdCBQdWJsaWMgS2V5IEluZm8pJylcbiAgfVxufTtcblxuZXhwb3J0IGVudW0gQ2VydGlmaWNhdGVUeXBlIHtcbiAgQ1VTVE9NID0gJ0NVU1RPTScsXG4gIEFaVVJFID0gJ0FaVVJFJyxcbiAgQURGUyA9ICdBREZTJyxcbiAgSldLUyA9ICdKV0tTJ1xufVxuXG5leHBvcnQgY29uc3QgY2VydGlmaWNhdGVUeXBlQ29uZmlnID0ge1xuICBbQ2VydGlmaWNhdGVUeXBlLkNVU1RPTV06IHtcbiAgICBuYW1lOiAnQ1VTVE9NJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnQ3VzdG9tJyksXG4gICAgdmFsdWU6ICdDVVNUT00nLFxuICAgIHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZ0ZyYWdtZW50OiAnbWFudWFsJyxcbiAgICBvcmRpbmFsOiAwXG4gIH0sXG4gIFtDZXJ0aWZpY2F0ZVR5cGUuQVpVUkVdOiB7XG4gICAgbmFtZTogJ0FaVVJFJyxcbiAgICBsYWJlbDogJ0F6dXJlJyxcbiAgICB2YWx1ZTogJ0FaVVJFJyxcbiAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdGcmFnbWVudDogJ2FhZCcsXG4gICAgb3JkaW5hbDogMVxuICB9LFxuICBbQ2VydGlmaWNhdGVUeXBlLkFERlNdOiB7XG4gICAgbmFtZTogJ0FERlMnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdBREZTIG1hbmlmZXN0JyksXG4gICAgdmFsdWU6ICdBREZTJyxcbiAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdGcmFnbWVudDogJ2FkZnNNYW5pZmVzdCcsXG4gICAgb3JkaW5hbDogMlxuICB9LFxuICBbQ2VydGlmaWNhdGVUeXBlLkpXS1NdOiB7XG4gICAgbmFtZTogJ0pXS1MnLFxuICAgIGxhYmVsOiAnSldLUycsXG4gICAgdmFsdWU6ICdKV0tTJyxcbiAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdGcmFnbWVudDogJ2p3a3MnLFxuICAgIG9yZGluYWw6IDNcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21DZXJ0aWZpY2F0ZSB7XG4gIGFsZzogQWxnb3JpdGhtVHlwZTtcbiAga2V5OiBzdHJpbmc7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICB2YWxpZEZyb20/OiBEYXRlO1xuICB2YWxpZFRpbGw/OiBEYXRlO1xufVxuXG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlQ29uZmlndXJhdGlvbiB7XG4gIG1hbnVhbD86IEN1c3RvbVNpZ25hdHVyZVZlcmlmaWNhdGlvbjtcbiAgYWFkPzogQWFkU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnO1xuICBqd2tzPzogSndrc1NpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZztcbiAgYWRmc01hbmlmZXN0PzogQWRmc1NpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZztcbiAgY2VydGlmaWNhdGVUeXBlQ2hvc2VuOiBDZXJ0aWZpY2F0ZVR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnOiBTaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcpIHtcbiAgICB0aGlzLm1hbnVhbCA9IG5ldyBDdXN0b21TaWduYXR1cmVWZXJpZmljYXRpb24oXG4gICAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcubWFudWFsIHx8IHsgY2VydElkRnJvbUZpZWxkOiBmYWxzZSB9XG4gICAgKTtcbiAgICB0aGlzLmFhZCA9IHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZy5hYWQgfHwgeyBwdWJsaWNLZXlEaXNjb3ZlcnlVcmw6ICcnIH07XG4gICAgdGhpcy5qd2tzID0gc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLmp3a3MgfHwgeyBqd2tzVXJpOiAnJyB9O1xuICAgIHRoaXMuYWRmc01hbmlmZXN0ID0gc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLmFkZnNNYW5pZmVzdCB8fCB7IG1hbmlmZXN0VXJsOiAnJyB9O1xuICAgIHRoaXMuY2VydGlmaWNhdGVUeXBlQ2hvc2VuID0gdGhpcy5nZXRDZXJ0aWZpY2F0ZVR5cGUoc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKTtcbiAgfVxuXG4gIHRvU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKCk6IFNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgbWFudWFsOiB0aGlzLm1hbnVhbC50b01hbnVhbCgpLFxuICAgICAgYWFkOiB0aGlzLmFhZCxcbiAgICAgIGp3a3M6IHRoaXMuandrcyxcbiAgICAgIGFkZnNNYW5pZmVzdDogdGhpcy5hZGZzTWFuaWZlc3RcbiAgICB9O1xuICAgIHJldHVybiBwaWNrKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2VydGlmaWNhdGVUeXBlQ29uZmlnW3RoaXMuY2VydGlmaWNhdGVUeXBlQ2hvc2VuXS5zaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdGcmFnbWVudFxuICAgICk7XG4gIH1cblxuICBnZXRDZXJ0aWZpY2F0ZVR5cGUoc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnOiBTaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcpOiBDZXJ0aWZpY2F0ZVR5cGUge1xuICAgIGNvbnN0IHRlbXBsYXRlQ2VydGlmaWNhdGVUeXBlID0gZmluZEtleShjZXJ0aWZpY2F0ZVR5cGVDb25maWcsIGNlcnRpZmljYXRlVHlwZSA9PlxuICAgICAgaGFzKHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZywgY2VydGlmaWNhdGVUeXBlLnNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZ0ZyYWdtZW50KVxuICAgICk7XG4gICAgcmV0dXJuIHRlbXBsYXRlQ2VydGlmaWNhdGVUeXBlIHx8IENlcnRpZmljYXRlVHlwZS5DVVNUT007XG4gIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1jbGFzc2VzLXBlci1maWxlXG5jbGFzcyBDdXN0b21TaWduYXR1cmVWZXJpZmljYXRpb24ge1xuICBjZXJ0SWRGcm9tRmllbGQ6IGJvb2xlYW47XG4gIGNlcnRJZEZpZWxkOiBzdHJpbmc7XG4gIGN1c3RvbUNlcnRpZmljYXRlczogQ3VzdG9tQ2VydGlmaWNhdGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG1hbnVhbDogQ3VzdG9tU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKSB7XG4gICAgdGhpcy5jZXJ0SWRGcm9tRmllbGQgPSBtYW51YWwuY2VydElkRnJvbUZpZWxkO1xuICAgIHRoaXMuY2VydElkRmllbGQgPSBtYW51YWwuY2VydElkRmllbGQ7XG4gICAgdGhpcy5jdXN0b21DZXJ0aWZpY2F0ZXMgPSB0aGlzLmdldEN1c3RvbUNlcnRpZmljYXRlcyhtYW51YWwpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tQ2VydGlmaWNhdGVzKG1hbnVhbDogQ3VzdG9tU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKSB7XG4gICAgY29uc3QgY2VydGlmaWNhdGVzID0gZ2V0KG1hbnVhbCwgJ2NlcnRpZmljYXRlcycsIFtdKTtcbiAgICBjb25zdCBjdXN0b21DZXJ0aWZpY2F0ZXMgPSBtYXAoY2VydGlmaWNhdGVzLCAoY2VydGlmaWNhdGUsIGtleSkgPT4gKHtcbiAgICAgIC4uLmNlcnRpZmljYXRlLFxuICAgICAga2V5LFxuICAgICAgdmFsaWRGcm9tOiBuZXcgRGF0ZShjZXJ0aWZpY2F0ZS52YWxpZEZyb20pLFxuICAgICAgdmFsaWRUaWxsOiBuZXcgRGF0ZShjZXJ0aWZpY2F0ZS52YWxpZFRpbGwpXG4gICAgfSkpO1xuICAgIGlmIChjdXN0b21DZXJ0aWZpY2F0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBuZXdDdXN0b21DZXJ0aWZpY2F0ZSA9IHsgYWxnOiAnUlNBJyB9O1xuICAgICAgY3VzdG9tQ2VydGlmaWNhdGVzLnB1c2gobmV3Q3VzdG9tQ2VydGlmaWNhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gY3VzdG9tQ2VydGlmaWNhdGVzO1xuICB9XG5cbiAgYWRkQ3VzdG9tQ2VydGlmaWNhdGUoKSB7XG4gICAgY29uc3QgbmV3Q3VzdG9tQ2VydGlmaWNhdGUgPSB7IGFsZzogQWxnb3JpdGhtVHlwZS5SU0EsIGtleTogJycsIHB1YmxpY0tleTogJycgfTtcbiAgICB0aGlzLmN1c3RvbUNlcnRpZmljYXRlcy5wdXNoKG5ld0N1c3RvbUNlcnRpZmljYXRlKTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUNlcnRpZmljYXRlKGN1c3RvbUNlcnRpZmljYXRlOiBDdXN0b21DZXJ0aWZpY2F0ZSkge1xuICAgIGNvbnN0IGluZGV4T2ZDdXN0b21DZXJ0aWZpY2F0ZSA9IHRoaXMuY3VzdG9tQ2VydGlmaWNhdGVzLmluZGV4T2YoY3VzdG9tQ2VydGlmaWNhdGUpO1xuICAgIHRoaXMuY3VzdG9tQ2VydGlmaWNhdGVzLnNwbGljZShpbmRleE9mQ3VzdG9tQ2VydGlmaWNhdGUsIDEpO1xuICB9XG5cbiAgdG9NYW51YWwoKTogQ3VzdG9tU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnIHtcbiAgICBjb25zdCBtYW51YWw6IEN1c3RvbVNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0TWFudWFsU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKCk7XG4gICAgbWFudWFsLmNlcnRpZmljYXRlcyA9IHRoaXMuZ2V0U2lnbmF0dXJlQ2VydGlmaWNhdGVzKCk7XG4gICAgcmV0dXJuIG1hbnVhbDtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUNlcnRpZmljYXRlcygpIHtcbiAgICBpZiAodGhpcy5jdXN0b21DZXJ0aWZpY2F0ZXMubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5jdXN0b21DZXJ0aWZpY2F0ZXNbMF0ua2V5ID0gJ2RlZmF1bHQnO1xuICAgIH1cbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgdGhpcy5jdXN0b21DZXJ0aWZpY2F0ZXMsXG4gICAgICAoc2lnbmF0dXJlQ2VydGlmaWNhdGVzLCBjdXN0b21DZXJ0aWZpY2F0ZSkgPT4gKHtcbiAgICAgICAgLi4uc2lnbmF0dXJlQ2VydGlmaWNhdGVzLFxuICAgICAgICBbY3VzdG9tQ2VydGlmaWNhdGUua2V5XToge1xuICAgICAgICAgIGFsZzogY3VzdG9tQ2VydGlmaWNhdGUuYWxnLFxuICAgICAgICAgIHB1YmxpY0tleTogY3VzdG9tQ2VydGlmaWNhdGUucHVibGljS2V5LFxuICAgICAgICAgIHZhbGlkRnJvbTogY3VzdG9tQ2VydGlmaWNhdGUudmFsaWRGcm9tLFxuICAgICAgICAgIHZhbGlkVGlsbDogY3VzdG9tQ2VydGlmaWNhdGUudmFsaWRUaWxsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgZ2V0TWFudWFsU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKCkge1xuICAgIGxldCBtYW51YWwgPSB7XG4gICAgICBjZXJ0SWRGcm9tRmllbGQ6IHRoaXMuY3VzdG9tQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDEsXG4gICAgICBjZXJ0SWRGaWVsZDogdGhpcy5jZXJ0SWRGaWVsZFxuICAgIH07XG4gICAgaWYgKCFtYW51YWwuY2VydElkRnJvbUZpZWxkKSB7XG4gICAgICBtYW51YWwgPSBvbWl0KG1hbnVhbCwgJ2NlcnRJZEZpZWxkJyk7XG4gICAgfVxuICAgIHJldHVybiBtYW51YWw7XG4gIH1cbn1cbiJdfQ==