diff --git a/lib/SimpleSAML/Bindings/SAML20/HTTPPost.php b/lib/SimpleSAML/Bindings/SAML20/HTTPPost.php index 33c2a00a95d141a48d3d95a77ada00e19a71be90..0482bb065dd7c534da7f5e897d5cd9329ef9387d 100644 --- a/lib/SimpleSAML/Bindings/SAML20/HTTPPost.php +++ b/lib/SimpleSAML/Bindings/SAML20/HTTPPost.php @@ -12,7 +12,8 @@ */ require_once('SimpleSAML/Configuration.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); + require_once('SimpleSAML/XML/SAML20/AuthnResponse.php'); require_once('SimpleSAML/XHTML/Template.php'); @@ -25,7 +26,7 @@ class SimpleSAML_Bindings_SAML20_HTTPPost { private $configuration = null; private $metadata = null; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/Bindings/SAML20/HTTPRedirect.php b/lib/SimpleSAML/Bindings/SAML20/HTTPRedirect.php index 8d5fc5e367f969678019dccd72a4ed7fea2c8851..6d777b639150eba3cb45a7b46dc760a916f78f48 100644 --- a/lib/SimpleSAML/Bindings/SAML20/HTTPRedirect.php +++ b/lib/SimpleSAML/Bindings/SAML20/HTTPRedirect.php @@ -13,7 +13,7 @@ require_once('SimpleSAML/Configuration.php'); require_once('SimpleSAML/Utilities.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); require_once('SimpleSAML/XHTML/Template.php'); @@ -25,7 +25,7 @@ class SimpleSAML_Bindings_SAML20_HTTPRedirect { private $configuration = null; private $metadata = null; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php b/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php index e12b54da125b242d236e4ffa8b4f467ea5dff04f..3b200430a8c6e3b434de4aa704ab6f25446ac74d 100644 --- a/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php +++ b/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php @@ -12,7 +12,8 @@ */ require_once('SimpleSAML/Configuration.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); + require_once('SimpleSAML/XML/Shib13/AuthnResponse.php'); /** @@ -23,7 +24,7 @@ class SimpleSAML_Bindings_Shib13_HTTPPost { private $configuration = null; private $metadata = null; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php b/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php index ed9b9660bc64b22dfc4ea841b50f1501b498fcd9..38881163c5ce747a63745fead5961b825cdc4bdc 100644 --- a/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php +++ b/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php @@ -15,11 +15,11 @@ require_once('SimpleSAML/Utilities.php'); /** * Configuration of SimpleSAMLphp */ -class SimpleSAML_Metadata_MetaDataStorageHandler { +abstract class SimpleSAML_Metadata_MetaDataStorageHandler { - private $metadata = null; - private $hostmap = null; + protected $metadata = null; + protected $hostmap = null; /* This static variable contains a reference to the current @@ -86,15 +86,15 @@ class SimpleSAML_Metadata_MetaDataStorageHandler { if($handler === 'flatfile') { - require_once('SimpleSAML/Metadata/MetaDataHandlerFlatfile.php'); - $sh = new SimpleSAML_Metadata_MetaDataHandlerFlatfile(); + require_once('SimpleSAML/Metadata/MetaDataStorageHandlerFlatfile.php'); + $sh = new SimpleSAML_Metadata_MetaDataStorageHandlerFlatfile(); } else { throw new Exception('Invalid value for the [metadata.handler] configuration option. Unknown handler: ' . $handler); } /* Set the session handler. */ - self::$sessionHandler = $sh; + self::$metadataHandler = $sh; } diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatfile.php b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatfile.php index 1ea953467aa5e9a61942bb775bccba15635df75a..0547541368c2c0c02248b3714a8cd940b6893b23 100644 --- a/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatfile.php +++ b/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatfile.php @@ -11,11 +11,12 @@ require_once('SimpleSAML/Configuration.php'); require_once('SimpleSAML/Utilities.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); /** * Configuration of SimpleSAMLphp */ -class SimpleSAML_XML_MetaDataStore { +class SimpleSAML_Metadata_MetaDataStorageHandlerFlatFile extends SimpleSAML_Metadata_MetaDataStorageHandler { @@ -39,8 +40,12 @@ class SimpleSAML_XML_MetaDataStore { throw new Exception('Trying to load illegal set of Meta data [' . $set . ']'); } - $metadatasetfile = $this->configuration->getBaseDir() . '/' . - $this->configuration->getValue('metadatadir') . '/' . $set . '.php'; + /* Get the configuration. */ + $config = SimpleSAML_Configuration::getInstance(); + assert($config instanceof SimpleSAML_Configuration); + + $metadatasetfile = $config->getBaseDir() . '/' . + $config->getValue('metadatadir') . '/' . $set . '.php'; if (!file_exists($metadatasetfile)) { diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php index 8a30040f396390a3fe85deb2f1b782c3355ffc28..8d55afbada2cfd34e80f4e81b8bf406d0b202495 100644 --- a/lib/SimpleSAML/Utilities.php +++ b/lib/SimpleSAML/Utilities.php @@ -117,6 +117,50 @@ class SimpleSAML_Utilities { return $uniqueid; } + public static function array_values_equals($array, $equalsvalue) { + $foundkeys = array(); + foreach ($array AS $key => $value) { + if ($value === $equalsvalue) $foundkeys[] = $key; + } + return $foundkeys; + } + + public static function checkAssocArrayRules($target, $required, $optional = array()) { + + $results = array( + 'required.found' => array(), + 'required.notfound' => array(), + 'optional.found' => array(), + 'optional.notfound' => array(), + 'leftovers' => array() + ); + + foreach ($target AS $key => $value) { + if(in_array($key, $required)) { + $results['required.found'][$key] = $value; + } elseif (in_array($key, $optional)) { + $results['optional.found'][$key] = $value; + } else { + $results['leftovers'][$key] = $value; + } + } + + foreach ($required AS $key) { + if (!array_key_exists($key, $target)) { + $results['required.notfound'][] = $key; + } + } + + foreach ($optional AS $key) { + if (!array_key_exists($key, $target)) { + $results['optional.notfound'][] = $key; + } + } + return $results; + } + + + /* This function dumps a backtrace to the error log. * diff --git a/lib/SimpleSAML/XML/AuthnResponse.php b/lib/SimpleSAML/XML/AuthnResponse.php index c2cd28d46996773fe9ce9b4a54b5b67c3d5c4e73..faeef7be4bebf5075435490d8f0ad3cba626adbd 100644 --- a/lib/SimpleSAML/XML/AuthnResponse.php +++ b/lib/SimpleSAML/XML/AuthnResponse.php @@ -14,7 +14,7 @@ require_once('SimpleSAML/Configuration.php'); require_once('SimpleSAML/Session.php'); require_once('SimpleSAML/Utilities.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); require_once('xmlseclibs.php'); @@ -34,7 +34,7 @@ abstract class SimpleSAML_XML_AuthnResponse { const PROTOCOL = 'urn:oasis:names:tc:SAML:2.0'; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/XML/SAML20/AuthnRequest.php b/lib/SimpleSAML/XML/SAML20/AuthnRequest.php index eb203f915543cacf04f725bbc6b868c6e92d1bfa..b804e00713fa8aaa80f6e030ab26fc19e6763e7f 100644 --- a/lib/SimpleSAML/XML/SAML20/AuthnRequest.php +++ b/lib/SimpleSAML/XML/SAML20/AuthnRequest.php @@ -12,7 +12,7 @@ */ require_once('SimpleSAML/Configuration.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); /** * Configuration of SimpleSAMLphp @@ -30,7 +30,7 @@ class SimpleSAML_XML_SAML20_AuthnRequest { const PROTOCOL = 'urn:oasis:names:tc:SAML:2.0'; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/XML/SAML20/AuthnResponse.php b/lib/SimpleSAML/XML/SAML20/AuthnResponse.php index db76521b96aae4e2a0ba003fc3fba043e2043dc7..8f0390f6d59af6f79f8517e0a10c8e9cfc744e0b 100644 --- a/lib/SimpleSAML/XML/SAML20/AuthnResponse.php +++ b/lib/SimpleSAML/XML/SAML20/AuthnResponse.php @@ -14,7 +14,7 @@ require_once('SimpleSAML/Configuration.php'); require_once('SimpleSAML/Session.php'); require_once('SimpleSAML/Utilities.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); require_once('SimpleSAML/XML/AuthnResponse.php'); require_once('xmlseclibs.php'); @@ -46,7 +46,7 @@ class SimpleSAML_XML_SAML20_AuthnResponse extends SimpleSAML_XML_AuthnResponse { - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/XML/SAML20/LogoutRequest.php b/lib/SimpleSAML/XML/SAML20/LogoutRequest.php index 9900daee9b8b3c06f882ca6a54793b39f2f1b490..a4bbd294a872ca14b4b4e8ac6cc041f2c178f9e9 100644 --- a/lib/SimpleSAML/XML/SAML20/LogoutRequest.php +++ b/lib/SimpleSAML/XML/SAML20/LogoutRequest.php @@ -10,7 +10,7 @@ */ require_once('SimpleSAML/Configuration.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); /** * Configuration of SimpleSAMLphp @@ -27,7 +27,7 @@ class SimpleSAML_XML_SAML20_LogoutRequest { const PROTOCOL = 'urn:oasis:names:tc:SAML:2.0'; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; } diff --git a/lib/SimpleSAML/XML/SAML20/LogoutResponse.php b/lib/SimpleSAML/XML/SAML20/LogoutResponse.php index f209333c554990c870196ce4cb86eb79d25a3e8c..f30f87a23c51da3eab8affce2a1a24d9f2954dbc 100644 --- a/lib/SimpleSAML/XML/SAML20/LogoutResponse.php +++ b/lib/SimpleSAML/XML/SAML20/LogoutResponse.php @@ -14,7 +14,7 @@ require_once('SimpleSAML/Configuration.php'); require_once('SimpleSAML/Session.php'); require_once('SimpleSAML/Utilities.php'); -require_once('SimpleSAML/XML/MetaDataStore.php'); +require_once('SimpleSAML/Metadata/MetaDataStorageHandler.php'); require_once('xmlseclibs.php'); @@ -32,7 +32,7 @@ class SimpleSAML_XML_SAML20_LogoutResponse { const PROTOCOL = 'urn:oasis:names:tc:SAML:2.0'; - function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_XML_MetaDataStore $metadatastore) { + function __construct(SimpleSAML_Configuration $configuration, SimpleSAML_Metadata_MetaDataStorageHandler $metadatastore) { $this->configuration = $configuration; $this->metadata = $metadatastore; }