Skip to content

Commit c38ca88

Browse files
authored
fix-external-url-handling (#452)
1 parent ca2048e commit c38ca88

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/DependencyInjection/ProviderFactory.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ public function __construct(UrlGeneratorInterface $generator)
3737
public function createProvider($class, array $options, ?string $redirectUri = null, array $redirectParams = [], array $collaborators = [])
3838
{
3939
if (null !== $redirectUri) {
40-
$redirectUri = $this->generator
41-
->generate($redirectUri, $redirectParams, UrlGeneratorInterface::ABSOLUTE_URL);
40+
$redirectUri = filter_var($redirectUri, \FILTER_VALIDATE_URL)
41+
? $redirectUri
42+
: $this->generator->generate($redirectUri, $redirectParams, UrlGeneratorInterface::ABSOLUTE_URL);
4243

4344
$options['redirectUri'] = $redirectUri;
4445
}

tests/DependencyInjection/ProviderFactoryTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,21 @@ public function testShouldCreateProviderWithNullRedirectUrl()
4545
$this->assertEquals([], $result->getCollaborators());
4646
}
4747

48+
public function testShouldCreateProviderWithExternalRedirectUrl()
49+
{
50+
$mockGenerator = $this->getMockBuilder(UrlGeneratorInterface::class)
51+
->disableOriginalConstructor()
52+
->getMock();
53+
$mockGenerator->expects($this->never())->method('generate');
54+
55+
$testProviderFactory = new ProviderFactory($mockGenerator);
56+
$externalRedirectUri = 'https://external-site.com/callback';
57+
$result = $testProviderFactory->createProvider(MockProvider::class, [], $externalRedirectUri);
58+
59+
$this->assertInstanceOf(MockProvider::class, $result);
60+
$this->assertEquals(['redirectUri' => $externalRedirectUri], $result->getOptions());
61+
}
62+
4863
private function getMockGenerator($generateReturn)
4964
{
5065
$mockGenerator = $this->getMockBuilder(UrlGeneratorInterface::class)->disableOriginalConstructor()->getMock();

0 commit comments

Comments
 (0)