37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import re
|
|
|
|
|
|
DOMAIN_NAME_REGEX = r'^[a-zA-Z0-9._-]+$' # could be a FQDN, but also just a name
|
|
FQDN_REGEX = r'^([a-zA-Z0-9.-]+\.)+[a-zA-Z]{2,}$'
|
|
|
|
|
|
def validate_and_split_path_and_domain_name(path_or_dn: str) -> list[str] | None:
|
|
"""
|
|
Splits a string along slashes and validates each fragment.
|
|
|
|
Args:
|
|
path_or_dn: Input string that may contain slashes (Some path, name, FQDN or a combination of them)
|
|
|
|
Returns:
|
|
List of validated fragments in original order, or None if validation fails
|
|
"""
|
|
import re
|
|
|
|
# Split the input by slashes
|
|
fragments = [frag for frag in path_or_dn.strip().split('/')]
|
|
|
|
# Validate each fragment contains only allowed characters
|
|
validated_fragments = []
|
|
|
|
for frag in fragments:
|
|
if not re.match(DOMAIN_NAME_REGEX, frag):
|
|
return None
|
|
|
|
validated_fragments.append(frag)
|
|
|
|
# Return the list of validated fragments or None if any failed validation
|
|
# NOTE: validated_fragments could be falsy if input was empty or only slashes
|
|
return validated_fragments if validated_fragments else None
|
|
|
|
|