Skip to content

Commit 4178b63

Browse files
committed
Add element registry
1 parent fc37e07 commit 4178b63

4 files changed

Lines changed: 209 additions & 4 deletions

File tree

composer.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"name": "simplesamlphp/saml2",
33
"description": "SAML2 PHP library from SimpleSAMLphp",
4+
"type": "simplesamlphp-xmlprovider",
45
"license": "LGPL-2.1-or-later",
56
"authors": [
67
{
@@ -30,10 +31,10 @@
3031
"psr/clock": "^1.0",
3132
"psr/http-message": "^2.0",
3233
"psr/log": "^2.0 || ^3.0",
33-
"simplesamlphp/assert": "^1.1",
34-
"simplesamlphp/xml-common": "^1.16",
35-
"simplesamlphp/xml-security": "v1.9.2",
36-
"simplesamlphp/xml-soap": "^1.4"
34+
"simplesamlphp/assert": "~1.3.1",
35+
"simplesamlphp/xml-common": "~1.18.0",
36+
"simplesamlphp/xml-security": "~1.9.5",
37+
"simplesamlphp/xml-soap": "~1.5.3"
3738
},
3839
"require-dev": {
3940
"ext-intl": "*",

src/XML/element.registry.php

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
return [
6+
'urn:oasis:names:tc:SAML:metadata:algsupport' => [
7+
'DigestMethod' => '\SimpleSAML\SAML2\XML\alg\DigestMethod',
8+
'SigningMethod' => '\SimpleSAML\SAML2\XML\alg\SigningMethod',
9+
],
10+
'urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp' => [
11+
'RelayState' => '\SimpleSAML\SAML2\XML\ecp\RelayState',
12+
'Request' => '\SimpleSAML\SAML2\XML\ecp\Request',
13+
'RequestAuthenticated' => '\SimpleSAML\SAML2\XML\ecp\RequestAuthenticated',
14+
'Response' => '\SimpleSAML\SAML2\XML\ecp\Response',
15+
'SubjectConfirmation' => '\SimpleSAML\SAML2\XML\ecp\SubjectConfirmation',
16+
],
17+
'http://eduid.cz/schema/metadata/1.0' => [
18+
'RepublishRequest' => '\SimpleSAML\SAML2\XML\emd\RepublishRequest',
19+
],
20+
'urn:oasis:names:tc:SAML:2.0:metadata' => [
21+
'AdditionalMetadataLocation' => '\SimpleSAML\SAML2\XML\md\AdditionalMetadataLocation',
22+
'AffiliateMember' => '\SimpleSAML\SAML2\XML\md\AffiliateMember',
23+
'AffiliationDescriptor' => '\SimpleSAML\SAML2\XML\md\AffiliationDescriptor',
24+
'AssertionIDRequestService' => '\SimpleSAML\SAML2\XML\md\AssertionIDRequestService',
25+
'AssertionConsumerService' => '\SimpleSAML\SAML2\XML\md\AssertionConsumerService',
26+
'ArtifactResolutionService' => '\SimpleSAML\SAML2\XML\md\ArtifactResolutionService',
27+
'AttributeAuthorityDescriptor' => '\SimpleSAML\SAML2\XML\md\AttributeAuthorityDescriptor',
28+
'AttributeConsumingService' => '\SimpleSAML\SAML2\XML\md\AttributeConsumingService',
29+
'AttributeProfile' => '\SimpleSAML\SAML2\XML\md\AttributeProfile',
30+
'AttributeService' => '\SimpleSAML\SAML2\XML\md\AttributeService',
31+
'AuthnAuthorityDescriptor' => '\SimpleSAML\SAML2\XML\md\AuthnAuthorityDescriptor',
32+
'AuthnQueryService' => '\SimpleSAML\SAML2\XML\md\AuthnQueryService',
33+
'AuthzService' => '\SimpleSAML\SAML2\XML\md\AuthzService',
34+
'Company' => '\SimpleSAML\SAML2\XML\md\Company',
35+
'ContactPerson' => '\SimpleSAML\SAML2\XML\md\ContactPerson',
36+
'EmailAddress' => '\SimpleSAML\SAML2\XML\md\EmailAddress',
37+
'EncryptionMethod' => '\SimpleSAML\SAML2\XML\md\EncryptionMethod',
38+
'EntitiesDescriptor' => '\SimpleSAML\SAML2\XML\md\EntitiesDescriptor',
39+
'EntityDescriptor' => '\SimpleSAML\SAML2\XML\md\EntityDescriptor',
40+
'Extensions' => '\SimpleSAML\SAML2\XML\md\Extensions',
41+
'GivenName' => '\SimpleSAML\SAML2\XML\md\GivenName',
42+
'IDPSSODescriptor' => '\SimpleSAML\SAML2\XML\md\IDPSSODescriptor',
43+
'KeyDescriptor' => '\SimpleSAML\SAML2\XML\md\KeyDescriptor',
44+
'ManageNameIDService' => '\SimpleSAML\SAML2\XML\md\ManageNameIDService',
45+
'NameIDFormat' => '\SimpleSAML\SAML2\XML\md\NameIDFormat',
46+
'NameIDMappingService' => '\SimpleSAML\SAML2\XML\md\NameIDMappingService',
47+
'Organization' => '\SimpleSAML\SAML2\XML\md\Organization',
48+
'OrganizationDisplayName' => '\SimpleSAML\SAML2\XML\md\OrganizationDisplayName',
49+
'OrganizationName' => '\SimpleSAML\SAML2\XML\md\OrganizationName',
50+
'OrganizationURL' => '\SimpleSAML\SAML2\XML\md\OrganizationURL',
51+
'PDPDescriptor' => '\SimpleSAML\SAML2\XML\md\PDPDescriptor',
52+
'RequestedAttribute' => '\SimpleSAML\SAML2\XML\md\RequestedAttribute',
53+
'RoleDescriptor' => '\SimpleSAML\SAML2\XML\md\AbstractRoleDescriptor',
54+
'ServiceDescription' => '\SimpleSAML\SAML2\XML\md\ServiceDescription',
55+
'ServiceName' => '\SimpleSAML\SAML2\XML\md\ServiceName',
56+
'SingleLogoutService' => '\SimpleSAML\SAML2\XML\md\SingleLogoutService',
57+
'SingleSignOnService' => '\SimpleSAML\SAML2\XML\md\SingleSignOnService',
58+
'SPSSODescriptor' => '\SimpleSAML\SAML2\XML\md\SPSSODescriptor',
59+
'SurName' => '\SimpleSAML\SAML2\XML\md\SurName',
60+
'TelephoneNumber' => '\SimpleSAML\SAML2\XML\md\TelephoneNumber',
61+
],
62+
'urn:oasis:names:tc:SAML:profiles:SSO:request-init' => [
63+
'RequestInitiator' => '\SimpleSAML\SAML2\XML\init\RequestInitiator',
64+
],
65+
'urn:oasis:names:tc:SAML:metadata:rpi' => [
66+
'Publication' => '\SimpleSAML\SAML2\XML\mdrpi\Publication',
67+
'PublicationInfo' => '\SimpleSAML\SAML2\XML\mdrpi\PublicationInfo',
68+
'PublicationPath' => '\SimpleSAML\SAML2\XML\mdrpi\PublicationPath',
69+
'RegistrationInfo' => '\SimpleSAML\SAML2\XML\mdrpi\RegistrationInfo',
70+
'RegistrationPolicy' => '\SimpleSAML\SAML2\XML\mdrpi\RegistrationPolicy',
71+
'UsagePolicy' => '\SimpleSAML\SAML2\XML\mdrpi\UsagePolicy',
72+
],
73+
'urn:oasis:names:tc:SAML:metadata:ui' => [
74+
'Description' => '\SimpleSAML\SAML2\XML\mdui\Description',
75+
'DiscoHints' => '\SimpleSAML\SAML2\XML\mdui\DiscoHints',
76+
'DisplayName' => '\SimpleSAML\SAML2\XML\mdui\DisplayName',
77+
'DomainHint' => '\SimpleSAML\SAML2\XML\mdui\DomainHint',
78+
'GeolocationHint' => '\SimpleSAML\SAML2\XML\mdui\GeolocationHint',
79+
'InformationURL' => '\SimpleSAML\SAML2\XML\mdui\InformationURL',
80+
'IPHint' => '\SimpleSAML\SAML2\XML\mdui\IPHint',
81+
'Keywords' => '\SimpleSAML\SAML2\XML\mdui\Keywords',
82+
'Logo' => '\SimpleSAML\SAML2\XML\mdui\Logo',
83+
'PrivacyStatementURL' => '\SimpleSAML\SAML2\XML\mdui\PrivacyStatementURL',
84+
'UIInfo' => '\SimpleSAML\SAML2\XML\mdui\UIInfo',
85+
],
86+
'urn:oasis:names:tc:SAML:metadata:attribute' => [
87+
'EntityAttributes' => '\SimpleSAML\SAML2\XML\mdattr\EntityAttributes',
88+
],
89+
'urn:mace:shibboleth:metadata:1.0' => [
90+
'KeyAuthority' => '\SimpleSAML\SAML2\XML\shibmd\KeyAuthority',
91+
'Scope' => '\SimpleSAML\SAML2\XML\shibmd\Scope',
92+
],
93+
'urn:oasis:names:tc:SAML:2.0:assertion' => [
94+
'Action' => '\SimpleSAML\SAML2\XML\saml\Action',
95+
'Advice' => '\SimpleSAML\SAML2\XML\saml\Advice',
96+
'Assertion' => '\SimpleSAML\SAML2\XML\saml\Assertion',
97+
'AssertionIDRef' => '\SimpleSAML\SAML2\XML\saml\AssertionIDRef',
98+
'AssertionURIRef' => '\SimpleSAML\SAML2\XML\saml\AssertionURIRef',
99+
'Attribute' => '\SimpleSAML\SAML2\XML\saml\Attribute',
100+
'AttributeStatement' => '\SimpleSAML\SAML2\XML\saml\AttributeStatement',
101+
'AttributeValue' => '\SimpleSAML\SAML2\XML\saml\AttributeValue',
102+
'Audience' => '\SimpleSAML\SAML2\XML\saml\Audience',
103+
'AudienceRestriction' => '\SimpleSAML\SAML2\XML\saml\AudienceRestriction',
104+
'AuthenticatingAuthority' => '\SimpleSAML\SAML2\XML\saml\AuthenticatingAuthority',
105+
'AuthnContext' => '\SimpleSAML\SAML2\XML\saml\AuthnContext',
106+
'AuthnContextClassRef' => '\SimpleSAML\SAML2\XML\saml\AuthnContextClassRef',
107+
'AuthnContextDecl' => '\SimpleSAML\SAML2\XML\saml\AuthnContextDecl',
108+
'AuthnContextDeclRef' => '\SimpleSAML\SAML2\XML\saml\AuthnContextDeclRef',
109+
'AuthnStatement' => '\SimpleSAML\SAML2\XML\saml\AuthnStatement',
110+
'AuthzDecisionStatement' => '\SimpleSAML\SAML2\XML\saml\AuthzDecisionStatement',
111+
'BaseID' => '\SimpleSAML\SAML2\XML\saml\AbstractBaseID',
112+
'Condition' => '\SimpleSAML\SAML2\XML\saml\AbstractCondition',
113+
'Conditions' => '\SimpleSAML\SAML2\XML\saml\Conditions',
114+
'EncryptedAssertion' => '\SimpleSAML\SAML2\XML\saml\EncryptedAssertion',
115+
'EncryptedAttribute' => '\SimpleSAML\SAML2\XML\saml\EncryptedAttribute',
116+
'EncryptedID' => '\SimpleSAML\SAML2\XML\saml\EncryptedID',
117+
'Evidence' => '\SimpleSAML\SAML2\XML\saml\Evidence',
118+
'Issuer' => '\SimpleSAML\SAML2\XML\saml\Issuer',
119+
'NameID' => '\SimpleSAML\SAML2\XML\saml\NameID',
120+
'OneTimeUse' => '\SimpleSAML\SAML2\XML\saml\OneTimeUse',
121+
'ProxyRestriction' => '\SimpleSAML\SAML2\XML\saml\ProxyRestriction',
122+
'Statement' => '\SimpleSAML\SAML2\XML\saml\AbstractStatement',
123+
'Subject' => '\SimpleSAML\SAML2\XML\saml\Subject',
124+
'SubjectConfirmation' => '\SimpleSAML\SAML2\XML\saml\SubjectConfirmation',
125+
'SubjectConfirmationData' => '\SimpleSAML\SAML2\XML\saml\SubjectConfirmationData',
126+
'SubjectLocality' => '\SimpleSAML\SAML2\XML\saml\SubjectLocality',
127+
],
128+
'urn:oasis:names:tc:SAML:2.0:protocol' => [
129+
'Artifact' => '\SimpleSAML\SAML2\XML\samlp\Artifact',
130+
'ArtifactResolve' => '\SimpleSAML\SAML2\XML\samlp\ArtifactResolve',
131+
'ArtifactResponse' => '\SimpleSAML\SAML2\XML\samlp\ArtifactResponse',
132+
'AssertionIDRequest' => '\SimpleSAML\SAML2\XML\samlp\AssertionIDRequest',
133+
'AttributeQuery' => '\SimpleSAML\SAML2\XML\samlp\AttributeQuery',
134+
'AuthnQuery' => '\SimpleSAML\SAML2\XML\samlp\AuthnQuery',
135+
'AuthnRequest' => '\SimpleSAML\SAML2\XML\samlp\AuthnRequest',
136+
'AuthzDecisionQuery' => '\SimpleSAML\SAML2\XML\samlp\AuthzDecisionQuery',
137+
'Extensions' => '\SimpleSAML\SAML2\XML\samlp\Extensions',
138+
'GetComplete' => '\SimpleSAML\SAML2\XML\samlp\GetComplete',
139+
'IDPEntry' => '\SimpleSAML\SAML2\XML\samlp\IDPEntry',
140+
'IDPList' => '\SimpleSAML\SAML2\XML\samlp\IDPList',
141+
'LogoutRequest' => '\SimpleSAML\SAML2\XML\samlp\LogoutRequest',
142+
'LogoutResponse' => '\SimpleSAML\SAML2\XML\samlp\LogoutResponse',
143+
// 'ManageNameIDRequest' => '\SimpleSAML\SAML2\XML\samlp\ManageNameIDRequest',
144+
// 'ManageNameIDResponse' => '\SimpleSAML\SAML2\XML\samlp\ManageNameIDResponse',
145+
'NameIDPolicy' => '\SimpleSAML\SAML2\XML\samlp\NameIDPolicy',
146+
// 'NewEncryptedID' => '\SimpleSAML\SAML2\XML\samlp\NewEncryptedID',
147+
// 'NewID' => '\SimpleSAML\SAML2\XML\samlp\NewID',
148+
'RequestedAuthnContext' => '\SimpleSAML\SAML2\XML\samlp\RequestedAuthnContext',
149+
'RequesterID' => '\SimpleSAML\SAML2\XML\samlp\RequesterID',
150+
'Response' => '\SimpleSAML\SAML2\XML\samlp\Response',
151+
'Scoping' => '\SimpleSAML\SAML2\XML\samlp\Scoping',
152+
'SessionIndex' => '\SimpleSAML\SAML2\XML\samlp\SessionIndex',
153+
'Status' => '\SimpleSAML\SAML2\XML\samlp\Status',
154+
'StatusCode' => '\SimpleSAML\SAML2\XML\samlp\StatusCode',
155+
'StatusDetail' => '\SimpleSAML\SAML2\XML\samlp\StatusDetail',
156+
'StatusMessage' => '\SimpleSAML\SAML2\XML\samlp\StatusMessage',
157+
// 'SubjectQuery' => '\SimpleSAML\SAML2\XML\samlp\SubjectQuery',
158+
// 'Terminate' => '\SimpleSAML\SAML2\XML\samlp\Terminate',
159+
],
160+
'urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol' => [
161+
'DiscoveryResponse' => '\SimpleSAML\SAML2\XML\idpdisc\DiscoveryResponse',
162+
],
163+
];
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace SimpleSAML\Test\SAML2\XML;
6+
7+
use PHPUnit\Framework\Attributes\Group;
8+
use PHPUnit\Framework\TestCase;
9+
10+
use function dirname;
11+
use function sprintf;
12+
13+
/**
14+
* Tests for element registry.
15+
*
16+
* @package simplesamlphp/saml2
17+
*/
18+
#[Group('utils')]
19+
final class ElementRegistryTest extends TestCase
20+
{
21+
/**
22+
* Test that the class-name can be resolved and it's localname matches.
23+
*/
24+
public function testElementRegistry(): void
25+
{
26+
$elementRegistry = dirname(__FILE__, 4) . '/src/XML/element.registry.php';
27+
$namespaces = include($elementRegistry);
28+
29+
foreach ($namespaces as $namespaceURI => $elements) {
30+
foreach ($elements as $localName => $fqdn) {
31+
$this->assertTrue(class_exists($fqdn), sprintf('Class \'%s\' could not be found.', $fqdn));
32+
$this->assertEquals($fqdn::getLocalName(), $localName);
33+
$this->assertEquals($fqdn::getNamespaceURI(), $namespaceURI);
34+
}
35+
}
36+
}
37+
}

tests/autoload.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Beste\Clock\LocalizedClock;
66
use SimpleSAML\SAML2\Compat\ContainerSingleton;
77
use SimpleSAML\SAML2\Compat\MockContainer;
8+
use SimpleSAML\XML\Registry\ElementRegistry;
89

910
// Load Composer autoloader
1011
require __DIR__ . '/../vendor/autoload.php';
@@ -16,3 +17,6 @@
1617
$container = new MockContainer();
1718
$container->setClock($systemClock);
1819
ContainerSingleton::setContainer($container);
20+
21+
$registry = ElementRegistry::getInstance();
22+
$registry->importFromFile(dirname(__FILE__, 2) . '/src/XML/element.registry.php');

0 commit comments

Comments
 (0)