Browse Source

whitelist: Do case-insensitive whitelist matching

Matching whitelisted bridges using a case-insensitive match makes
sense for following reasons:

- Wrong upper/lower case spelling in the whitelist is not easily
discovered. Example: Misspelling 'Youtube' as 'YouTube' will not
show the 'Youtube' bridge (while it is expected to show)

- Two bridges with the same name but different letter casing are
discouraged to prevent confusion and keep the project compatible
with Windows machines
logmanoriginal 6 years ago
parent
commit
84d2c02a09
2 changed files with 7 additions and 4 deletions
  1. 5 2
      index.php
  2. 2 2
      lib/Bridge.php

+ 5 - 2
index.php

@@ -119,6 +119,9 @@ try {
 		} else {
 			$whitelist_selection = Bridge::listBridges();
 		}
+
+		// Prepare for case-insensitive match
+		$whitelist_selection = array_map('strtolower', $whitelist_selection);
 	}
 
 	$action = filter_input(INPUT_GET, 'action');
@@ -140,7 +143,7 @@ try {
 		}
 
 		// whitelist control
-		if(!Bridge::isWhitelisted($whitelist_selection, $bridge)) {
+		if(!Bridge::isWhitelisted($whitelist_selection, strtolower($bridge))) {
 			throw new \HttpException('This bridge is not whitelisted', 401);
 			die;
 		}
@@ -246,7 +249,7 @@ EOD;
 		$inactiveBridges = '';
 		$bridgeList = Bridge::listBridges();
 		foreach($bridgeList as $bridgeName) {
-			if(Bridge::isWhitelisted($whitelist_selection, $bridgeName)) {
+			if(Bridge::isWhitelisted($whitelist_selection, strtolower($bridgeName))) {
 				echo displayBridgeCard($bridgeName, $formats);
 						$activeFoundBridgeCount++;
 			} elseif($showInactive) {

+ 2 - 2
lib/Bridge.php

@@ -94,8 +94,8 @@ EOD;
 	static public function isWhitelisted($whitelist, $name){
 		if(in_array($name, $whitelist)
 		|| in_array($name . '.php', $whitelist)
-		|| in_array($name . 'Bridge', $whitelist) // DEPRECATED
-		|| in_array($name . 'Bridge.php', $whitelist) // DEPRECATED
+		|| in_array($name . 'bridge', $whitelist) // DEPRECATED
+		|| in_array($name . 'bridge.php', $whitelist) // DEPRECATED
 		|| (count($whitelist) === 1 && trim($whitelist[0]) === '*')) {
 			return true;
 		} else {