server('HTTP_X_FORWARDED_FOR') ?? request()->getClientIp(); $ip = IPAddress::Make($ip); if ($ip->isErr()) { throw new \Exception(\trans('Client IP not valid ') . $ip->getErr()); } return $ip->unwrap(); } /** * Check if ipV4 is private * * @param \Dxw\CIDR\IPv4Address $ipv4_address * @return boolean */ private static function ipV4IsPrivate(IPv4Address $ipv4_address): bool { return \collect(self::$private_ip_v4_cidr_list) ->concat([self::$private_ip_v4_loopback_cidr]) ->map(function (string $ipv4_cidr) { return IPv4Range::Make($ipv4_cidr)->unwrap(); }) ->reduce(function ($initial, IPv4Range $ipv4_range) use ($ipv4_address) { return $initial || $ipv4_range->containsAddress($ipv4_address); }); } /** * Check if ipV6 is private * * @param \Dxw\CIDR\IPv6Address $ipv6_address * @return boolean */ private static function ipV6IsPrivate(IPv6Address $ipv6_address): bool { return \collect(self::$private_ip_v6_cidr_list) ->concat([self::$private_ip_v6_loopback_cidr]) ->map(function (string $ipv6_cidr) { return IPv6Range::Make($ipv6_cidr)->unwrap(); }) ->reduce(function ($initial, IPv6Range $ipv6_range, IPv6Address $ipv6_address) { return $initial || $ipv6_range->containsAddress($ipv6_address); }); } /** * Get Admin secure options * * @return \App\Lib\Options */ public static function getOptions(): Options { if (!self::$options) { self::$options = new Options(\config('admin-secure')); } return self::$options; } }