-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into psr-event-dispatcher
- Loading branch information
Showing
11 changed files
with
374 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
version: 2 | ||
updates: | ||
- package-ecosystem: composer | ||
directory: "/" | ||
schedule: | ||
interval: daily | ||
time: "11:00" | ||
open-pull-requests-limit: 10 | ||
ignore: | ||
- dependency-name: league/event | ||
versions: | ||
- 3.0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
/vendor | ||
**/composer.lock | ||
phpunit.xml | ||
.phpunit.result.cache | ||
.idea | ||
/examples/vendor | ||
examples/public.key | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
/** | ||
* @author Sebastiano Degan <[email protected]> | ||
* @copyright Copyright (c) Alex Bilbie | ||
* @license http://mit-license.org/ | ||
* | ||
* @link https://github.com/thephpleague/oauth2-server | ||
*/ | ||
|
||
namespace League\OAuth2\Server\RedirectUriValidators; | ||
|
||
class RedirectUriValidator implements RedirectUriValidatorInterface | ||
{ | ||
/** | ||
* @var array | ||
*/ | ||
private $allowedRedirectUris; | ||
|
||
/** | ||
* New validator instance for the given uri | ||
* | ||
* @param string|array $allowedRedirectUris | ||
*/ | ||
public function __construct($allowedRedirectUri) | ||
{ | ||
if (\is_string($allowedRedirectUri)) { | ||
$this->allowedRedirectUris = [$allowedRedirectUri]; | ||
} elseif (\is_array($allowedRedirectUri)) { | ||
$this->allowedRedirectUris = $allowedRedirectUri; | ||
} else { | ||
$this->allowedRedirectUris = []; | ||
} | ||
} | ||
|
||
/** | ||
* Validates the redirect uri. | ||
* | ||
* @param string $redirectUri | ||
* | ||
* @return bool Return true if valid, false otherwise | ||
*/ | ||
public function validateRedirectUri($redirectUri) | ||
{ | ||
if ($this->isLoopbackUri($redirectUri)) { | ||
return $this->matchUriExcludingPort($redirectUri); | ||
} | ||
|
||
return $this->matchExactUri($redirectUri); | ||
} | ||
|
||
/** | ||
* According to section 7.3 of rfc8252, loopback uris are: | ||
* - "http://127.0.0.1:{port}/{path}" for IPv4 | ||
* - "http://[::1]:{port}/{path}" for IPv6 | ||
* | ||
* @param string $redirectUri | ||
* | ||
* @return bool | ||
*/ | ||
private function isLoopbackUri($redirectUri) | ||
{ | ||
$parsedUrl = \parse_url($redirectUri); | ||
|
||
return $parsedUrl['scheme'] === 'http' | ||
&& (\in_array($parsedUrl['host'], ['127.0.0.1', '[::1]'], true)); | ||
} | ||
|
||
/** | ||
* Find an exact match among allowed uris | ||
* | ||
* @param string $redirectUri | ||
* | ||
* @return bool Return true if an exact match is found, false otherwise | ||
*/ | ||
private function matchExactUri($redirectUri) | ||
{ | ||
return \in_array($redirectUri, $this->allowedRedirectUris, true); | ||
} | ||
|
||
/** | ||
* Find a match among allowed uris, allowing for different port numbers | ||
* | ||
* @param string $redirectUri | ||
* | ||
* @return bool Return true if a match is found, false otherwise | ||
*/ | ||
private function matchUriExcludingPort($redirectUri) | ||
{ | ||
$parsedUrl = $this->parseUrlAndRemovePort($redirectUri); | ||
|
||
foreach ($this->allowedRedirectUris as $allowedRedirectUri) { | ||
if ($parsedUrl === $this->parseUrlAndRemovePort($allowedRedirectUri)) { | ||
return true; | ||
} | ||
} | ||
|
||
return false; | ||
} | ||
|
||
/** | ||
* Parse an url like \parse_url, excluding the port | ||
* | ||
* @param string $url | ||
* | ||
* @return array | ||
*/ | ||
private function parseUrlAndRemovePort($url) | ||
{ | ||
$parsedUrl = \parse_url($url); | ||
unset($parsedUrl['port']); | ||
|
||
return $parsedUrl; | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
src/RedirectUriValidators/RedirectUriValidatorInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
/** | ||
* @author Sebastiano Degan <[email protected]> | ||
* @copyright Copyright (c) Alex Bilbie | ||
* @license http://mit-license.org/ | ||
* | ||
* @link https://github.com/thephpleague/oauth2-server | ||
*/ | ||
|
||
namespace League\OAuth2\Server\RedirectUriValidators; | ||
|
||
interface RedirectUriValidatorInterface | ||
{ | ||
/** | ||
* Validates the redirect uri. | ||
* | ||
* @param string $redirectUri | ||
* | ||
* @return bool Return true if valid, false otherwise | ||
*/ | ||
public function validateRedirectUri($redirectUri); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.