ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.ilWhiteListUrlValidator.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 final 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 }
$url
Definition: shib_logout.php:66
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct(private string $url, array $whitelist)