# Validator API Documentation ## Table of Contents 1. [Base Validator](#base-validator) 2. [Core Validators](#core-validators) 3. [Registry System](#registry-system) 4. [Custom Validators](#custom-validators) 5. [Conventions](#conventions) ## Base Validator ### `BaseValidator` The abstract base class for all validators. Provides common functionality for validation, error handling, and rule loading. ```python from validators.base import BaseValidator class MyValidator(BaseValidator): def validate_inputs(self, inputs: dict[str, str]) -> bool: # Implementation pass ``` #### Methods | Method | Description | Returns | |-------------------------------------------------|---------------------------------------|-------------| | `validate_inputs(inputs)` | Main validation entry point | `bool` | | `validate_required_inputs(inputs)` | Validates required inputs are present | `bool` | | `validate_path_security(path)` | Checks for path traversal attacks | `bool` | | `validate_security_patterns(value, field_name)` | Checks for injection attacks | `bool` | | `add_error(message)` | Adds an error message | `None` | | `clear_errors()` | Clears all error messages | `None` | | `get_required_inputs()` | Returns list of required input names | `list[str]` | | `get_validation_rules()` | Returns validation rules dictionary | `dict` | | `load_rules(action_type)` | Loads rules from YAML file | `dict` | #### Properties | Property | Type | Description | |---------------|-------------|---------------------------------| | `errors` | `list[str]` | Accumulated error messages | | `action_type` | `str` | The action type being validated | ## Core Validators ### `BooleanValidator` Validates boolean inputs with flexible string representations. ```python from validators.boolean import BooleanValidator validator = BooleanValidator() validator.validate_boolean("true", "dry-run") # Returns True validator.validate_boolean("yes", "dry-run") # Returns False (not allowed) ``` **Accepted Values**: `true`, `false`, `True`, `False`, `TRUE`, `FALSE` ### `VersionValidator` Validates version strings in multiple formats. ```python from validators.version import VersionValidator validator = VersionValidator() validator.validate_semantic_version("1.2.3") # SemVer validator.validate_calver("2024.3.15") # CalVer validator.validate_flexible_version("v1.2.3") # Either format ``` **Supported Formats**: - **SemVer**: `1.2.3`, `1.0.0-alpha`, `2.1.0+build123` - **CalVer**: `2024.3.1`, `2024.03.15`, `24.3.1` - **Prefixed**: `v1.2.3`, `v2024.3.1` ### `TokenValidator` Validates authentication tokens for various services. ```python from validators.token import TokenValidator validator = TokenValidator() validator.validate_github_token("ghp_...") # Classic PAT validator.validate_github_token("github_pat_...") # Fine-grained PAT validator.validate_github_token("${{ secrets.GITHUB_TOKEN }}") # Expression ``` **Token Types**: - **GitHub**: `ghp_`, `gho_`, `ghu_`, `ghs_`, `ghr_`, `github_pat_` - **NPM**: UUID format, `${{ secrets.NPM_TOKEN }}` - **Docker**: Any non-empty value ### `NumericValidator` Validates numeric values and ranges. ```python from validators.numeric import NumericValidator validator = NumericValidator() validator.validate_numeric_range("5", 0, 10) # Within range validator.validate_numeric_range("15", 0, 10) # Out of range (fails) ``` **Common Ranges**: - `0-100`: Percentages - `1-10`: Retry counts - `1-128`: Thread/worker counts ### `FileValidator` Validates file paths with security checks. ```python from validators.file import FileValidator validator = FileValidator() validator.validate_file_path("./config.yml") # Valid validator.validate_file_path("../../../etc/passwd") # Path traversal (fails) validator.validate_file_path("/absolute/path") # Absolute path (fails) ``` **Security Checks**: - No path traversal (`../`) - No absolute paths - No special characters that could cause injection ### `NetworkValidator` Validates network-related inputs. ```python from validators.network import NetworkValidator validator = NetworkValidator() validator.validate_url("https://example.com") validator.validate_email("user@example.com") validator.validate_hostname("api.example.com") validator.validate_ip_address("192.168.1.1") ``` **Validation Types**: - **URLs**: HTTP/HTTPS with valid structure - **Emails**: RFC-compliant email addresses - **Hostnames**: Valid DNS names - **IPs**: IPv4 and IPv6 addresses - **Ports**: 1-65535 range ### `DockerValidator` Validates Docker-specific inputs. ```python from validators.docker import DockerValidator validator = DockerValidator() validator.validate_image_name("nginx") validator.validate_tag("latest") validator.validate_architectures("linux/amd64,linux/arm64") validator.validate_registry("ghcr.io") ``` **Docker Validations**: - **Images**: Lowercase, alphanumeric with `-`, `_`, `/` - **Tags**: Alphanumeric with `-`, `_`, `.` - **Platforms**: Valid OS/architecture combinations - **Registries**: Known registries or valid hostnames ### `SecurityValidator` Performs security-focused validations. ```python from validators.security import SecurityValidator validator = SecurityValidator() validator.validate_no_injection("safe input") validator.validate_safe_command("echo hello") validator.validate_safe_environment_variable("PATH=/usr/bin") validator.validate_no_secrets("normal text") ``` **Security Patterns Detected**: - Command injection: `;`, `&&`, `||`, `` ` ``, `$()` - SQL injection: `' OR '1'='1`, `DROP TABLE`, `--` - Path traversal: `../`, `..\\` - Script injection: `