{% extends "base.html" %} {% block title %}Superadmin Panel{% endblock %} {% block content %}

Superadmin Panel

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %}

Disposable Secure Channels

Ephemeral inbound paths via Cloudflare quick tunnel, Tor onion service, or both (hybrid). Addresses are disposable: rotate publishes fresh ones and destroys the old. Only the mode and address fingerprints reach the audit log, never the addresses themselves.

{% if channel and channel.active %}
modecloudflareonion
{{ channel.mode.value }} {{ channel.cloud_url or '—' }} {{ channel.onion_url or '—' }}
{% else %}

No disposable channel is running.

{% if channel_diag %}
backendbinarystatus
cloudflared {{ channel_diag.cloudflared.configured }} {% if channel_diag.cloudflared.available %} found {{ channel_diag.cloudflared.resolved }} {% else %} missing {% endif %}
tor {{ channel_diag.tor.configured }} {% if channel_diag.tor.available %} found {{ channel_diag.tor.resolved }} {% else %} missing {% endif %}

Forwarding to 127.0.0.1:{{ channel_diag.local_port }}, state in {{ channel_diag.state_dir }}. {% if not channel_diag.cloudflared.available %} Hybrid and cloudflared modes need the binary. Run make doctor-fix on the server or contact your administrator (advanced: set QV_CHANNEL_CLOUDFLARED_BIN to its path). Tor-only mode works without it. {% endif %}

{% if channel_diag.log_tail %}

Last backend log lines:

{{ channel_diag.log_tail }}
{% endif %} {% endif %}
{% endif %}

Users

{% for u in users %} {% endfor %}
id username role email status mfa subscription edit privileged actions
{{ u.id }} {{ u.username }} {{ u.role }} {{ u.email or '' }} {% if u.email_verified %}verified{% endif %} {% if u.email_verified %}email ok{% endif %} {% if u.phone_verified %}phone ok{% endif %} {% if u.mfa_enabled %} on {% else %} off {% endif %} {% if u.subscription_status == 'active' %} active {% else %} inactive {% endif %} edit
{% if u.subscription_status == 'active' %} {% else %} {% endif %}

Encrypted File Inventory

Read-only. The server never holds the keys needed to decrypt these files in v8 (zero-knowledge). The list is shown to help locate orphaned or suspiciously-sized ciphertext blobs.

{% if files %} {% for f in files %} {% endfor %}
usernamefilename
{{ f.username }} {{ f.file }}
{% else %}

No encrypted files visible.

{% endif %}

Recent Audit Log

Append-only. Newest first. Every privileged action recorded above appears here within the same request.

{% if audit %} {% for a in audit %} {% endfor %}
id ts (UTC) actor action target ip details
{{ a.id }} {{ a.ts }} {{ a.actor }} {{ a.action }} {{ a.target_user or '' }} {{ a.ip or '' }} {{ a.details or '' }}
{% else %}

No audit entries yet.

{% endif %} {% endblock %}