3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Tests
;
7 use Fig\Http\Message\StatusCodeInterface
;
9 use PhpMyAdmin\Http\Factory\ResponseFactory
;
10 use PhpMyAdmin\Template
;
11 use PhpMyAdmin\Tests\Stubs\ResponseRenderer
;
12 use PhpMyAdmin\UrlRedirector
;
13 use PHPUnit\Framework\Attributes\CoversClass
;
15 #[CoversClass(UrlRedirector::class)]
16 final class UrlRedirectorTest
extends AbstractTestCase
18 public function testRedirectWithDisallowedUrl(): void
20 $config = Config
::getInstance();
21 $config->set('PmaAbsoluteUri', 'http://localhost/phpmyadmin');
23 $urlRedirector = new UrlRedirector(new ResponseRenderer(), new Template(), ResponseFactory
::create());
25 $response = $urlRedirector->redirect('https://user:pass@example.com/');
26 self
::assertSame('/phpmyadmin/', $response->getHeaderLine('Location'));
27 self
::assertSame(StatusCodeInterface
::STATUS_FOUND
, $response->getStatusCode());
30 public function testRedirectWithAllowedUrl(): void
32 $_SERVER['SERVER_NAME'] = 'localhost';
34 $urlRedirector = new UrlRedirector(new ResponseRenderer(), new Template(), ResponseFactory
::create());
36 $response = $urlRedirector->redirect('https://phpmyadmin.net/');
39 window.onload = function () {
40 window.location = 'https\u003A\/\/phpmyadmin.net\/';
43 Taking you to the target site.
47 self
::assertSame($expected, (string) $response->getBody());