From ce280b6d7a1dc17b6e44f70990343b2ba550088c Mon Sep 17 00:00:00 2001 From: Matthew Grotke Date: Thu, 11 Jun 2026 01:49:59 -0400 Subject: [PATCH] Development --- docker/routlin-dash/app/config_utils.py | 5 +++-- docker/routlin-dash/app/factory.py | 3 +-- docker/routlin-dash/app/pages/preferences/action.py | 1 + docker/routlin-dash/app/pages/preferences/view.py | 2 +- docker/routlin-dash/app/session_interface.py | 6 +++++- docker/routlin-dash/app/settings.py | 9 +++++++++ 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/docker/routlin-dash/app/config_utils.py b/docker/routlin-dash/app/config_utils.py index 0a4e53b..f618482 100644 --- a/docker/routlin-dash/app/config_utils.py +++ b/docker/routlin-dash/app/config_utils.py @@ -21,10 +21,11 @@ HEALTH_FILE = f'{CONFIGS_DIR}/.health' DNS_METRICS_DB = f'{CONFIGS_DIR}/.dns-metrics' DNS_QUERIES_DB = f'{CONFIGS_DIR}/.dns-queries' BLOCKLISTS_DIR = f'{CONFIGS_DIR}/blocklists' -PRODUCT_NAME = os.environ.get('PRODUCT_NAME', 'routlin') +import settings as _settings +PRODUCT_NAME = _settings.product_name() +WEB_APP_DISPLAY_NAME = _settings.web_app_display_name() DASHB_TIMER_NAME = f'{PRODUCT_NAME}-dashboard-queue' DDNS_TIMER_NAME = f'{PRODUCT_NAME}-ddns-update' -WEB_APP_DISPLAY_NAME = os.environ.get('WEB_APP_DISPLAY_NAME', f'{PRODUCT_NAME.capitalize()} Dashboard') DASHB_INTERVAL_SECS = 30 QUEUE_MAX_LINES = 50 diff --git a/docker/routlin-dash/app/factory.py b/docker/routlin-dash/app/factory.py index 53df6f8..2e30379 100644 --- a/docker/routlin-dash/app/factory.py +++ b/docker/routlin-dash/app/factory.py @@ -1547,8 +1547,7 @@ def render_layout(view_id, content_html, tokens, page_name=None, suppress_pendin has_pending_alert = not config_utils._apply_changes_immediately() and bool(config_utils.get_dashboard_pending()) titlebar_html = f'
{config_utils.WEB_APP_DISPLAY_NAME}
' navbar_html = build_navbar(view_id, level, tokens, pending_alert=has_pending_alert) - edition = 'Pro' if settings.is_pro() else 'CE' - footer_html = f'' + footer_html = f'' page_hash = config_utils.config_hash() lan_iface = e(tokens.get('GENERAL_LAN_INTERFACE', '')) diff --git a/docker/routlin-dash/app/pages/preferences/action.py b/docker/routlin-dash/app/pages/preferences/action.py index c218254..491ead4 100644 --- a/docker/routlin-dash/app/pages/preferences/action.py +++ b/docker/routlin-dash/app/pages/preferences/action.py @@ -30,6 +30,7 @@ def accountdetails_save(): return redirect(f'/{_PAGE}') tz_offset = _tz_to_offset_seconds(tz) + session['timezone'] = tz session['tz_offset_seconds'] = tz_offset flash('Preferences saved.', 'success') diff --git a/docker/routlin-dash/app/pages/preferences/view.py b/docker/routlin-dash/app/pages/preferences/view.py index af7ca1d..d35f4a4 100644 --- a/docker/routlin-dash/app/pages/preferences/view.py +++ b/docker/routlin-dash/app/pages/preferences/view.py @@ -8,6 +8,6 @@ def collect_tokens(cfg): tokens = config_utils.collect_layout_tokens(cfg) blank = [{'value': '', 'label': '-- Select Timezone --'}] tokens['PREF_EMAIL'] = session.get('email_address', '') - tokens['PREF_TIMEZONE'] = '' + tokens['PREF_TIMEZONE'] = session.get('timezone', '') tokens['TIMEZONE_OPTIONS'] = json.dumps(blank + [{'value': tz, 'label': tz} for tz in sanitize.VALID_TIMEZONES]) return tokens diff --git a/docker/routlin-dash/app/session_interface.py b/docker/routlin-dash/app/session_interface.py index 12d960b..e913485 100644 --- a/docker/routlin-dash/app/session_interface.py +++ b/docker/routlin-dash/app/session_interface.py @@ -52,6 +52,7 @@ class SqliteSessionInterface(SessionInterface): 'email_address': str(row['email']), 'access_level': _LEVEL_INT_TO_STR.get(row['access_level'], 'viewer'), 'tz_offset_seconds': int(row['tz_offset_seconds']), + 'timezone': str(prefs.get('timezone', '')), 'apply_changes_immediately': bool(prefs.get('apply_changes_immediately', False)), '_flashes': flashes, } @@ -91,7 +92,10 @@ class SqliteSessionInterface(SessionInterface): try: con = self._connect() if account_id: - prefs = json.dumps({'apply_changes_immediately': bool(session.get('apply_changes_immediately', False))}) + prefs = json.dumps({ + 'timezone': session.get('timezone', ''), + 'apply_changes_immediately': bool(session.get('apply_changes_immediately', False)), + }) tz_offset = int(session.get('tz_offset_seconds', 0)) con.execute('INSERT OR IGNORE INTO clients (cookie_unique_token) VALUES (?)', (session.sid,)) con.execute( diff --git a/docker/routlin-dash/app/settings.py b/docker/routlin-dash/app/settings.py index 802412d..945458d 100644 --- a/docker/routlin-dash/app/settings.py +++ b/docker/routlin-dash/app/settings.py @@ -1,6 +1,15 @@ import os +def product_name(): + return os.environ.get('PRODUCT_NAME', 'routlin') + + +def web_app_display_name(): + edition = 'Pro' if is_pro() else 'CE' + return os.environ.get('WEB_APP_DISPLAY_NAME', f'{product_name().capitalize()}-{edition}') + + def is_production(): return not os.environ.get('DEV_MODE', '').lower() in ('1', 'true', 'yes')