mirror of
https://github.com/tiennm99/coolify.git
synced 2026-09-10 06:20:26 +00:00
Merge branch 'next' into next
This commit is contained in:
@@ -58,6 +58,13 @@ class ValidationPatterns
|
||||
*/
|
||||
public const CONTAINER_NAME_PATTERN = '/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/';
|
||||
|
||||
/**
|
||||
* Pattern for Docker network names
|
||||
* Must start with alphanumeric, followed by alphanumeric, dots, hyphens, or underscores
|
||||
* Matches Docker's network naming rules and prevents shell injection
|
||||
*/
|
||||
public const DOCKER_NETWORK_PATTERN = '/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/';
|
||||
|
||||
/**
|
||||
* Get validation rules for name fields
|
||||
*/
|
||||
@@ -194,6 +201,12 @@ class ValidationPatterns
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Pattern for port mappings (e.g. 3000:3000, 8080:80, 8000-8010:8000-8010)
|
||||
* Each entry requires host:container format, where each side can be a number or a range (number-number)
|
||||
*/
|
||||
public const PORT_MAPPINGS_PATTERN = '/^(\d+(-\d+)?:\d+(-\d+)?)(,\d+(-\d+)?:\d+(-\d+)?)*$/';
|
||||
|
||||
/**
|
||||
* Get validation rules for container name fields
|
||||
*/
|
||||
@@ -202,6 +215,24 @@ class ValidationPatterns
|
||||
return ['string', 'max:'.$maxLength, 'regex:'.self::CONTAINER_NAME_PATTERN];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get validation rules for port mapping fields
|
||||
*/
|
||||
public static function portMappingRules(): array
|
||||
{
|
||||
return ['nullable', 'string', 'regex:'.self::PORT_MAPPINGS_PATTERN];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get validation messages for port mapping fields
|
||||
*/
|
||||
public static function portMappingMessages(string $field = 'portsMappings'): array
|
||||
{
|
||||
return [
|
||||
"{$field}.regex" => 'Port mappings must be a comma-separated list of port pairs or ranges (e.g. 3000:3000,8080:80,8000-8010:8000-8010).',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a string is a valid Docker container name.
|
||||
*/
|
||||
@@ -210,6 +241,44 @@ class ValidationPatterns
|
||||
return preg_match(self::CONTAINER_NAME_PATTERN, $name) === 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get validation rules for Docker network name fields
|
||||
*/
|
||||
public static function dockerNetworkRules(bool $required = true, int $maxLength = 255): array
|
||||
{
|
||||
$rules = [];
|
||||
|
||||
if ($required) {
|
||||
$rules[] = 'required';
|
||||
} else {
|
||||
$rules[] = 'nullable';
|
||||
}
|
||||
|
||||
$rules[] = 'string';
|
||||
$rules[] = "max:$maxLength";
|
||||
$rules[] = 'regex:'.self::DOCKER_NETWORK_PATTERN;
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get validation messages for Docker network name fields
|
||||
*/
|
||||
public static function dockerNetworkMessages(string $field = 'network'): array
|
||||
{
|
||||
return [
|
||||
"{$field}.regex" => 'The network name must start with an alphanumeric character and contain only alphanumeric characters, dots, hyphens, and underscores.',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a string is a valid Docker network name.
|
||||
*/
|
||||
public static function isValidDockerNetwork(string $name): bool
|
||||
{
|
||||
return preg_match(self::DOCKER_NETWORK_PATTERN, $name) === 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get combined validation messages for both name and description fields
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user