PillarTool/pillar_tool/util/validation.py

34 lines
1.0 KiB
Python

import re
DOMAIN_NAME_REGEX = r'^[a-zA-Z0-9._-]+$' # could be a FQDN, but also just a name
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