public function isExternalRedirect($source, $target)
{
// handle protocol-relative URLs that parse_url() doesn't like
if (substr($target, 0, 2) === '//') {
$target = 'proto:' . $target;
}
$target = parse_url($target);
if (!isset($target['host'])) {
return false;
}
$source = parse_url($source);
if (!isset($source['host'])) {
throw new \LogicException('The source url must include a host name.');
}
return $source['host'] !== $target['host'];
}
/** * @dataProvider provideRedirectMatcher */ public function testRedirectMatcher($source, $target, $expected) { $listener = new ExternalRedirectListener(true); $result = $listener->isExternalRedirect($source, $target); $this->assertSame($expected, $result); }