summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules-available/locationinfo/inc/locationinfo.inc.php37
-rw-r--r--modules-available/locationinfo/inc/locationinfohooks.inc.php9
-rw-r--r--modules-available/locationinfo/page.inc.php8
3 files changed, 39 insertions, 15 deletions
diff --git a/modules-available/locationinfo/inc/locationinfo.inc.php b/modules-available/locationinfo/inc/locationinfo.inc.php
index 1165164d..a46208c6 100644
--- a/modules-available/locationinfo/inc/locationinfo.inc.php
+++ b/modules-available/locationinfo/inc/locationinfo.inc.php
@@ -237,4 +237,41 @@ class LocationInfo
return '';
}
+
+ /**
+ * Transform legacy url filter config if found, remove no-op filter setups.
+ * @param array $config The configuration array to be cleaned up. By reference.
+ */
+ public static function cleanupUrlFilter(array &$config): void
+ {
+ // First, simple trimming of white-space around the list, and making sure the keys exist
+ $config['blacklist'] = trim($config['blacklist'] ?? '');
+ $config['whitelist'] = trim($config['whitelist'] ?? '');
+ if (empty($config['blacklist']) && empty($config['whitelist'])) {
+ // Mangle non-upgraded configurations: They only have one list and a bool specifying if it's a black- or whitelist
+ if (!empty($config['urllist'])) {
+ if ($config['iswhitelist'] ?? false) {
+ $config['whitelist'] = str_replace(' ', "\n", $config['urllist']);
+ } else {
+ $config['blacklist'] = str_replace(' ', "\n", $config['urllist']);
+ }
+ unset($config['urllist'], $config['iswhitelist']);
+ }
+ } elseif ((empty($config['blacklist']) || self::isAnyUrlMatch($config['blacklist']))
+ && self::isAnyUrlMatch($config['whitelist'])) {
+ // Blocking everything/nothing and allowing everything is a no-op for all three browsers, so clear both lists
+ $config['blacklist'] = '';
+ $config['whitelist'] = '';
+ }
+ }
+
+ /**
+ * Check if the given pattern would be interpreted as matching any URL.
+ * @param string $url The URL to check
+ */
+ private static function isAnyUrlMatch(string $url): bool
+ {
+ return $url === '*' || $url === '*://*' || $url === '*://*/' || $url === '*://*/*';
+ }
+
}
diff --git a/modules-available/locationinfo/inc/locationinfohooks.inc.php b/modules-available/locationinfo/inc/locationinfohooks.inc.php
index 175afbd2..ac8beab9 100644
--- a/modules-available/locationinfo/inc/locationinfohooks.inc.php
+++ b/modules-available/locationinfo/inc/locationinfohooks.inc.php
@@ -29,14 +29,7 @@ class LocationInfoHooks
ConfigHolder::add('SLX_BROWSER_RELOAD_SECS', $data['reload-minutes'] * 60);
}
ConfigHolder::add('SLX_BROWSER_URL', $data['url']);
- // Mangle non-upgraded panels
- if (empty($data['blacklist']) && $data['whitelist'] === '*' && !empty($data['urllist'])) {
- if ($data['iswhitelist']) {
- $data['whitelist'] = str_replace(' ', "\n", $data['urllist']);
- } else {
- $data['blacklist'] = str_replace(' ', "\n", $data['urllist']);
- }
- }
+ LocationInfo::cleanupUrlFilter($data);
ConfigHolder::add('SLX_BROWSER_WHITELIST', self::mangleList($data['whitelist']));
ConfigHolder::add('SLX_BROWSER_BLACKLIST', self::mangleList($data['blacklist']));
// Additionally, update runmode "isclient" flag depending on whether split-login is allowed or not
diff --git a/modules-available/locationinfo/page.inc.php b/modules-available/locationinfo/page.inc.php
index 7e19bfbc..1a58131f 100644
--- a/modules-available/locationinfo/page.inc.php
+++ b/modules-available/locationinfo/page.inc.php
@@ -999,13 +999,7 @@ class Page_LocationInfo extends Page
}
}
- if (empty($config['blacklist']) && $config['whitelist'] === '*' && !empty($config['urllist'])) {
- if ($config['iswhitelist']) {
- $config['whitelist'] = str_replace(' ', "\n", $config['urllist']);
- } else {
- $config['blacklist'] = str_replace(' ', "\n", $config['urllist']);
- }
- }
+ LocationInfo::cleanupUrlFilter($config);
Render::addTemplate('page-config-panel-url', array(
'new' => $id === 'new',