ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilWhiteListUrlValidator.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21final readonly class ilWhiteListUrlValidator
22{
24 private array $whitelist;
25
29 public function __construct(private string $url, array $whitelist)
30 {
31 $this->whitelist = array_filter(array_map(static function (string $domain): string {
32 return trim($domain); // Used for trimming and type validation (strict primitive type hint)
33 }, $whitelist));
34 }
35
36 private function isValidDomain(string $domain): bool
37 {
38 foreach ($this->whitelist as $validDomain) {
39 if ($domain === $validDomain) {
40 return true;
41 }
42
43 $firstChar = $validDomain[0];
44 if ('.' !== $firstChar) {
45 $validDomain = '.' . $validDomain;
46 }
47
48 if ((strlen($domain) > strlen($validDomain)) && substr(
49 $domain,
50 (0 - strlen($validDomain))
51 ) === $validDomain) {
52 return true;
53 }
54 }
55
56 return false;
57 }
58
59 public function isValid(): bool
60 {
61 $redirectDomain = parse_url($this->url, PHP_URL_HOST);
62 if (null === $redirectDomain) {
63 return false;
64 }
65
66 return $this->isValidDomain($redirectDomain);
67 }
68}
__construct(private string $url, array $whitelist)
$url
Definition: shib_logout.php:68