1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 19:26:48 +00:00
webvirtcloud/computes/validators.py
catborise 764cbb3c43 chore: remove code nothing uses
Each was checked with git grep across every tracked file (templates, JS,
shell, unit files and the extensionless console daemons) and for
dynamic use (URL names, template names, registries):

- vrtManager: host_is_up, is_kvm_supported, get_emulators,
  get_file_extensions, both get_network_forward, get_snapshots,
  get_storages_images, get_os_type, get_host_arch, the get_pretty_* trio
  and, in util, is_kvm_available, randomMAC, get_max_vcpus, compareMAC,
  pretty_mem, pretty_bytes and validate_uuid; with them the port
  constants only host_is_up read. Some were reached only by their tests,
  which go too.
- The flavor edit page: nothing linked to it; flavors are created and
  deleted on the Flavors page and edited through the API.
- computes.validate_name, UserForm.identity_has_errors, the has_perm
  template tag, the ALLOW_EMPTY_PASSWORD setting nothing reads,
  hidePleaseWaitDialog, default_app_config (ignored since Django 4.1)
  and the Python < 3.6 lines of secret_generator.py.
2026-11-06 10:53:37 +03:00

54 lines
2.2 KiB
Python

import re
from ipaddress import ip_address
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
# one or more dot-separated RFC 1123 labels, optional trailing dot
_hostname = re.compile(r"[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*\.?")
_login = re.compile(r"[A-Za-z0-9._][A-Za-z0-9._-]*")
def validate_hostname(value):
"""An IPv4 address or a host name that goes safely into a libvirt
connection URI. No scheme, port, path, query, whitespace or IPv6 literal:
those would change the URI (an injected ?command=, ?no_verify=, a port or
a userinfo separator). IPv6 is rejected until the URI building brackets
it."""
try:
if ip_address(value).version == 4:
return
except ValueError:
if _hostname.fullmatch(value):
return
raise ValidationError(_("Enter an IPv4 address or a host name, without a scheme, port or path"))
def validate_login(value):
"""A user name that goes safely into a libvirt connection URI and an ssh
command line. Empty is allowed (TCP falls back to the server's own
authentication, the socket transport ignores the login); otherwise only
letters, digits, ".", "_" and "-", and never a leading "-" (an ssh
option)."""
if value and not _login.fullmatch(value):
raise ValidationError(
_("The login may contain only letters, digits, '.', '_' and '-', and may not start with '-'")
)
def validate_migration_address(value):
"""An IP address (no IPv6 scope) or a host name: no scheme, port or brackets."""
try:
if not getattr(ip_address(value), "scope_id", None):
return
except ValueError:
if _hostname.fullmatch(value):
return
raise ValidationError(_("Enter an IP address or a host name, without a scheme or port"))
def validate_gstfsd_key(value):
"""The key gstfsd on the host signs with: GSTFSD_KEY in its
/etc/default/webvirt-gstfsd, 64 lowercase hexadecimal characters."""
if not re.fullmatch(r"[0-9a-f]{64}", value):
raise ValidationError(_("Enter the 64 hexadecimal characters of GSTFSD_KEY in the host's /etc/default/webvirt-gstfsd"))