Development

This commit is contained in:
Matthew Grotke 2026-05-31 22:01:59 -04:00
parent 6c3abca58c
commit 96f6e32c8f
9 changed files with 294 additions and 166 deletions

View file

@ -33,7 +33,8 @@ def _parse_entry():
protocol = sanitize.filtervalue(request.form.get('protocol', ''), validate.VALID_PROTOCOLS)
src_raw = request.form.get('src_ip_or_subnet', '').strip()
dst_raw = request.form.get('dst_ip_or_subnet', '').strip()
dst_port_raw = request.form.get('dst_port', '').strip()
dst_port_min_raw = request.form.get('dst_port_min', '').strip()
dst_port_max_raw = request.form.get('dst_port_max', '').strip()
if not protocol:
flash(f'The configuration has not been saved because the protocol is invalid. '
@ -56,19 +57,31 @@ def _parse_entry():
flash(f'The configuration has not been saved because "{dst_raw}" is not a valid IP address or subnet.', 'error')
return None, True
dst_port = ''
if dst_port_raw:
dst_port = validate.port(dst_port_raw)
if not dst_port:
flash(f'The configuration has not been saved because "{dst_port_raw}" is not a valid port number (1-65535).', 'error')
dst_port_min = ''
if dst_port_min_raw:
dst_port_min = validate.port(dst_port_min_raw)
if not dst_port_min:
flash(f'The configuration has not been saved because "{dst_port_min_raw}" is not a valid port number (1-65535).', 'error')
return None, True
dst_port_max = ''
if dst_port_max_raw:
dst_port_max = validate.port(dst_port_max_raw)
if not dst_port_max:
flash(f'The configuration has not been saved because "{dst_port_max_raw}" is not a valid port number (1-65535).', 'error')
return None, True
if dst_port_min and dst_port_max and int(dst_port_min) > int(dst_port_max):
flash('Port range min must not be greater than max.', 'error')
return None, True
return {
'description': description,
'protocol': protocol,
'src_ip_or_subnet': src,
'dst_ip_or_subnet': dst,
'dst_port': dst_port,
'dst_port_min': dst_port_min,
'dst_port_max': dst_port_max,
'enabled': True,
}, None

View file

@ -26,7 +26,7 @@
{
"label": "Protocol",
"field": "protocol",
"class": "col-mono"
"class": "col-mono col-narrow"
},
{
"label": "Source",
@ -39,9 +39,14 @@
"class": "col-mono"
},
{
"label": "Dest Port",
"field": "dst_port",
"class": "col-mono"
"label": "Port Min",
"field": "dst_port_min",
"class": "col-mono col-narrow"
},
{
"label": "Port Max",
"field": "dst_port_max",
"class": "col-mono col-narrow"
},
{
"label": "Status",
@ -75,8 +80,12 @@
"input_type": "text"
},
{
"col": "dst_port",
"input_type": "text"
"col": "dst_port_min",
"input_type": "number"
},
{
"col": "dst_port_max",
"input_type": "number"
},
{
"col": "enabled",
@ -112,36 +121,53 @@
"input_type": "text",
"placeholder": "e.g. Allow Chromecast"
},
{
"type": "field",
"label": "Protocol",
"name": "protocol",
"input_type": "select",
"options": "%PROTOCOL_OPTIONS%"
},
{
"type": "field",
"label": "Source",
"name": "src_ip_or_subnet",
"input_type": "text",
"validate": "VALIDATION_IPV4_CIDR",
"placeholder": "e.g. 192.168.20.0/24"
"validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR",
"placeholder": "e.g. 192.168.20.100 or 192.168.20.0/24",
"hint": "You may allow either a single device IP or an entire subnet to contact dest."
},
{
"type": "field",
"label": "Destination",
"name": "dst_ip_or_subnet",
"input_type": "text",
"validate": "VALIDATION_IPV4_FORMAT",
"placeholder": "e.g. 192.168.10.100"
"validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR",
"placeholder": "e.g. 192.168.10.200 or 192.168.10.0/24",
"hint": "You may allow either a single device IP or an entire subnet to be reached by source."
},
{
"type": "field",
"label": "Dest Port",
"name": "dst_port",
"input_type": "text",
"validate": "VALIDATION_PORT",
"placeholder": "e.g. 8009"
"type": "field_row",
"cols": 3,
"items": [
{
"type": "field",
"label": "Protocol",
"name": "protocol",
"input_type": "select",
"options": "%PROTOCOL_OPTIONS%"
},
{
"type": "field",
"label": "Port Min",
"name": "dst_port_min",
"input_type": "number",
"min": 1,
"max": 65535,
"hint": "This exception only applies to traffic over this port range and protocol."
},
{
"type": "field",
"label": "Port Max",
"name": "dst_port_max",
"input_type": "number",
"min": 1,
"max": 65535
}
]
},
{
"type": "button_row",
@ -163,4 +189,4 @@
]
}
]
}
}