Files
virtuality/web/templates/operations.html
T
Claude bb87f52834 Безопасность панели была усилена
Проверка пароля переведена на PAM (python-pam) с fallback на crypt/spwd
для совместимости, все POST-формы защищены CSRF-токеном в сессии,
после пяти неудачных попыток входа включается пауза 60 секунд,
установщик генерирует самоподписанный TLS-сертификат и панель
по умолчанию работает по HTTPS (отключается VIRTUALITY_TLS=0).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKUoZwHMCHnytfswFVRUHw
2026-08-15 19:19:33 +00:00

57 строки
2.0 KiB
HTML

<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Операции — {{ app_name }}</title>
<link rel="stylesheet" href="/static/app.css">
</head>
<body>
<div class="v-layout">
{% include "_sidebar.html" %}
<main class="v-main">
<header class="v-topbar">
<div>
<div class="v-title">Операции</div>
<div class="v-subtitle">Журнал фоновых действий Virtuality</div>
</div>
<div class="top-meta">
<span>user: {{ user }}</span>
<a class="link-pill" href="/">← Дашборд</a>
<form method="post" action="/logout" class="logout-form"><input type="hidden" name="csrf_token" value="{{ csrf_token }}"><button class="ghost">Выйти</button></form>
</div>
</header>
<section class="card">
<div class="card-head">
<h2>Последние операции</h2>
<span class="pill">/var/log/virtuality/operations</span>
</div>
<table>
<thead>
<tr><th>Операция</th><th>Статус</th><th>Создана</th><th>Действие</th></tr>
</thead>
<tbody>
{% for operation in operations %}
<tr>
<td>
<div class="strong">{{ operation.title }}</div>
<div class="muted small-note">{{ operation.message }}</div>
</td>
<td><span class="status {{ operation_css(operation.status) }}">{{ operation.status }}</span></td>
<td>{{ operation.created_at }}</td>
<td><a class="link-pill" href="/operations/{{ operation.id }}">Открыть</a></td>
</tr>
{% else %}
<tr><td colspan="4" class="muted">Журнал операций пуст</td></tr>
{% endfor %}
</tbody>
</table>
</section>
</main>
</div>
<script src="/static/panel.js" defer></script>
</body>
</html>