diff --git a/docker/routlin-dash/app/view_page.py b/docker/routlin-dash/app/view_page.py
index 6b5169e..9c1575b 100644
--- a/docker/routlin-dash/app/view_page.py
+++ b/docker/routlin-dash/app/view_page.py
@@ -325,7 +325,7 @@ def _config_datasource(name):
row = dict(p)
ptype = p.get('provider', '').lower()
if ptype == 'noip':
- row['credentials'] = f"U: {p.get('username', '-')}"
+ row['credentials'] = f'U: {e(p.get("username", "-"))}
P: •••'
elif ptype in ('cloudflare', 'duckdns'):
tok = p.get('api_token', '')
row['credentials'] = f'API Token: {tok[:8]}...' if tok else '(not set)'
@@ -1389,6 +1389,9 @@ def _render_table_cell(value, render_fn, col_class='', field='', row_idx=None,
cls = badges.get(value.lower(), 'badge-disabled')
return f'{td_open}{e(value.title())}'
+ if render_fn == 'raw_html':
+ return f'{td_open}{value}'
+
if render_fn == 'tag_list':
try:
items = json.loads(value) if value.startswith('[') else [s.strip() for s in value.split(',')]
diff --git a/docker/routlin-dash/data/page_content.json b/docker/routlin-dash/data/page_content.json
index bec6dd1..d0b20fd 100644
--- a/docker/routlin-dash/data/page_content.json
+++ b/docker/routlin-dash/data/page_content.json
@@ -354,7 +354,8 @@
},
{
"label": "Credentials",
- "field": "credentials"
+ "field": "credentials",
+ "render": "raw_html"
}
],
"row_actions": [