UNPKG

matrix-react-sdk

Version:
140 lines (119 loc) 11.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _SettingsHandler = _interopRequireDefault(require("./SettingsHandler")); var _SettingLevel = require("../SettingLevel"); /* Copyright 2017 Travis Ralston Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /** * Gets and sets settings at the "room-device" level for the current device in a particular * room. */ class RoomDeviceSettingsHandler extends _SettingsHandler.default { constructor(watchers /*: WatchManager*/ ) { super(); this.watchers /*:: */ = watchers /*:: */ ; } getValue(settingName /*: string*/ , roomId /*: string*/ ) /*: any*/ { // Special case blacklist setting to use legacy values if (settingName === "blacklistUnverifiedDevices") { const value = this.read("mx_local_settings"); if (value && value['blacklistUnverifiedDevicesPerRoom']) { return value['blacklistUnverifiedDevicesPerRoom'][roomId]; } } const value = this.read(this.getKey(settingName, roomId)); if (value) return value.value; return null; } setValue(settingName /*: string*/ , roomId /*: string*/ , newValue /*: any*/ ) /*: Promise<void>*/ { // Special case blacklist setting for legacy structure if (settingName === "blacklistUnverifiedDevices") { let value = this.read("mx_local_settings"); if (!value) value = {}; if (!value["blacklistUnverifiedDevicesPerRoom"]) value["blacklistUnverifiedDevicesPerRoom"] = {}; value["blacklistUnverifiedDevicesPerRoom"][roomId] = newValue; localStorage.setItem("mx_local_settings", JSON.stringify(value)); this.watchers.notifyUpdate(settingName, roomId, _SettingLevel.SettingLevel.ROOM_DEVICE, newValue); return Promise.resolve(); } if (newValue === null) { localStorage.removeItem(this.getKey(settingName, roomId)); } else { newValue = JSON.stringify({ value: newValue }); localStorage.setItem(this.getKey(settingName, roomId), newValue); } this.watchers.notifyUpdate(settingName, roomId, _SettingLevel.SettingLevel.ROOM_DEVICE, newValue); return Promise.resolve(); } canSetValue(settingName /*: string*/ , roomId /*: string*/ ) /*: boolean*/ { return true; // It's their device, so they should be able to } isSupported() /*: boolean*/ { return localStorage !== undefined && localStorage !== null; } read(key /*: string*/ ) /*: any*/ { const rawValue = localStorage.getItem(key); if (!rawValue) return null; return JSON.parse(rawValue); } getKey(settingName /*: string*/ , roomId /*: string*/ ) /*: string*/ { return "mx_setting_" + settingName + "_" + roomId; } } exports.default = RoomDeviceSettingsHandler; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXR0aW5ncy9oYW5kbGVycy9Sb29tRGV2aWNlU2V0dGluZ3NIYW5kbGVyLnRzIl0sIm5hbWVzIjpbIlJvb21EZXZpY2VTZXR0aW5nc0hhbmRsZXIiLCJTZXR0aW5nc0hhbmRsZXIiLCJjb25zdHJ1Y3RvciIsIndhdGNoZXJzIiwiZ2V0VmFsdWUiLCJzZXR0aW5nTmFtZSIsInJvb21JZCIsInZhbHVlIiwicmVhZCIsImdldEtleSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5vdGlmeVVwZGF0ZSIsIlNldHRpbmdMZXZlbCIsIlJPT01fREVWSUNFIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZW1vdmVJdGVtIiwiY2FuU2V0VmFsdWUiLCJpc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImtleSIsInJhd1ZhbHVlIiwiZ2V0SXRlbSIsInBhcnNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFpQkE7O0FBQ0E7O0FBbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTUEseUJBQU4sU0FBd0NDLHdCQUF4QyxDQUF3RDtBQUNuRUMsRUFBQUEsV0FBVyxDQUFTQztBQUFUO0FBQUEsSUFBaUM7QUFDeEM7QUFEd0MsU0FBeEJBO0FBQXdCO0FBQUEsTUFBeEJBO0FBQXdCO0FBQUE7QUFFM0M7O0FBRU1DLEVBQUFBLFFBQVAsQ0FBZ0JDO0FBQWhCO0FBQUEsSUFBcUNDO0FBQXJDO0FBQUE7QUFBQTtBQUEwRDtBQUN0RDtBQUNBLFFBQUlELFdBQVcsS0FBSyw0QkFBcEIsRUFBa0Q7QUFDOUMsWUFBTUUsS0FBSyxHQUFHLEtBQUtDLElBQUwsQ0FBVSxtQkFBVixDQUFkOztBQUNBLFVBQUlELEtBQUssSUFBSUEsS0FBSyxDQUFDLG1DQUFELENBQWxCLEVBQXlEO0FBQ3JELGVBQU9BLEtBQUssQ0FBQyxtQ0FBRCxDQUFMLENBQTJDRCxNQUEzQyxDQUFQO0FBQ0g7QUFDSjs7QUFFRCxVQUFNQyxLQUFLLEdBQUcsS0FBS0MsSUFBTCxDQUFVLEtBQUtDLE1BQUwsQ0FBWUosV0FBWixFQUF5QkMsTUFBekIsQ0FBVixDQUFkO0FBQ0EsUUFBSUMsS0FBSixFQUFXLE9BQU9BLEtBQUssQ0FBQ0EsS0FBYjtBQUNYLFdBQU8sSUFBUDtBQUNIOztBQUVNRyxFQUFBQSxRQUFQLENBQWdCTDtBQUFoQjtBQUFBLElBQXFDQztBQUFyQztBQUFBLElBQXFESztBQUFyRDtBQUFBO0FBQUE7QUFBbUY7QUFDL0U7QUFDQSxRQUFJTixXQUFXLEtBQUssNEJBQXBCLEVBQWtEO0FBQzlDLFVBQUlFLEtBQUssR0FBRyxLQUFLQyxJQUFMLENBQVUsbUJBQVYsQ0FBWjtBQUNBLFVBQUksQ0FBQ0QsS0FBTCxFQUFZQSxLQUFLLEdBQUcsRUFBUjtBQUNaLFVBQUksQ0FBQ0EsS0FBSyxDQUFDLG1DQUFELENBQVYsRUFBaURBLEtBQUssQ0FBQyxtQ0FBRCxDQUFMLEdBQTZDLEVBQTdDO0FBQ2pEQSxNQUFBQSxLQUFLLENBQUMsbUNBQUQsQ0FBTCxDQUEyQ0QsTUFBM0MsSUFBcURLLFFBQXJEO0FBQ0FDLE1BQUFBLFlBQVksQ0FBQ0MsT0FBYixDQUFxQixtQkFBckIsRUFBMENDLElBQUksQ0FBQ0MsU0FBTCxDQUFlUixLQUFmLENBQTFDO0FBQ0EsV0FBS0osUUFBTCxDQUFjYSxZQUFkLENBQTJCWCxXQUEzQixFQUF3Q0MsTUFBeEMsRUFBZ0RXLDJCQUFhQyxXQUE3RCxFQUEwRVAsUUFBMUU7QUFDQSxhQUFPUSxPQUFPLENBQUNDLE9BQVIsRUFBUDtBQUNIOztBQUVELFFBQUlULFFBQVEsS0FBSyxJQUFqQixFQUF1QjtBQUNuQkMsTUFBQUEsWUFBWSxDQUFDUyxVQUFiLENBQXdCLEtBQUtaLE1BQUwsQ0FBWUosV0FBWixFQUF5QkMsTUFBekIsQ0FBeEI7QUFDSCxLQUZELE1BRU87QUFDSEssTUFBQUEsUUFBUSxHQUFHRyxJQUFJLENBQUNDLFNBQUwsQ0FBZTtBQUFDUixRQUFBQSxLQUFLLEVBQUVJO0FBQVIsT0FBZixDQUFYO0FBQ0FDLE1BQUFBLFlBQVksQ0FBQ0MsT0FBYixDQUFxQixLQUFLSixNQUFMLENBQVlKLFdBQVosRUFBeUJDLE1BQXpCLENBQXJCLEVBQXVESyxRQUF2RDtBQUNIOztBQUVELFNBQUtSLFFBQUwsQ0FBY2EsWUFBZCxDQUEyQlgsV0FBM0IsRUFBd0NDLE1BQXhDLEVBQWdEVywyQkFBYUMsV0FBN0QsRUFBMEVQLFFBQTFFO0FBQ0EsV0FBT1EsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDSDs7QUFFTUUsRUFBQUEsV0FBUCxDQUFtQmpCO0FBQW5CO0FBQUEsSUFBd0NDO0FBQXhDO0FBQUE7QUFBQTtBQUFpRTtBQUM3RCxXQUFPLElBQVAsQ0FENkQsQ0FDaEQ7QUFDaEI7O0FBRU1pQixFQUFBQSxXQUFQO0FBQUE7QUFBOEI7QUFDMUIsV0FBT1gsWUFBWSxLQUFLWSxTQUFqQixJQUE4QlosWUFBWSxLQUFLLElBQXREO0FBQ0g7O0FBRU9KLEVBQUFBLElBQVIsQ0FBYWlCO0FBQWI7QUFBQTtBQUFBO0FBQStCO0FBQzNCLFVBQU1DLFFBQVEsR0FBR2QsWUFBWSxDQUFDZSxPQUFiLENBQXFCRixHQUFyQixDQUFqQjtBQUNBLFFBQUksQ0FBQ0MsUUFBTCxFQUFlLE9BQU8sSUFBUDtBQUNmLFdBQU9aLElBQUksQ0FBQ2MsS0FBTCxDQUFXRixRQUFYLENBQVA7QUFDSDs7QUFFT2pCLEVBQUFBLE1BQVIsQ0FBZUo7QUFBZjtBQUFBLElBQW9DQztBQUFwQztBQUFBO0FBQUE7QUFBNEQ7QUFDeEQsV0FBTyxnQkFBZ0JELFdBQWhCLEdBQThCLEdBQTlCLEdBQW9DQyxNQUEzQztBQUNIOztBQTFEa0UiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTcgVHJhdmlzIFJhbHN0b25cbkNvcHlyaWdodCAyMDE5LCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFNldHRpbmdzSGFuZGxlciBmcm9tIFwiLi9TZXR0aW5nc0hhbmRsZXJcIjtcbmltcG9ydCB7IFNldHRpbmdMZXZlbCB9IGZyb20gXCIuLi9TZXR0aW5nTGV2ZWxcIjtcbmltcG9ydCB7IFdhdGNoTWFuYWdlciB9IGZyb20gXCIuLi9XYXRjaE1hbmFnZXJcIjtcblxuLyoqXG4gKiBHZXRzIGFuZCBzZXRzIHNldHRpbmdzIGF0IHRoZSBcInJvb20tZGV2aWNlXCIgbGV2ZWwgZm9yIHRoZSBjdXJyZW50IGRldmljZSBpbiBhIHBhcnRpY3VsYXJcbiAqIHJvb20uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb21EZXZpY2VTZXR0aW5nc0hhbmRsZXIgZXh0ZW5kcyBTZXR0aW5nc0hhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgd2F0Y2hlcnM6IFdhdGNoTWFuYWdlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShzZXR0aW5nTmFtZTogc3RyaW5nLCByb29tSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBibGFja2xpc3Qgc2V0dGluZyB0byB1c2UgbGVnYWN5IHZhbHVlc1xuICAgICAgICBpZiAoc2V0dGluZ05hbWUgPT09IFwiYmxhY2tsaXN0VW52ZXJpZmllZERldmljZXNcIikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWQoXCJteF9sb2NhbF9zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZVsnYmxhY2tsaXN0VW52ZXJpZmllZERldmljZXNQZXJSb29tJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbJ2JsYWNrbGlzdFVudmVyaWZpZWREZXZpY2VzUGVyUm9vbSddW3Jvb21JZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZCh0aGlzLmdldEtleShzZXR0aW5nTmFtZSwgcm9vbUlkKSk7XG4gICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmFsdWUoc2V0dGluZ05hbWU6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGJsYWNrbGlzdCBzZXR0aW5nIGZvciBsZWdhY3kgc3RydWN0dXJlXG4gICAgICAgIGlmIChzZXR0aW5nTmFtZSA9PT0gXCJibGFja2xpc3RVbnZlcmlmaWVkRGV2aWNlc1wiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnJlYWQoXCJteF9sb2NhbF9zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHZhbHVlID0ge307XG4gICAgICAgICAgICBpZiAoIXZhbHVlW1wiYmxhY2tsaXN0VW52ZXJpZmllZERldmljZXNQZXJSb29tXCJdKSB2YWx1ZVtcImJsYWNrbGlzdFVudmVyaWZpZWREZXZpY2VzUGVyUm9vbVwiXSA9IHt9O1xuICAgICAgICAgICAgdmFsdWVbXCJibGFja2xpc3RVbnZlcmlmaWVkRGV2aWNlc1BlclJvb21cIl1bcm9vbUlkXSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJteF9sb2NhbF9zZXR0aW5nc1wiLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgdGhpcy53YXRjaGVycy5ub3RpZnlVcGRhdGUoc2V0dGluZ05hbWUsIHJvb21JZCwgU2V0dGluZ0xldmVsLlJPT01fREVWSUNFLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0S2V5KHNldHRpbmdOYW1lLCByb29tSWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gSlNPTi5zdHJpbmdpZnkoe3ZhbHVlOiBuZXdWYWx1ZX0pO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRLZXkoc2V0dGluZ05hbWUsIHJvb21JZCksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2F0Y2hlcnMubm90aWZ5VXBkYXRlKHNldHRpbmdOYW1lLCByb29tSWQsIFNldHRpbmdMZXZlbC5ST09NX0RFVklDRSwgbmV3VmFsdWUpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhblNldFZhbHVlKHNldHRpbmdOYW1lOiBzdHJpbmcsIHJvb21JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBJdCdzIHRoZWlyIGRldmljZSwgc28gdGhleSBzaG91bGQgYmUgYWJsZSB0b1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZSAhPT0gdW5kZWZpbmVkICYmIGxvY2FsU3RvcmFnZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmICghcmF3VmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRLZXkoc2V0dGluZ05hbWU6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJteF9zZXR0aW5nX1wiICsgc2V0dGluZ05hbWUgKyBcIl9cIiArIHJvb21JZDtcbiAgICB9XG59XG4iXX0=