diff --git a/lib/SimpleSAML/Configuration.php b/lib/SimpleSAML/Configuration.php index 54a6d9edbd0002e4735a6c58cda9942476e1eb6f..1355d8b93dcedcefc23604d198b208de546e1ccc 100644 --- a/lib/SimpleSAML/Configuration.php +++ b/lib/SimpleSAML/Configuration.php @@ -4,11 +4,33 @@ declare(strict_types=1); namespace SimpleSAML; +use Exception; +use ParseError; use SAML2\Constants; use SimpleSAML\Assert\Assert; use SimpleSAML\Assert\AssertionFailedException; use SimpleSAML\Error; use SimpleSAML\Utils; +use Symfony\Component\Filesystem\Filesystem; + +use function array_key_exists; +use function array_keys; +use function dirname; +use function implode; +use function interface_exists; +use function in_array; +use function is_array; +use function is_bool; +use function is_int; +use function is_string; +use function ob_end_clean; +use function ob_get_length; +use function ob_start; +use function preg_match; +use function preg_replace; +use function rtrim; +use function substr; +use function var_export; /** * Configuration of SimpleSAMLphp @@ -106,7 +128,8 @@ class Configuration implements Utils\ClearableState return self::$loadedConfigs[$filename]; } - if (file_exists($filename)) { + $fileSystem = new Filesystem(); + if ($fileSystem->exists($filename)) { /** @psalm-var mixed $config */ $config = 'UNINITIALIZED'; @@ -115,7 +138,7 @@ class Configuration implements Utils\ClearableState if (interface_exists('Throwable', false)) { try { require($filename); - } catch (\ParseError $e) { + } catch (ParseError $e) { self::$loadedConfigs[$filename] = self::loadFromArray([], '[ARRAY]', 'simplesaml'); throw new Error\ConfigurationError($e->getMessage(), $filename, []); } @@ -204,7 +227,7 @@ class Configuration implements Utils\ClearableState ): void { if (!array_key_exists($configSet, self::$configDirs)) { if ($configSet !== 'simplesaml') { - throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.'); + throw new Exception('Configuration set \'' . $configSet . '\' not initialized.'); } else { self::$configDirs['simplesaml'] = dirname(dirname(dirname(__FILE__))) . '/config'; } @@ -232,7 +255,7 @@ class Configuration implements Utils\ClearableState ): Configuration { if (!array_key_exists($configSet, self::$configDirs)) { if ($configSet !== 'simplesaml') { - throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.'); + throw new Exception('Configuration set \'' . $configSet . '\' not initialized.'); } else { $configUtils = new Utils\Config(); self::$configDirs['simplesaml'] = $configUtils->getConfigDir(); @@ -262,7 +285,7 @@ class Configuration implements Utils\ClearableState ): Configuration { if (!array_key_exists($configSet, self::$configDirs)) { if ($configSet !== 'simplesaml') { - throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.'); + throw new Exception('Configuration set \'' . $configSet . '\' not initialized.'); } else { $configUtils = new Utils\Config(); self::$configDirs['simplesaml'] = $configUtils->getConfigDir(); @@ -1113,7 +1136,7 @@ class Configuration implements Utils\ClearableState case 'saml20-idp-remote:ArtifactResolutionService': return Constants::BINDING_SOAP; default: - throw new \Exception('Missing default binding for ' . $endpointType . ' in ' . $set); + throw new Exception('Missing default binding for ' . $endpointType . ' in ' . $set); } } @@ -1142,7 +1165,7 @@ class Configuration implements Utils\ClearableState // for backwards-compatibility $eps = [$eps]; } elseif (!is_array($eps)) { - throw new \Exception($loc . ': Expected array or string.'); + throw new Exception($loc . ': Expected array or string.'); } @@ -1160,32 +1183,32 @@ class Configuration implements Utils\ClearableState $ep['ResponseLocation'] = $responseLocation; } } elseif (!is_array($ep)) { - throw new \Exception($iloc . ': Expected a string or an array.'); + throw new Exception($iloc . ': Expected a string or an array.'); } if (!array_key_exists('Location', $ep)) { - throw new \Exception($iloc . ': Missing Location.'); + throw new Exception($iloc . ': Missing Location.'); } if (!is_string($ep['Location'])) { - throw new \Exception($iloc . ': Location must be a string.'); + throw new Exception($iloc . ': Location must be a string.'); } if (!array_key_exists('Binding', $ep)) { - throw new \Exception($iloc . ': Missing Binding.'); + throw new Exception($iloc . ': Missing Binding.'); } if (!is_string($ep['Binding'])) { - throw new \Exception($iloc . ': Binding must be a string.'); + throw new Exception($iloc . ': Binding must be a string.'); } if (array_key_exists('ResponseLocation', $ep)) { if (!is_string($ep['ResponseLocation'])) { - throw new \Exception($iloc . ': ResponseLocation must be a string.'); + throw new Exception($iloc . ': ResponseLocation must be a string.'); } } if (array_key_exists('index', $ep)) { if (!is_int($ep['index'])) { - throw new \Exception($iloc . ': index must be an integer.'); + throw new Exception($iloc . ': index must be an integer.'); } } } @@ -1223,7 +1246,7 @@ class Configuration implements Utils\ClearableState if ($default === self::REQUIRED_OPTION) { $loc = $this->location . '[' . var_export($endpointType, true) . ']:'; - throw new \Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.'); + throw new Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.'); } return $default; @@ -1253,7 +1276,7 @@ class Configuration implements Utils\ClearableState if ($default === self::REQUIRED_OPTION) { $loc = $this->location . '[' . var_export($endpointType, true) . ']:'; - throw new \Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.'); + throw new Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.'); } return $default; @@ -1368,7 +1391,7 @@ class Configuration implements Utils\ClearableState $data = @file_get_contents($file); if ($data === false) { - throw new \Exception( + throw new Exception( $this->location . ': Unable to load certificate/public key from file "' . $file . '".' ); } @@ -1376,7 +1399,7 @@ class Configuration implements Utils\ClearableState // extract certificate data (if this is a certificate) $pattern = '/^-----BEGIN CERTIFICATE-----([^-]*)^-----END CERTIFICATE-----/m'; if (!preg_match($pattern, $data, $matches)) { - throw new \SimpleSAML\Error\Exception( + throw new Error\Exception( $this->location . ': Could not find PEM encoded certificate in "' . $file . '".' ); } @@ -1393,7 +1416,7 @@ class Configuration implements Utils\ClearableState ], ]; } elseif ($required === true) { - throw new \SimpleSAML\Error\Exception($this->location . ': Missing certificate in metadata.'); + throw new Error\Exception($this->location . ': Missing certificate in metadata.'); } else { return []; }