mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 10:56:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Pterodactyl\Rules;
 | 
						|
 | 
						|
use Illuminate\Contracts\Validation\Rule;
 | 
						|
 | 
						|
class ResolvesToIPAddress implements Rule
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Validate that a given string can correctly resolve to a valid IPv4 address.
 | 
						|
     *
 | 
						|
     * @param string $attribute
 | 
						|
     * @param mixed $value
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function passes($attribute, $value): bool
 | 
						|
    {
 | 
						|
        // inet_pton returns false if the value passed through is not a valid IP address, so we'll just
 | 
						|
        // use that a nice ugly PHP hack to determine if we should pass this off to the gethostbyname
 | 
						|
        // call below.
 | 
						|
        $isIP = inet_pton($attribute) !== false;
 | 
						|
 | 
						|
        // If the value received is not an IP address try to look it up using the gethostbyname() call.
 | 
						|
        // If that returns the same value that we passed in then it means it did not resolve to anything
 | 
						|
        // and we should fail this validation call.
 | 
						|
        return $isIP || gethostbyname($value) !== $value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return a validation message for use when this rule fails.
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function message(): string
 | 
						|
    {
 | 
						|
        return 'The :attribute must be a valid IPv4 address or hostname that resolves to a valid IPv4 address.';
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Convert the rule to a validation string. This is necessary to avoid
 | 
						|
     * issues with Eloquence which tries to use this rule as a string.
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function __toString()
 | 
						|
    {
 | 
						|
        return 'p_resolves_to_ip_address';
 | 
						|
    }
 | 
						|
}
 |