UNPKG

matrix-react-sdk

Version:
245 lines (212 loc) 32.7 kB
"use strict"; 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 _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _languageHandler = require("../../../languageHandler"); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _Field = _interopRequireDefault(require("../elements/Field")); var sdk = _interopRequireWildcard(require("../../../index")); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _Media = require("../../../customisations/Media"); var _dec, _class, _class2, _temp; let RoomProfileSettings = ( // TODO: Merge with ProfileSettings? _dec = (0, _replaceableComponent.replaceableComponent)("views.room_settings.RoomProfileSettings"), _dec(_class = (_temp = _class2 = class RoomProfileSettings extends _react.default.Component { constructor(props) { super(props); (0, _defineProperty2.default)(this, "_uploadAvatar", () => { this._avatarUpload.current.click(); }); (0, _defineProperty2.default)(this, "_removeAvatar", () => { // clear file upload field so same file can be selected this._avatarUpload.current.value = ""; this.setState({ avatarUrl: null, avatarFile: null, enableProfileSave: true }); }); (0, _defineProperty2.default)(this, "_cancelProfileChanges", async e => { e.stopPropagation(); e.preventDefault(); if (!this.state.enableProfileSave) return; this.setState({ enableProfileSave: false, displayName: this.state.originalDisplayName, topic: this.state.originalTopic, avatarUrl: this.state.originalAvatarUrl, avatarFile: null }); }); (0, _defineProperty2.default)(this, "_saveProfile", async e => { e.stopPropagation(); e.preventDefault(); if (!this.state.enableProfileSave) return; this.setState({ enableProfileSave: false }); const client = _MatrixClientPeg.MatrixClientPeg.get(); const newState = {}; // TODO: What do we do about errors? const displayName = this.state.displayName.trim(); if (this.state.originalDisplayName !== this.state.displayName) { await client.setRoomName(this.props.roomId, displayName); newState.originalDisplayName = displayName; newState.displayName = displayName; } if (this.state.avatarFile) { const uri = await client.uploadContent(this.state.avatarFile); await client.sendStateEvent(this.props.roomId, 'm.room.avatar', { url: uri }, ''); newState.avatarUrl = (0, _Media.mediaFromMxc)(uri).getSquareThumbnailHttp(96); newState.originalAvatarUrl = newState.avatarUrl; newState.avatarFile = null; } else if (this.state.originalAvatarUrl !== this.state.avatarUrl) { await client.sendStateEvent(this.props.roomId, 'm.room.avatar', {}, ''); } if (this.state.originalTopic !== this.state.topic) { await client.setRoomTopic(this.props.roomId, this.state.topic); newState.originalTopic = this.state.topic; } this.setState(newState); }); (0, _defineProperty2.default)(this, "_onDisplayNameChanged", e => { this.setState({ displayName: e.target.value }); if (this.state.originalDisplayName === e.target.value) { this.setState({ enableProfileSave: false }); } else { this.setState({ enableProfileSave: true }); } }); (0, _defineProperty2.default)(this, "_onTopicChanged", e => { this.setState({ topic: e.target.value }); if (this.state.originalTopic === e.target.value) { this.setState({ enableProfileSave: false }); } else { this.setState({ enableProfileSave: true }); } }); (0, _defineProperty2.default)(this, "_onAvatarChanged", e => { if (!e.target.files || !e.target.files.length) { this.setState({ avatarUrl: this.state.originalAvatarUrl, avatarFile: null, enableProfileSave: false }); return; } const file = e.target.files[0]; const reader = new FileReader(); reader.onload = ev => { this.setState({ avatarUrl: ev.target.result, avatarFile: file, enableProfileSave: true }); }; reader.readAsDataURL(file); }); const _client = _MatrixClientPeg.MatrixClientPeg.get(); const room = _client.getRoom(props.roomId); if (!room) throw new Error("Expected a room for ID: ", props.roomId); const avatarEvent = room.currentState.getStateEvents("m.room.avatar", ""); let avatarUrl = avatarEvent && avatarEvent.getContent() ? avatarEvent.getContent()["url"] : null; if (avatarUrl) avatarUrl = (0, _Media.mediaFromMxc)(avatarUrl).getSquareThumbnailHttp(96); const topicEvent = room.currentState.getStateEvents("m.room.topic", ""); const topic = topicEvent && topicEvent.getContent() ? topicEvent.getContent()['topic'] : ''; const nameEvent = room.currentState.getStateEvents('m.room.name', ''); const name = nameEvent && nameEvent.getContent() ? nameEvent.getContent()['name'] : ''; this.state = { originalDisplayName: name, displayName: name, originalAvatarUrl: avatarUrl, avatarUrl: avatarUrl, avatarFile: null, originalTopic: topic, topic: topic, enableProfileSave: false, canSetName: room.currentState.maySendStateEvent('m.room.name', _client.getUserId()), canSetTopic: room.currentState.maySendStateEvent('m.room.topic', _client.getUserId()), canSetAvatar: room.currentState.maySendStateEvent('m.room.avatar', _client.getUserId()) }; this._avatarUpload = /*#__PURE__*/(0, _react.createRef)(); } render() { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); const AvatarSetting = sdk.getComponent('settings.AvatarSetting'); let profileSettingsButtons; if (this.state.canSetName || this.state.canSetTopic || this.state.canSetAvatar) { profileSettingsButtons = /*#__PURE__*/_react.default.createElement("div", { className: "mx_ProfileSettings_buttons" }, /*#__PURE__*/_react.default.createElement(AccessibleButton, { onClick: this._cancelProfileChanges, kind: "link", disabled: !this.state.enableProfileSave }, (0, _languageHandler._t)("Cancel")), /*#__PURE__*/_react.default.createElement(AccessibleButton, { onClick: this._saveProfile, kind: "primary", disabled: !this.state.enableProfileSave }, (0, _languageHandler._t)("Save"))); } return /*#__PURE__*/_react.default.createElement("form", { onSubmit: this._saveProfile, autoComplete: "off", noValidate: true, className: "mx_ProfileSettings_profileForm" }, /*#__PURE__*/_react.default.createElement("input", { type: "file", ref: this._avatarUpload, className: "mx_ProfileSettings_avatarUpload", onChange: this._onAvatarChanged, accept: "image/*" }), /*#__PURE__*/_react.default.createElement("div", { className: "mx_ProfileSettings_profile" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_ProfileSettings_controls" }, /*#__PURE__*/_react.default.createElement(_Field.default, { label: (0, _languageHandler._t)("Room Name"), type: "text", value: this.state.displayName, autoComplete: "off", onChange: this._onDisplayNameChanged, disabled: !this.state.canSetName }), /*#__PURE__*/_react.default.createElement(_Field.default, { className: "mx_ProfileSettings_controls_topic", id: "profileTopic", label: (0, _languageHandler._t)("Room Topic"), disabled: !this.state.canSetTopic, type: "text", value: this.state.topic, autoComplete: "off", onChange: this._onTopicChanged, element: "textarea" })), /*#__PURE__*/_react.default.createElement(AvatarSetting, { avatarUrl: this.state.avatarUrl, avatarName: this.state.displayName || this.props.roomId, avatarAltText: (0, _languageHandler._t)("Room avatar"), uploadAvatar: this.state.canSetAvatar ? this._uploadAvatar : undefined, removeAvatar: this.state.canSetAvatar ? this._removeAvatar : undefined })), profileSettingsButtons); } }, (0, _defineProperty2.default)(_class2, "propTypes", { roomId: _propTypes.default.string.isRequired }), _temp)) || _class); exports.default = RoomProfileSettings; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21fc2V0dGluZ3MvUm9vbVByb2ZpbGVTZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJSb29tUHJvZmlsZVNldHRpbmdzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2F2YXRhclVwbG9hZCIsImN1cnJlbnQiLCJjbGljayIsInZhbHVlIiwic2V0U3RhdGUiLCJhdmF0YXJVcmwiLCJhdmF0YXJGaWxlIiwiZW5hYmxlUHJvZmlsZVNhdmUiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdGF0ZSIsImRpc3BsYXlOYW1lIiwib3JpZ2luYWxEaXNwbGF5TmFtZSIsInRvcGljIiwib3JpZ2luYWxUb3BpYyIsIm9yaWdpbmFsQXZhdGFyVXJsIiwiY2xpZW50IiwiTWF0cml4Q2xpZW50UGVnIiwiZ2V0IiwibmV3U3RhdGUiLCJ0cmltIiwic2V0Um9vbU5hbWUiLCJyb29tSWQiLCJ1cmkiLCJ1cGxvYWRDb250ZW50Iiwic2VuZFN0YXRlRXZlbnQiLCJ1cmwiLCJnZXRTcXVhcmVUaHVtYm5haWxIdHRwIiwic2V0Um9vbVRvcGljIiwidGFyZ2V0IiwiZmlsZXMiLCJsZW5ndGgiLCJmaWxlIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2IiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsInJvb20iLCJnZXRSb29tIiwiRXJyb3IiLCJhdmF0YXJFdmVudCIsImN1cnJlbnRTdGF0ZSIsImdldFN0YXRlRXZlbnRzIiwiZ2V0Q29udGVudCIsInRvcGljRXZlbnQiLCJuYW1lRXZlbnQiLCJuYW1lIiwiY2FuU2V0TmFtZSIsIm1heVNlbmRTdGF0ZUV2ZW50IiwiZ2V0VXNlcklkIiwiY2FuU2V0VG9waWMiLCJjYW5TZXRBdmF0YXIiLCJyZW5kZXIiLCJBY2Nlc3NpYmxlQnV0dG9uIiwic2RrIiwiZ2V0Q29tcG9uZW50IiwiQXZhdGFyU2V0dGluZyIsInByb2ZpbGVTZXR0aW5nc0J1dHRvbnMiLCJfY2FuY2VsUHJvZmlsZUNoYW5nZXMiLCJfc2F2ZVByb2ZpbGUiLCJfb25BdmF0YXJDaGFuZ2VkIiwiX29uRGlzcGxheU5hbWVDaGFuZ2VkIiwiX29uVG9waWNDaGFuZ2VkIiwiX3VwbG9hZEF2YXRhciIsInVuZGVmaW5lZCIsIl9yZW1vdmVBdmF0YXIiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBZ0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0lBSXFCQSxtQixLQUZyQjtPQUNDLGdEQUFxQix5Q0FBckIsQyxtQ0FBRCxNQUNxQkEsbUJBRHJCLFNBQ2lEQyxlQUFNQyxTQUR2RCxDQUNpRTtBQUs3REMsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBRGUseURBa0NILE1BQU07QUFDbEIsV0FBS0MsYUFBTCxDQUFtQkMsT0FBbkIsQ0FBMkJDLEtBQTNCO0FBQ0gsS0FwQ2tCO0FBQUEseURBc0NILE1BQU07QUFDbEI7QUFDQSxXQUFLRixhQUFMLENBQW1CQyxPQUFuQixDQUEyQkUsS0FBM0IsR0FBbUMsRUFBbkM7QUFDQSxXQUFLQyxRQUFMLENBQWM7QUFDVkMsUUFBQUEsU0FBUyxFQUFFLElBREQ7QUFFVkMsUUFBQUEsVUFBVSxFQUFFLElBRkY7QUFHVkMsUUFBQUEsaUJBQWlCLEVBQUU7QUFIVCxPQUFkO0FBS0gsS0E5Q2tCO0FBQUEsaUVBZ0RLLE1BQU9DLENBQVAsSUFBYTtBQUNqQ0EsTUFBQUEsQ0FBQyxDQUFDQyxlQUFGO0FBQ0FELE1BQUFBLENBQUMsQ0FBQ0UsY0FBRjtBQUVBLFVBQUksQ0FBQyxLQUFLQyxLQUFMLENBQVdKLGlCQUFoQixFQUFtQztBQUNuQyxXQUFLSCxRQUFMLENBQWM7QUFDVkcsUUFBQUEsaUJBQWlCLEVBQUUsS0FEVDtBQUVWSyxRQUFBQSxXQUFXLEVBQUUsS0FBS0QsS0FBTCxD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TUFBQSxRQUFRLEVBQUUsS0FBS29ELHFCQUxuQjtBQU1JLE1BQUEsUUFBUSxFQUFFLENBQUMsS0FBS3JELEtBQUwsQ0FBV3VDO0FBTjFCLE1BREosZUFTSSw2QkFBQyxjQUFEO0FBQ0ksTUFBQSxTQUFTLEVBQUMsbUNBRGQ7QUFFSSxNQUFBLEVBQUUsRUFBQyxjQUZQO0FBR0ksTUFBQSxLQUFLLEVBQUUseUJBQUcsWUFBSCxDQUhYO0FBSUksTUFBQSxRQUFRLEVBQUUsQ0FBQyxLQUFLdkMsS0FBTCxDQUFXMEMsV0FKMUI7QUFLSSxNQUFBLElBQUksRUFBQyxNQUxUO0FBTUksTUFBQSxLQUFLLEVBQUUsS0FBSzFDLEtBQUwsQ0FBV0csS0FOdEI7QUFPSSxNQUFBLFlBQVksRUFBQyxLQVBqQjtBQVFJLE1BQUEsUUFBUSxFQUFFLEtBQUttRCxlQVJuQjtBQVNJLE1BQUEsT0FBTyxFQUFDO0FBVFosTUFUSixDQURKLGVBc0JJLDZCQUFDLGFBQUQ7QUFDSSxNQUFBLFNBQVMsRUFBRSxLQUFLdEQsS0FBTCxDQUFXTixTQUQxQjtBQUVJLE1BQUEsVUFBVSxFQUFFLEtBQUtNLEtBQUwsQ0FBV0MsV0FBWCxJQUEwQixLQUFLYixLQUFMLENBQVd3QixNQUZyRDtBQUdJLE1BQUEsYUFBYSxFQUFFLHlCQUFHLGFBQUgsQ0FIbkI7QUFJSSxNQUFBLFlBQVksRUFBRSxLQUFLWixLQUFMLENBQVcyQyxZQUFYLEdBQTBCLEtBQUtZLGFBQS9CLEdBQStDQyxTQUpqRTtBQUtJLE1BQUEsWUFBWSxFQUFFLEtBQUt4RCxLQUFMLENBQVcyQyxZQUFYLEdBQTBCLEtBQUtjLGFBQS9CLEdBQStDRDtBQUxqRSxNQXRCSixDQWJKLEVBMENNUCxzQkExQ04sQ0FESjtBQThDSDs7QUEzTjRELEMsc0RBQzFDO0FBQ2ZyQyxFQUFBQSxNQUFNLEVBQUU4QyxtQkFBVUMsTUFBVixDQUFpQkM7QUFEVixDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE5IE5ldyBWZWN0b3IgTHRkXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHtfdH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHtNYXRyaXhDbGllbnRQZWd9IGZyb20gXCIuLi8uLi8uLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwiLi4vZWxlbWVudHMvRmllbGRcIjtcbmltcG9ydCAqIGFzIHNkayBmcm9tIFwiLi4vLi4vLi4vaW5kZXhcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuaW1wb3J0IHttZWRpYUZyb21NeGN9IGZyb20gXCIuLi8uLi8uLi9jdXN0b21pc2F0aW9ucy9NZWRpYVwiO1xuXG4vLyBUT0RPOiBNZXJnZSB3aXRoIFByb2ZpbGVTZXR0aW5ncz9cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLnJvb21fc2V0dGluZ3MuUm9vbVByb2ZpbGVTZXR0aW5nc1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm9vbVByb2ZpbGVTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgcm9vbUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBjb25zdCBjbGllbnQgPSBNYXRyaXhDbGllbnRQZWcuZ2V0KCk7XG4gICAgICAgIGNvbnN0IHJvb20gPSBjbGllbnQuZ2V0Um9vbShwcm9wcy5yb29tSWQpO1xuICAgICAgICBpZiAoIXJvb20pIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGEgcm9vbSBmb3IgSUQ6IFwiLCBwcm9wcy5yb29tSWQpO1xuXG4gICAgICAgIGNvbnN0IGF2YXRhckV2ZW50ID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoXCJtLnJvb20uYXZhdGFyXCIsIFwiXCIpO1xuICAgICAgICBsZXQgYXZhdGFyVXJsID0gYXZhdGFyRXZlbnQgJiYgYXZhdGFyRXZlbnQuZ2V0Q29udGVudCgpID8gYXZhdGFyRXZlbnQuZ2V0Q29udGVudCgpW1widXJsXCJdIDogbnVsbDtcbiAgICAgICAgaWYgKGF2YXRhclVybCkgYXZhdGFyVXJsID0gbWVkaWFGcm9tTXhjKGF2YXRhclVybCkuZ2V0U3F1YXJlVGh1bWJuYWlsSHR0cCg5Nik7XG5cbiAgICAgICAgY29uc3QgdG9waWNFdmVudCA9IHJvb20uY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKFwibS5yb29tLnRvcGljXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCB0b3BpYyA9IHRvcGljRXZlbnQgJiYgdG9waWNFdmVudC5nZXRDb250ZW50KCkgPyB0b3BpY0V2ZW50LmdldENvbnRlbnQoKVsndG9waWMnXSA6ICcnO1xuXG4gICAgICAgIGNvbnN0IG5hbWVFdmVudCA9IHJvb20uY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKCdtLnJvb20ubmFtZScsICcnKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG5hbWVFdmVudCAmJiBuYW1lRXZlbnQuZ2V0Q29udGVudCgpID8gbmFtZUV2ZW50LmdldENvbnRlbnQoKVsnbmFtZSddIDogJyc7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgICAgIG9yaWdpbmFsQXZhdGFyVXJsOiBhdmF0YXJVcmwsXG4gICAgICAgICAgICBhdmF0YXJVcmw6IGF2YXRhclVybCxcbiAgICAgICAgICAgIGF2YXRhckZpbGU6IG51bGwsXG4gICAgICAgICAgICBvcmlnaW5hbFRvcGljOiB0b3BpYyxcbiAgICAgICAgICAgIHRvcGljOiB0b3BpYyxcbiAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVTYXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhblNldE5hbWU6IHJvb20uY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KCdtLnJvb20ubmFtZScsIGNsaWVudC5nZXRVc2VySWQoKSksXG4gICAgICAgICAgICBjYW5TZXRUb3BpYzogcm9vbS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoJ20ucm9vbS50b3BpYycsIGNsaWVudC5nZXRVc2VySWQoKSksXG4gICAgICAgICAgICBjYW5TZXRBdmF0YXI6IHJvb20uY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KCdtLnJvb20uYXZhdGFyJywgY2xpZW50LmdldFVzZXJJZCgpKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9hdmF0YXJVcGxvYWQgPSBjcmVhdGVSZWYoKTtcbiAgICB9XG5cbiAgICBfdXBsb2FkQXZhdGFyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9hdmF0YXJVcGxvYWQuY3VycmVudC5jbGljaygpO1xuICAgIH07XG5cbiAgICBfcmVtb3ZlQXZhdGFyID0gKCkgPT4ge1xuICAgICAgICAvLyBjbGVhciBmaWxlIHVwbG9hZCBmaWVsZCBzbyBzYW1lIGZpbGUgY2FuIGJlIHNlbGVjdGVkXG4gICAgICAgIHRoaXMuX2F2YXRhclVwbG9hZC5jdXJyZW50LnZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhdmF0YXJVcmw6IG51bGwsXG4gICAgICAgICAgICBhdmF0YXJGaWxlOiBudWxsLFxuICAgICAgICAgICAgZW5hYmxlUHJvZmlsZVNhdmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY2FuY2VsUHJvZmlsZUNoYW5nZXMgPSBhc3luYyAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmVuYWJsZVByb2ZpbGVTYXZlKSByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZW5hYmxlUHJvZmlsZVNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuc3RhdGUub3JpZ2luYWxEaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHRvcGljOiB0aGlzLnN0YXRlLm9yaWdpbmFsVG9waWMsXG4gICAgICAgICAgICBhdmF0YXJVcmw6IHRoaXMuc3RhdGUub3JpZ2luYWxBdmF0YXJVcmwsXG4gICAgICAgICAgICBhdmF0YXJGaWxlOiBudWxsLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3NhdmVQcm9maWxlID0gYXN5bmMgKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5lbmFibGVQcm9maWxlU2F2ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtlbmFibGVQcm9maWxlU2F2ZTogZmFsc2V9KTtcblxuICAgICAgICBjb25zdCBjbGllbnQgPSBNYXRyaXhDbGllbnRQZWcuZ2V0KCk7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0ge307XG5cbiAgICAgICAgLy8gVE9ETzogV2hhdCBkbyB3ZSBkbyBhYm91dCBlcnJvcnM/XG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gdGhpcy5zdGF0ZS5kaXNwbGF5TmFtZS50cmltKCk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsRGlzcGxheU5hbWUgIT09IHRoaXMuc3RhdGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zZXRSb29tTmFtZSh0aGlzLnByb3BzLnJvb21JZCwgZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgbmV3U3RhdGUub3JpZ2luYWxEaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgbmV3U3RhdGUuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmF2YXRhckZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVyaSA9IGF3YWl0IGNsaWVudC51cGxvYWRDb250ZW50KHRoaXMuc3RhdGUuYXZhdGFyRmlsZSk7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2VuZFN0YXRlRXZlbnQodGhpcy5wcm9wcy5yb29tSWQsICdtLnJvb20uYXZhdGFyJywge3VybDogdXJpfSwgJycpO1xuICAgICAgICAgICAgbmV3U3RhdGUuYXZhdGFyVXJsID0gbWVkaWFGcm9tTXhjKHVyaSkuZ2V0U3F1YXJlVGh1bWJuYWlsSHR0cCg5Nik7XG4gICAgICAgICAgICBuZXdTdGF0ZS5vcmlnaW5hbEF2YXRhclVybCA9IG5ld1N0YXRlLmF2YXRhclVybDtcbiAgICAgICAgICAgIG5ld1N0YXRlLmF2YXRhckZpbGUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUub3JpZ2luYWxBdmF0YXJVcmwgIT09IHRoaXMuc3RhdGUuYXZhdGFyVXJsKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2VuZFN0YXRlRXZlbnQodGhpcy5wcm9wcy5yb29tSWQsICdtLnJvb20uYXZhdGFyJywge30sICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsVG9waWMgIT09IHRoaXMuc3RhdGUudG9waWMpIHtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zZXRSb29tVG9waWModGhpcy5wcm9wcy5yb29tSWQsIHRoaXMuc3RhdGUudG9waWMpO1xuICAgICAgICAgICAgbmV3U3RhdGUub3JpZ2luYWxUb3BpYyA9IHRoaXMuc3RhdGUudG9waWM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9O1xuXG4gICAgX29uRGlzcGxheU5hbWVDaGFuZ2VkID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGlzcGxheU5hbWU6IGUudGFyZ2V0LnZhbHVlfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsRGlzcGxheU5hbWUgPT09IGUudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlbmFibGVQcm9maWxlU2F2ZTogZmFsc2V9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2VuYWJsZVByb2ZpbGVTYXZlOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uVG9waWNDaGFuZ2VkID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dG9waWM6IGUudGFyZ2V0LnZhbHVlfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm9yaWdpbmFsVG9waWMgPT09IGUudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlbmFibGVQcm9maWxlU2F2ZTogZmFsc2V9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2VuYWJsZVByb2ZpbGVTYXZlOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uQXZhdGFyQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgICAgIGlmICghZS50YXJnZXQuZmlsZXMgfHwgIWUudGFyZ2V0LmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgYXZhdGFyVXJsOiB0aGlzLnN0YXRlLm9yaWdpbmFsQXZhdGFyVXJsLFxuICAgICAgICAgICAgICAgIGF2YXRhckZpbGU6IG51bGwsXG4gICAgICAgICAgICAgICAgZW5hYmxlUHJvZmlsZVNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXNbMF07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGF2YXRhclVybDogZXYudGFyZ2V0LnJlc3VsdCxcbiAgICAgICAgICAgICAgICBhdmF0YXJGaWxlOiBmaWxlLFxuICAgICAgICAgICAgICAgIGVuYWJsZVByb2ZpbGVTYXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IEFjY2Vzc2libGVCdXR0b24gPSBzZGsuZ2V0Q29tcG9uZW50KCdlbGVtZW50cy5BY2Nlc3NpYmxlQnV0dG9uJyk7XG4gICAgICAgIGNvbnN0IEF2YXRhclNldHRpbmcgPSBzZGsuZ2V0Q29tcG9uZW50KCdzZXR0aW5ncy5BdmF0YXJTZXR0aW5nJyk7XG5cbiAgICAgICAgbGV0IHByb2ZpbGVTZXR0aW5nc0J1dHRvbnM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY2FuU2V0TmFtZSB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5jYW5TZXRUb3BpYyB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5jYW5TZXRBdmF0YXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9maWxlU2V0dGluZ3NCdXR0b25zID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUHJvZmlsZVNldHRpbmdzX2J1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2NhbmNlbFByb2ZpbGVDaGFuZ2VzfVxuICAgICAgICAgICAgICAgICAgICAgICAga2luZD1cImxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLmVuYWJsZVByb2ZpbGVTYXZlfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJDYW5jZWxcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX3NhdmVQcm9maWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAga2luZD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLmVuYWJsZVByb2ZpbGVTYXZlfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJTYXZlXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e3RoaXMuX3NhdmVQcm9maWxlfVxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgbm9WYWxpZGF0ZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Qcm9maWxlU2V0dGluZ3NfcHJvZmlsZUZvcm1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5fYXZhdGFyVXBsb2FkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Qcm9maWxlU2V0dGluZ3NfYXZhdGFyVXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uQXZhdGFyQ2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Byb2ZpbGVTZXR0aW5nc19wcm9maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUHJvZmlsZVNldHRpbmdzX2NvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJSb29tIE5hbWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmRpc3BsYXlOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uRGlzcGxheU5hbWVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5jYW5TZXROYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1Byb2ZpbGVTZXR0aW5nc19jb250cm9sc190b3BpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9maWxlVG9waWNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcIlJvb20gVG9waWNcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLmNhblNldFRvcGljfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS50b3BpY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLl9vblRvcGljQ2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50PVwidGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxBdmF0YXJTZXR0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw9e3RoaXMuc3RhdGUuYXZhdGFyVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyTmFtZT17dGhpcy5zdGF0ZS5kaXNwbGF5TmFtZSB8fCB0aGlzLnByb3BzLnJvb21JZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhckFsdFRleHQ9e190KFwiUm9vbSBhdmF0YXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRBdmF0YXI9e3RoaXMuc3RhdGUuY2FuU2V0QXZhdGFyID8gdGhpcy5fdXBsb2FkQXZhdGFyIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXZhdGFyPXt0aGlzLnN0YXRlLmNhblNldEF2YXRhciA/IHRoaXMuX3JlbW92ZUF2YXRhciA6IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7IHByb2ZpbGVTZXR0aW5nc0J1dHRvbnMgfVxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==