Skip to content

Commit 75d0811

Browse files
committed
Merge pull request #9 from tmilos/symfony_23
Service definitions not compatible with Symfony 2.3 #8
2 parents b95b54f + d56ada3 commit 75d0811

File tree

5 files changed

+55
-23
lines changed

5 files changed

+55
-23
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"symfony/framework-bundle": "~2.3|~3.0",
2424
"symfony/dependency-injection": "~2.3|~3.0",
2525
"symfony/yaml": "~2.3|~3.0",
26-
"lightsaml/lightsaml": "~1.0"
26+
"lightsaml/lightsaml": "^1.0.7"
2727
},
2828
"require-dev": {
2929
"phpunit/phpunit": "~4.5",

src/LightSaml/SymfonyBridgeBundle/DependencyInjection/LightSamlSymfonyBridgeExtension.php

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,32 @@ public function load(array $config, ContainerBuilder $container)
5151
$this->configureSystem($container, $config);
5252
$this->configureParty($container, $config);
5353
$this->configureStore($container, $config);
54+
$this->configureCredential($container, $config);
55+
$this->configureService($container, $config);
56+
}
57+
58+
private function configureCredential(ContainerBuilder $container, array $config)
59+
{
60+
$this->configureCredentialStore($container, $config);
61+
}
62+
63+
private function configureCredentialStore(ContainerBuilder $container, array $config)
64+
{
65+
$factoryReference = $container->getDefinition('lightsaml.credential.credential_store_factory');
66+
$definition = $container->getDefinition('lightsaml.credential.credential_store');
67+
$this->setFactoryCompatibleWay($definition, $factoryReference, 'buildFromOwnCredentialStore');
68+
}
69+
70+
private function configureService(ContainerBuilder $container, array $config)
71+
{
72+
$this->configureServiceCredentialResolver($container, $config);
73+
}
74+
75+
private function configureServiceCredentialResolver(ContainerBuilder $container, array $config)
76+
{
77+
$factoryReference = $container->getDefinition('lightsaml.service.credential_resolver_factory');
78+
$definition = $container->getDefinition('lightsaml.service.credential_resolver');
79+
$this->setFactoryCompatibleWay($definition, $factoryReference, 'build');
5480
}
5581

5682
private function configureOwn(ContainerBuilder $container, array $config)
@@ -71,21 +97,11 @@ private function configureOwnEntityDescriptor(ContainerBuilder $container, array
7197
$definition
7298
->addArgument($config['own']['entity_descriptor_provider']['filename'])
7399
->addArgument($config['own']['entity_descriptor_provider']['entity_id']);
74-
if (method_exists($definition, 'setFactory')) {
75-
$definition->setFactory(['LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory', 'fromEntitiesDescriptorFile']);
76-
} else {
77-
$definition->setFactoryClass('LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory');
78-
$definition->setFactoryMethod('fromEntitiesDescriptorFile');
79-
}
100+
$this->setFactoryCompatibleWay($definition, 'LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory', 'fromEntitiesDescriptorFile');
80101
} else {
81102
$definition = $container->setDefinition('lightsaml.own.entity_descriptor_provider', new Definition())
82103
->addArgument($config['own']['entity_descriptor_provider']['filename']);
83-
if (method_exists($definition, 'setFactory')) {
84-
$definition->setFactory(['LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory', 'fromEntityDescriptorFile']);
85-
} else {
86-
$definition->setFactoryClass('LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory');
87-
$definition->setFactoryMethod('fromEntityDescriptorFile');
88-
}
104+
$this->setFactoryCompatibleWay($definition, 'LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory', 'fromEntityDescriptorFile');
89105
}
90106
} else {
91107
$definition = $container->getDefinition('lightsaml.own.entity_descriptor_provider');
@@ -96,12 +112,7 @@ private function configureOwnEntityDescriptor(ContainerBuilder $container, array
96112
->addArgument(null)
97113
->addArgument(new Reference('lightsaml.own.credential_store'))
98114
;
99-
if (method_exists($definition, 'setFactory')) {
100-
$definition->setFactory(['LightSaml\SymfonyBridgeBundle\Factory\OwnEntityDescriptorProviderFactory', 'build']);
101-
} else {
102-
$definition->setFactoryClass('LightSaml\SymfonyBridgeBundle\Factory\OwnEntityDescriptorProviderFactory');
103-
$definition->setFactoryMethod('build');
104-
}
115+
$this->setFactoryCompatibleWay($definition, 'LightSaml\SymfonyBridgeBundle\Factory\OwnEntityDescriptorProviderFactory', 'build');
105116
}
106117
}
107118

@@ -113,7 +124,7 @@ private function configureOwnCredentials(ContainerBuilder $container, array $con
113124

114125
foreach ($config['own']['credentials'] as $id => $data) {
115126
$definition = new Definition(
116-
\LightSaml\Store\Credential\X509FileCredentialStore::class,
127+
'LightSaml\Store\Credential\X509FileCredentialStore',
117128
[
118129
$config['own']['entity_id'],
119130
$data['certificate'],
@@ -165,4 +176,23 @@ private function configureStore(ContainerBuilder $container, array $config)
165176
$container->setAlias('lightsaml.store.sso_state', $config['store']['sso_state']);
166177
}
167178
}
179+
180+
/**
181+
* @param Definition $definition
182+
* @param string $classOrReference
183+
* @param string $method
184+
*/
185+
private function setFactoryCompatibleWay(Definition $definition, $classOrReference, $method)
186+
{
187+
if (method_exists($definition, 'setFactory')) {
188+
$definition->setFactory([$classOrReference, $method]);
189+
} else {
190+
if ($classOrReference instanceof Reference) {
191+
$definition->setFactoryService((string) $classOrReference);
192+
} else {
193+
$definition->setFactoryClass($classOrReference);
194+
}
195+
$definition->setFactoryMethod($method);
196+
}
197+
}
168198
}

src/LightSaml/SymfonyBridgeBundle/Resources/config/credential.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
22
lightsaml.credential.credential_store:
33
class: LightSaml\Store\Credential\CompositeCredentialStore
4-
factory: [LightSaml\SymfonyBridgeBundle\Factory\CredentialStoreFactory, build]
4+
# factory: ["@lightsaml.credential.credential_store_factory", buildFromOwnCredentialStore] # set in extension, differently based on symfony version
55
arguments:
66
- "@lightsaml.party.idp_entity_descriptor_store"
77
- "@lightsaml.party.sp_entity_descriptor_store"

src/LightSaml/SymfonyBridgeBundle/Resources/config/own.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ services:
88

99
lightsaml.own.entity_descriptor_provider:
1010
class: LightSaml\Builder\EntityDescriptor\SimpleEntityDescriptorBuilder
11-
# factory set in extension, differently based on symfony version
11+
# factory set in extension, all with arguments, differently based on symfony version
12+
# factory: ["@LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory", "fromEntitiesDescriptorFile"]
13+
# factory: ["@LightSaml\Provider\EntityDescriptor\FileEntityDescriptorProviderFactory", "fromEntityDescriptorFile"]

src/LightSaml/SymfonyBridgeBundle/Resources/config/service.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ services:
5656

5757
lightsaml.service.credential_resolver:
5858
class: LightSaml\Resolver\Credential\CompositeFilterResolver
59-
factory: ["@lightsaml.service.credential_resolver_factory", build]
59+
# factory: ["@lightsaml.service.credential_resolver_factory", build] # set in extension, differently based on symfony version
6060

6161
lightsaml.service.signature_resolver:
6262
class: LightSaml\Resolver\Signature\OwnSignatureResolver

0 commit comments

Comments
 (0)