diff --git a/actions/ConnectivityAction.php b/actions/ConnectivityAction.php index c11e6595..604b7806 100644 --- a/actions/ConnectivityAction.php +++ b/actions/ConnectivityAction.php @@ -37,12 +37,14 @@ class ConnectivityAction implements ActionInterface throw new \Exception('This action is only available in debug mode!'); } - if (!isset($request['bridge'])) { + $bridgeName = $request['bridge'] ?? null; + if (!$bridgeName) { return render_template('connectivity.html.php'); } - - $bridgeClassName = $this->bridgeFactory->createBridgeClassName($request['bridge']); - + $bridgeClassName = $this->bridgeFactory->createBridgeClassName($bridgeName); + if (!$bridgeClassName) { + throw new \Exception(sprintf('Bridge not found: %s', $bridgeName)); + } return $this->reportBridgeConnectivity($bridgeClassName); } diff --git a/actions/DisplayAction.php b/actions/DisplayAction.php index 129d4587..7b2efec1 100644 --- a/actions/DisplayAction.php +++ b/actions/DisplayAction.php @@ -33,9 +33,15 @@ class DisplayAction implements ActionInterface private function createResponse(array $request) { $bridgeFactory = new BridgeFactory(); - $bridgeClassName = $bridgeFactory->createBridgeClassName($request['bridge'] ?? ''); + $formatFactory = new FormatFactory(); + $bridgeName = $request['bridge'] ?? null; $format = $request['format'] ?? null; + + $bridgeClassName = $bridgeFactory->createBridgeClassName($bridgeName); + if (!$bridgeClassName) { + throw new \Exception(sprintf('Bridge not found: %s', $bridgeName)); + } if (!$format) { throw new \Exception('You must specify a format!'); } @@ -43,7 +49,6 @@ class DisplayAction implements ActionInterface throw new \Exception('This bridge is not whitelisted'); } - $formatFactory = new FormatFactory(); $format = $formatFactory->create($format); $bridge = $bridgeFactory->create($bridgeClassName); diff --git a/actions/SetBridgeCacheAction.php b/actions/SetBridgeCacheAction.php index a9a598bd..416f2378 100644 --- a/actions/SetBridgeCacheAction.php +++ b/actions/SetBridgeCacheAction.php @@ -23,7 +23,11 @@ class SetBridgeCacheAction implements ActionInterface $bridgeFactory = new BridgeFactory(); - $bridgeClassName = $bridgeFactory->createBridgeClassName($request['bridge'] ?? ''); + $bridgeName = $request['bridge'] ?? null; + $bridgeClassName = $bridgeFactory->createBridgeClassName($bridgeName); + if (!$bridgeClassName) { + throw new \Exception(sprintf('Bridge not found: %s', $bridgeName)); + } // whitelist control if (!$bridgeFactory->isEnabled($bridgeClassName)) { diff --git a/lib/BridgeFactory.php b/lib/BridgeFactory.php index db2c394a..63633f4a 100644 --- a/lib/BridgeFactory.php +++ b/lib/BridgeFactory.php @@ -23,7 +23,12 @@ final class BridgeFactory $this->enabledBridges = $this->bridgeClassNames; break; } - $this->enabledBridges[] = $this->createBridgeClassName($enabledBridge); + $bridgeClassName = $this->createBridgeClassName($enabledBridge); + if ($bridgeClassName) { + $this->enabledBridges[] = $bridgeClassName; + } else { + Logger::info(sprintf('Bridge not found: %s', $enabledBridge)); + } } } @@ -42,13 +47,10 @@ final class BridgeFactory $name = self::normalizeBridgeName($bridgeName); $namesLoweredCase = array_map('strtolower', $this->bridgeClassNames); $nameLoweredCase = strtolower($name); - if (! in_array($nameLoweredCase, $namesLoweredCase)) { - throw new \Exception(sprintf('Bridge name invalid: %s', $bridgeName)); + return null; } - $index = array_search($nameLoweredCase, $namesLoweredCase); - return $this->bridgeClassNames[$index]; }