matrix-react-sdk
Version:
SDK for matrix.org using React
211 lines (172 loc) • 26.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _url = _interopRequireDefault(require("url"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var sdk = _interopRequireWildcard(require("../../../index"));
var _languageHandler = require("../../../languageHandler");
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _serviceTypes = require("matrix-js-sdk/src/service-types");
var _dec, _class, _class2, _temp;
class TermsCheckbox extends _react.default.PureComponent {
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "onChange", ev => {
this.props.onChange(this.props.url, ev.target.checked);
});
}
render() {
return /*#__PURE__*/_react.default.createElement("input", {
type: "checkbox",
onChange: this.onChange,
checked: this.props.checked
});
}
}
(0, _defineProperty2.default)(TermsCheckbox, "propTypes", {
onChange: _propTypes.default.func.isRequired,
url: _propTypes.default.string.isRequired,
checked: _propTypes.default.bool.isRequired
});
let TermsDialog = (_dec = (0, _replaceableComponent.replaceableComponent)("views.dialogs.TermsDialog"), _dec(_class = (_temp = _class2 = class TermsDialog extends _react.default.PureComponent {
constructor(props) {
super();
(0, _defineProperty2.default)(this, "_onCancelClick", () => {
this.props.onFinished(false);
});
(0, _defineProperty2.default)(this, "_onNextClick", () => {
this.props.onFinished(true, Object.keys(this.state.agreedUrls).filter(url => this.state.agreedUrls[url]));
});
(0, _defineProperty2.default)(this, "_onTermsCheckboxChange", (url, checked) => {
this.setState({
agreedUrls: Object.assign({}, this.state.agreedUrls, {
[url]: checked
})
});
});
this.state = {
// url -> boolean
agreedUrls: {}
};
for (const url of props.agreedUrls) {
this.state.agreedUrls[url] = true;
}
}
_nameForServiceType(serviceType, host) {
switch (serviceType) {
case _serviceTypes.SERVICE_TYPES.IS:
return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Identity Server"), /*#__PURE__*/_react.default.createElement("br", null), "(", host, ")");
case _serviceTypes.SERVICE_TYPES.IM:
return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Integration Manager"), /*#__PURE__*/_react.default.createElement("br", null), "(", host, ")");
}
}
_summaryForServiceType(serviceType) {
switch (serviceType) {
case _serviceTypes.SERVICE_TYPES.IS:
return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Find others by phone or email"), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("Be found by phone or email"));
case _serviceTypes.SERVICE_TYPES.IM:
return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Use bots, bridges, widgets and sticker packs"));
}
}
render() {
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
const rows = [];
for (const policiesAndService of this.props.policiesAndServicePairs) {
const parsedBaseUrl = _url.default.parse(policiesAndService.service.baseUrl);
const policyValues = Object.values(policiesAndService.policies);
for (let i = 0; i < policyValues.length; ++i) {
const termDoc = policyValues[i];
const termsLang = (0, _languageHandler.pickBestLanguage)(Object.keys(termDoc).filter(k => k !== 'version'));
let serviceName;
let summary;
if (i === 0) {
serviceName = this._nameForServiceType(policiesAndService.service.serviceType, parsedBaseUrl.host);
summary = this._summaryForServiceType(policiesAndService.service.serviceType);
}
rows.push( /*#__PURE__*/_react.default.createElement("tr", {
key: termDoc[termsLang].url
}, /*#__PURE__*/_react.default.createElement("td", {
className: "mx_TermsDialog_service"
}, serviceName), /*#__PURE__*/_react.default.createElement("td", {
className: "mx_TermsDialog_summary"
}, summary), /*#__PURE__*/_react.default.createElement("td", null, termDoc[termsLang].name, " ", /*#__PURE__*/_react.default.createElement("a", {
rel: "noreferrer noopener",
target: "_blank",
href: termDoc[termsLang].url
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_TermsDialog_link"
}))), /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement(TermsCheckbox, {
url: termDoc[termsLang].url,
onChange: this._onTermsCheckboxChange,
checked: Boolean(this.state.agreedUrls[termDoc[termsLang].url])
}))));
}
} // if all the documents for at least one service have been checked, we can enable
// the submit button
let enableSubmit = false;
for (const policiesAndService of this.props.policiesAndServicePairs) {
let docsAgreedForService = 0;
for (const terms of Object.values(policiesAndService.policies)) {
let docAgreed = false;
for (const lang of Object.keys(terms)) {
if (lang === 'version') continue;
if (this.state.agreedUrls[terms[lang].url]) {
docAgreed = true;
break;
}
}
if (docAgreed) {
++docsAgreedForService;
}
}
if (docsAgreedForService === Object.keys(policiesAndService.policies).length) {
enableSubmit = true;
break;
}
}
return /*#__PURE__*/_react.default.createElement(BaseDialog, {
fixedWidth: false,
onFinished: this._onCancelClick,
title: (0, _languageHandler._t)("Terms of Service"),
contentId: "mx_Dialog_content",
hasCancel: false
}, /*#__PURE__*/_react.default.createElement("div", {
id: "mx_Dialog_content"
}, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("To continue you need to accept the terms of this service.")), /*#__PURE__*/_react.default.createElement("table", {
className: "mx_TermsDialog_termsTable"
}, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", {
className: "mx_TermsDialog_termsTableHeader"
}, /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("Service")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("Summary")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("Document")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("Accept"))), rows))), /*#__PURE__*/_react.default.createElement(DialogButtons, {
primaryButton: (0, _languageHandler._t)('Next'),
hasCancel: true,
onCancel: this._onCancelClick,
onPrimaryButtonClick: this._onNextClick,
primaryDisabled: !enableSubmit
}));
}
}, (0, _defineProperty2.default)(_class2, "propTypes", {
/**
* Array of [Service, policies] pairs, where policies is the response from the
* /terms endpoint for that service
*/
policiesAndServicePairs: _propTypes.default.array.isRequired,
/**
* urls that the user has already agreed to
*/
agreedUrls: _propTypes.default.arrayOf(_propTypes.default.string),
/**
* Called with:
* * success {bool} True if the user accepted any douments, false if cancelled
* * agreedUrls {string[]} List of agreed URLs
*/
onFinished: _propTypes.default.func.isRequired
}), _temp)) || _class);
exports.default = TermsDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvVGVybXNEaWFsb2cuanMiXSwibmFtZXMiOlsiVGVybXNDaGVja2JveCIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImV2IiwicHJvcHMiLCJvbkNoYW5nZSIsInVybCIsInRhcmdldCIsImNoZWNrZWQiLCJyZW5kZXIiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsImJvb2wiLCJUZXJtc0RpYWxvZyIsImNvbnN0cnVjdG9yIiwib25GaW5pc2hlZCIsIk9iamVjdCIsImtleXMiLCJzdGF0ZSIsImFncmVlZFVybHMiLCJmaWx0ZXIiLCJzZXRTdGF0ZSIsImFzc2lnbiIsIl9uYW1lRm9yU2VydmljZVR5cGUiLCJzZXJ2aWNlVHlwZSIsImhvc3QiLCJTRVJWSUNFX1RZUEVTIiwiSVMiLCJJTSIsIl9zdW1tYXJ5Rm9yU2VydmljZVR5cGUiLCJCYXNlRGlhbG9nIiwic2RrIiwiZ2V0Q29tcG9uZW50IiwiRGlhbG9nQnV0dG9ucyIsInJvd3MiLCJwb2xpY2llc0FuZFNlcnZpY2UiLCJwb2xpY2llc0FuZFNlcnZpY2VQYWlycyIsInBhcnNlZEJhc2VVcmwiLCJwYXJzZSIsInNlcnZpY2UiLCJiYXNlVXJsIiwicG9saWN5VmFsdWVzIiwidmFsdWVzIiwicG9saWNpZXMiLCJpIiwibGVuZ3RoIiwidGVybURvYyIsInRlcm1zTGFuZyIsImsiLCJzZXJ2aWNlTmFtZSIsInN1bW1hcnkiLCJwdXNoIiwibmFtZSIsIl9vblRlcm1zQ2hlY2tib3hDaGFuZ2UiLCJCb29sZWFuIiwiZW5hYmxlU3VibWl0IiwiZG9jc0FncmVlZEZvclNlcnZpY2UiLCJ0ZXJtcyIsImRvY0FncmVlZCIsImxhbmciLCJfb25DYW5jZWxDbGljayIsIl9vbk5leHRDbGljayIsImFycmF5IiwiYXJyYXlPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7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QVEsRUFBRSxLQUFLMEIsY0FGbkI7QUFHSSxNQUFBLG9CQUFvQixFQUFFLEtBQUtDLFlBSC9CO0FBSUksTUFBQSxlQUFlLEVBQUUsQ0FBQ047QUFKdEIsTUFyQkosQ0FESjtBQThCSDs7QUFoS3dELEMsc0RBQ3RDO0FBQ2Y7QUFDUjtBQUNBO0FBQ0E7QUFDUW5CLEVBQUFBLHVCQUF1QixFQUFFNUIsbUJBQVVzRCxLQUFWLENBQWdCcEQsVUFMMUI7O0FBT2Y7QUFDUjtBQUNBO0FBQ1FTLEVBQUFBLFVBQVUsRUFBRVgsbUJBQVV1RCxPQUFWLENBQWtCdkQsbUJBQVVHLE1BQTVCLENBVkc7O0FBWWY7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNRSSxFQUFBQSxVQUFVLEVBQUVQLG1CQUFVQyxJQUFWLENBQWVDO0FBakJaLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTkgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAqIGFzIHNkayBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBfdCwgcGlja0Jlc3RMYW5ndWFnZSB9IGZyb20gJy4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlcic7XG5cbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuaW1wb3J0IHtTRVJWSUNFX1RZUEVTfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvc2VydmljZS10eXBlc1wiO1xuXG5jbGFzcyBUZXJtc0NoZWNrYm94IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICAgIHVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIH1cblxuICAgIG9uQ2hhbmdlID0gKGV2KSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy51cmwsIGV2LnRhcmdldC5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5wcm9wcy5jaGVja2VkfVxuICAgICAgICAvPjtcbiAgICB9XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmRpYWxvZ3MuVGVybXNEaWFsb2dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1zRGlhbG9nIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFycmF5IG9mIFtTZXJ2aWNlLCBwb2xpY2llc10gcGFpcnMsIHdoZXJlIHBvbGljaWVzIGlzIHRoZSByZXNwb25zZSBmcm9tIHRoZVxuICAgICAgICAgKiAvdGVybXMgZW5kcG9pbnQgZm9yIHRoYXQgc2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgcG9saWNpZXNBbmRTZXJ2aWNlUGFpcnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB1cmxzIHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgYWdyZWVkIHRvXG4gICAgICAgICAqL1xuICAgICAgICBhZ3JlZWRVcmxzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsbGVkIHdpdGg6XG4gICAgICAgICAqICAgICAqIHN1Y2Nlc3Mge2Jvb2x9IFRydWUgaWYgdGhlIHVzZXIgYWNjZXB0ZWQgYW55IGRvdW1lbnRzLCBmYWxzZSBpZiBjYW5jZWxsZWRcbiAgICAgICAgICogICAgICogYWdyZWVkVXJscyB7c3RyaW5nW119IExpc3Qgb2YgYWdyZWVkIFVSTHNcbiAgICAgICAgICovXG4gICAgICAgIG9uRmluaXNoZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIC8vIHVybCAtPiBib29sZWFuXG4gICAgICAgICAgICBhZ3JlZWRVcmxzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgcHJvcHMuYWdyZWVkVXJscykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hZ3JlZWRVcmxzW3VybF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uQ2FuY2VsQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25GaW5pc2hlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgX29uTmV4dENsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQodHJ1ZSwgT2JqZWN0LmtleXModGhpcy5zdGF0ZS5hZ3JlZWRVcmxzKS5maWx0ZXIoKHVybCkgPT4gdGhpcy5zdGF0ZS5hZ3JlZWRVcmxzW3VybF0pKTtcbiAgICB9XG5cbiAgICBfbmFtZUZvclNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlLCBob3N0KSB7XG4gICAgICAgIHN3aXRjaCAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgU0VSVklDRV9UWVBFUy5JUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gPGRpdj57X3QoXCJJZGVudGl0eSBTZXJ2ZXJcIil9PGJyIC8+KHtob3N0fSk8L2Rpdj47XG4gICAgICAgICAgICBjYXNlIFNFUlZJQ0VfVFlQRVMuSU06XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxkaXY+e190KFwiSW50ZWdyYXRpb24gTWFuYWdlclwiKX08YnIgLz4oe2hvc3R9KTwvZGl2PjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zdW1tYXJ5Rm9yU2VydmljZVR5cGUoc2VydmljZVR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTRVJWSUNFX1RZUEVTLklTOlxuICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICB7X3QoXCJGaW5kIG90aGVycyBieSBwaG9uZSBvciBlbWFpbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgIHtfdChcIkJlIGZvdW5kIGJ5IHBob25lIG9yIGVtYWlsXCIpfVxuICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgIGNhc2UgU0VSVklDRV9UWVBFUy5JTTpcbiAgICAgICAgICAgICAgICByZXR1cm4gPGRpdj5cbiAgICAgICAgICAgICAgICAgICAge190KFwiVXNlIGJvdHMsIGJyaWRnZXMsIHdpZGdldHMgYW5kIHN0aWNrZXIgcGFja3NcIil9XG4gICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uVGVybXNDaGVja2JveENoYW5nZSA9ICh1cmwsIGNoZWNrZWQpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhZ3JlZWRVcmxzOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlLmFncmVlZFVybHMsIHsgW3VybF06IGNoZWNrZWQgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgQmFzZURpYWxvZyA9IHNkay5nZXRDb21wb25lbnQoJ3ZpZXdzLmRpYWxvZ3MuQmFzZURpYWxvZycpO1xuICAgICAgICBjb25zdCBEaWFsb2dCdXR0b25zID0gc2RrLmdldENvbXBvbmVudCgndmlld3MuZWxlbWVudHMuRGlhbG9nQnV0dG9ucycpO1xuXG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwb2xpY2llc0FuZFNlcnZpY2Ugb2YgdGhpcy5wcm9wcy5wb2xpY2llc0FuZFNlcnZpY2VQYWlycykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQmFzZVVybCA9IHVybC5wYXJzZShwb2xpY2llc0FuZFNlcnZpY2Uuc2VydmljZS5iYXNlVXJsKTtcblxuICAgICAgICAgICAgY29uc3QgcG9saWN5VmFsdWVzID0gT2JqZWN0LnZhbHVlcyhwb2xpY2llc0FuZFNlcnZpY2UucG9saWNpZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2xpY3lWYWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtRG9jID0gcG9saWN5VmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1zTGFuZyA9IHBpY2tCZXN0TGFuZ3VhZ2UoT2JqZWN0LmtleXModGVybURvYykuZmlsdGVyKChrKSA9PiBrICE9PSAndmVyc2lvbicpKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VydmljZU5hbWU7XG4gICAgICAgICAgICAgICAgbGV0IHN1bW1hcnk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWUgPSB0aGlzLl9uYW1lRm9yU2VydmljZVR5cGUocG9saWNpZXNBbmRTZXJ2aWNlLnNlcnZpY2Uuc2VydmljZVR5cGUsIHBhcnNlZEJhc2VVcmwuaG9zdCk7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSB0aGlzLl9zdW1tYXJ5Rm9yU2VydmljZVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llc0FuZFNlcnZpY2Uuc2VydmljZS5zZXJ2aWNlVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3dzLnB1c2goPHRyIGtleT17dGVybURvY1t0ZXJtc0xhbmddLnVybH0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJteF9UZXJtc0RpYWxvZ19zZXJ2aWNlXCI+e3NlcnZpY2VOYW1lfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJteF9UZXJtc0RpYWxvZ19zdW1tYXJ5XCI+e3N1bW1hcnl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt0ZXJtRG9jW3Rlcm1zTGFuZ10ubmFtZX0gPGEgcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e3Rlcm1Eb2NbdGVybXNMYW5nXS51cmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfVGVybXNEaWFsb2dfbGlua1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PFRlcm1zQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybD17dGVybURvY1t0ZXJtc0xhbmddLnVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLl9vblRlcm1zQ2hlY2tib3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtCb29sZWFuKHRoaXMuc3RhdGUuYWdyZWVkVXJsc1t0ZXJtRG9jW3Rlcm1zTGFuZ10udXJsXSl9XG4gICAgICAgICAgICAgICAgICAgIC8+PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhbGwgdGhlIGRvY3VtZW50cyBmb3IgYXQgbGVhc3Qgb25lIHNlcnZpY2UgaGF2ZSBiZWVuIGNoZWNrZWQsIHdlIGNhbiBlbmFibGVcbiAgICAgICAgLy8gdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgICAgbGV0IGVuYWJsZVN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBvbGljaWVzQW5kU2VydmljZSBvZiB0aGlzLnByb3BzLnBvbGljaWVzQW5kU2VydmljZVBhaXJzKSB7XG4gICAgICAgICAgICBsZXQgZG9jc0FncmVlZEZvclNlcnZpY2UgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXJtcyBvZiBPYmplY3QudmFsdWVzKHBvbGljaWVzQW5kU2VydmljZS5wb2xpY2llcykpIHtcbiAgICAgICAgICAgICAgICBsZXQgZG9jQWdyZWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsYW5nIG9mIE9iamVjdC5rZXlzKHRlcm1zKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFuZyA9PT0gJ3ZlcnNpb24nKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuYWdyZWVkVXJsc1t0ZXJtc1tsYW5nXS51cmxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NBZ3JlZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvY0FncmVlZCkge1xuICAgICAgICAgICAgICAgICAgICArK2RvY3NBZ3JlZWRGb3JTZXJ2aWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb2NzQWdyZWVkRm9yU2VydmljZSA9PT0gT2JqZWN0LmtleXMocG9saWNpZXNBbmRTZXJ2aWNlLnBvbGljaWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVTdWJtaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCYXNlRGlhbG9nXG4gICAgICAgICAgICAgICAgZml4ZWRXaWR0aD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZD17dGhpcy5fb25DYW5jZWxDbGlja31cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJUZXJtcyBvZiBTZXJ2aWNlXCIpfVxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZD0nbXhfRGlhbG9nX2NvbnRlbnQnXG4gICAgICAgICAgICAgICAgaGFzQ2FuY2VsPXtmYWxzZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSdteF9EaWFsb2dfY29udGVudCc+XG4gICAgICAgICAgICAgICAgICAgIDxwPntfdChcIlRvIGNvbnRpbnVlIHlvdSBuZWVkIHRvIGFjY2VwdCB0aGUgdGVybXMgb2YgdGhpcyBzZXJ2aWNlLlwiKX08L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm14X1Rlcm1zRGlhbG9nX3Rlcm1zVGFibGVcIj48dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwibXhfVGVybXNEaWFsb2dfdGVybXNUYWJsZUhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57X3QoXCJTZXJ2aWNlXCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPntfdChcIlN1bW1hcnlcIil9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e190KFwiRG9jdW1lbnRcIil9PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e190KFwiQWNjZXB0XCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jvd3N9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+PC90YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxEaWFsb2dCdXR0b25zIHByaW1hcnlCdXR0b249e190KCdOZXh0Jyl9XG4gICAgICAgICAgICAgICAgICAgIGhhc0NhbmNlbD17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9e3RoaXMuX29uQ2FuY2VsQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIG9uUHJpbWFyeUJ1dHRvbkNsaWNrPXt0aGlzLl9vbk5leHRDbGlja31cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeURpc2FibGVkPXshZW5hYmxlU3VibWl0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0Jhc2VEaWFsb2c+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19