Make blacklistUnverifiedDevices override the level order

Signed-off-by: Travis Ralston <travpc@gmail.com>
This commit is contained in:
Travis Ralston 2017-11-08 17:41:32 -07:00
parent c7d8f3931f
commit f7da5836e1
5 changed files with 26 additions and 24 deletions

View file

@ -70,6 +70,11 @@ export const SETTINGS = {
//
// // Optional settings controller. See SettingsController for more information.
// controller: new MySettingController(),
//
// // Optional flag to make supportedLevels be respected as the order to handle
// // settings. The first element is treated as "most preferred". The "default"
// // level is always appended to the end.
// supportedLevelsAreOrdered: false,
// },
"feature_groups": {
isFeature: true,
@ -197,7 +202,10 @@ export const SETTINGS = {
default: 200,
},
"blacklistUnverifiedDevices": {
supportedLevels: ['device', 'room-device'],
// We specifically want to have room-device > device so that users may set a device default
// with a per-room override.
supportedLevels: ['room-device', 'device'],
supportedLevelsAreOrdered: true,
displayName: {
"default": _td('Never send encrypted messages to unverified devices from this device'),
"room-device": _td('Never send encrypted messages to unverified devices in this room from this device'),

View file

@ -191,14 +191,18 @@ export default class SettingsStore {
* @return {*} The value, or null if not found.
*/
static getValueAt(level, settingName, roomId = null, explicit = false, excludeDefault = false) {
const minIndex = LEVEL_ORDER.indexOf(level);
if (minIndex === -1) throw new Error("Level " + level + " is not prioritized");
// Verify that the setting is actually a setting
if (!SETTINGS[settingName]) {
throw new Error("Setting '" + settingName + "' does not appear to be a setting.");
}
const setting = SETTINGS[settingName];
const levelOrder = (setting.supportedLevelsAreOrdered ? setting.supportedLevels : LEVEL_ORDER);
if (!levelOrder.includes("default")) levelOrder.push("default"); // always include default
const minIndex = levelOrder.indexOf(level);
if (minIndex === -1) throw new Error("Level " + level + " is not prioritized");
if (SettingsStore.isFeature(settingName)) {
const configValue = SettingsStore._getFeatureState(settingName);
if (configValue === "enable") return true;
@ -215,10 +219,10 @@ export default class SettingsStore {
return SettingsStore._tryControllerOverride(settingName, level, roomId, value);
}
for (let i = minIndex; i < LEVEL_ORDER.length; i++) {
const handler = handlers[LEVEL_ORDER[i]];
for (let i = minIndex; i < levelOrder.length; i++) {
const handler = handlers[levelOrder[i]];
if (!handler) continue;
if (excludeDefault && LEVEL_ORDER[i] === "default") continue;
if (excludeDefault && levelOrder[i] === "default") continue;
const value = handler.getValue(settingName, roomId);
if (value === null || value === undefined) continue;