Development

This commit is contained in:
Matthew Grotke 2026-06-07 22:25:19 -04:00
parent e52fe9bf8a
commit db837af548
9 changed files with 98 additions and 25 deletions

View file

@ -55,8 +55,8 @@ def portal_save():
require_upw = 'require_username_password' in request.form
try:
dur_n = int(request.form.get('default_duration_value', '0').strip() or '0')
dur_unit = request.form.get('default_duration_unit', 'hours')
dur_n = int(request.form.get('default_session_value', '0').strip() or '0')
dur_unit = request.form.get('default_session_unit', 'hours')
mult = {'hours': 3600, 'days': 86400}.get(dur_unit, 3600)
duration = dur_n * mult if dur_n > 0 else 0
except (ValueError, TypeError):
@ -68,7 +68,7 @@ def portal_save():
'portal_splash_text': splash_text,
'portal_terms': terms,
'require_username_password': require_upw,
'default_duration_seconds': duration,
'default_session_seconds': duration,
}
vlan['captive_portal'] = after

View file

@ -91,6 +91,11 @@
"field": "portal_terms_display",
"class": "col-narrow"
},
{
"label": "Session",
"field": "session_display",
"class": "col-narrow"
},
{
"label": "U/P Required",
"field": "require_upw",
@ -168,7 +173,7 @@
{
"type": "field",
"label": "Default Session Duration",
"name": "default_duration_value",
"name": "default_session_value",
"input_type": "number",
"min": 0,
"value": "0",
@ -177,7 +182,7 @@
{
"type": "field",
"label": "Unit",
"name": "default_duration_unit",
"name": "default_session_unit",
"input_type": "select",
"options": [
{"value": "hours", "label": "Hours"},

View file

@ -4,6 +4,16 @@ import config_utils
import factory
def _format_session(secs):
if not secs or secs <= 0:
return 'No limit'
if secs % 86400 == 0:
d = secs // 86400
return f'{d} day{"s" if d != 1 else ""}'
h = secs / 3600
return f'{h:g} h'
def collect_tokens(cfg):
tokens = config_utils.collect_layout_tokens(cfg)
cp = cfg.get('captive_portal', {})
@ -28,7 +38,7 @@ def collect_tokens(cfg):
text = cp.get('portal_splash_text', vlan.get('portal_splash_text', ''))
terms = cp.get('portal_terms', vlan.get('portal_terms', []))
require_upw = cp.get('require_username_password', vlan.get('require_username_password', False))
duration = cp.get('default_duration_seconds', vlan.get('default_duration_seconds', 0))
duration = cp.get('default_session_seconds', vlan.get('default_session_seconds', 0))
n = len(terms)
display_rows.append({
'vlan_name': vlan['name'],
@ -38,7 +48,8 @@ def collect_tokens(cfg):
'portal_terms_display': f'{n} term{"s" if n != 1 else ""}' if n else '--',
'require_upw': require_upw,
'require_username_password': require_upw,
'default_duration_seconds': duration,
'default_session_seconds': duration,
'session_display': _format_session(duration),
})
content = factory.load_json(f'{factory.PAGES_DIR}/captiveportal/content.json')