0
0
Fork 0
mirror of https://github.com/nextcloud/server.git synced 2025-02-12 03:59:16 +00:00
nextcloud_server/lib/private/Security/Ip/Address.php
Josh b059bc970b fix(security): Handle IPv6 zone IDs used in link-local addresses
Signed-off-by: Josh <josh.t.richards@gmail.com>
2024-11-06 08:19:56 +00:00

49 lines
1.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OC\Security\Ip;
use InvalidArgumentException;
use IPLib\Address\AddressInterface;
use IPLib\Factory;
use IPLib\ParseStringFlag;
use OCP\Security\Ip\IAddress;
use OCP\Security\Ip\IRange;
/**
* @since 30.0.0
*/
class Address implements IAddress {
private readonly AddressInterface $ip;
public function __construct(string $ip) {
$ip = Factory::parseAddressString($ip, ParseStringFlag::MAY_INCLUDE_ZONEID);
if ($ip === null) {
throw new InvalidArgumentException('Given IP address cant be parsed');
}
$this->ip = $ip;
}
public static function isValid(string $ip): bool {
return Factory::parseAddressString($ip, ParseStringFlag::MAY_INCLUDE_ZONEID) !== null;
}
public function matches(IRange... $ranges): bool {
foreach($ranges as $range) {
if ($range->contains($this)) {
return true;
}
}
return false;
}
public function __toString(): string {
return $this->ip->toString();
}
}