nextcloud/lib/private/Security/Ip/Address.php
Joas Schilling 047479ccf9
feat(security): Add public API to allow validating IP Ranges and checking for "in range"
Signed-off-by: Joas Schilling <coding@schilljs.com>
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2024-07-19 16:28:03 +02:00

48 lines
994 B
PHP
Raw 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 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);
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) !== 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();
}
}