Common: Separate filename validation out of config schemas

This commit is contained in:
vakarisz 2022-08-01 13:01:37 +03:00
parent 3a6fcd670c
commit 2503e83dde
2 changed files with 25 additions and 38 deletions

View File

@ -1,6 +1,4 @@
import re
from marshmallow import Schema, ValidationError, fields, post_load, validate, validates
from marshmallow import Schema, fields, post_load, validate
from .agent_sub_configurations import (
CustomPBAConfiguration,
@ -14,11 +12,12 @@ from .agent_sub_configurations import (
TCPScanConfiguration,
)
from .utils import freeze_lists
from .validators.filenames import (
valid_linux_custom_pba_filename_regex,
validate_windows_custom_pba_filename,
)
from .validators.ip_ranges import validate_ip, validate_subnet_range
valid_windows_custom_pba_filename_regex = re.compile(r"^[^<>:\"\\\/|?*]*[^<>:\"\\\/|?* \.]+$|^$")
valid_linux_custom_pba_filename_regex = re.compile(r"^[^\0/]*$")
class CustomPBAConfigurationSchema(Schema):
linux_command = fields.Str()
@ -26,38 +25,7 @@ class CustomPBAConfigurationSchema(Schema):
validate=validate.Regexp(regex=valid_linux_custom_pba_filename_regex)
)
windows_command = fields.Str()
windows_filename = fields.Str(
validate=validate.Regexp(regex=valid_windows_custom_pba_filename_regex)
)
@validates("windows_filename")
def validate_windows_filename_not_reserved(self, windows_filename):
# filename shouldn't start with any of these and be followed by a period
if windows_filename.split(".")[0].upper() in [
"CON",
"PRN",
"AUX",
"NUL",
"COM1",
"COM2",
"COM3",
"COM4",
"COM5",
"COM6",
"COM7",
"COM8",
"COM9",
"LPT1",
"LPT2",
"LPT3",
"LPT4",
"LPT5",
"LPT6",
"LPT7",
"LPT8",
"LPT9",
]:
raise ValidationError("Invalid Windows filename: reserved name used")
windows_filename = fields.Str(validate=validate_windows_custom_pba_filename)
@post_load
def _make_custom_pba_configuration(self, data, **kwargs):

View File

@ -0,0 +1,19 @@
import re
from pathlib import PureWindowsPath
from marshmallow import ValidationError
valid_windows_custom_pba_filename_regex = re.compile(r"^[^<>:\"\\\/|?*]*[^<>:\"\\\/|?* \.]+$|^$")
valid_linux_custom_pba_filename_regex = re.compile(r"^[^\0/]*$")
def validate_windows_custom_pba_filename(windows_filename: str):
validate_windows_filename_not_reserved(windows_filename)
if not re.match(valid_windows_custom_pba_filename_regex, windows_filename):
raise ValidationError(f"Invalid Windows filename {windows_filename}: illegal characters")
def validate_windows_filename_not_reserved(windows_filename: str):
# filename shouldn't start with any of these and be followed by a period
if PureWindowsPath(windows_filename).is_reserved():
raise ValidationError(f"Invalid Windows filename {windows_filename}: reserved name used")