Files
squid-manager/templates/login.html
T
Hermes Agent 4a1d949e41 feat: 完整 Squid Web Manager 平台 - P0-P3 全功能
完整 Web 管理平台,涵盖:

P0 生产加固:
- 会话超时(空闲+绝对) + CSRF 防护 + 登录失败限流
- HTTPS/TLS 证书管理(自签生成/上传/删除/过期提醒)
- SSL Bump (HTTPS 透明代理) 可视化配置
- 配置文件 diff 预览 + 二次确认才写入
- 服务控制二次确认 + 操作期间按钮锁定

P1 运维能力:
- 日志轮转管理(logrotate) + 日志状态监控
- 告警规则(5xx/命中率/磁盘/客户端流量)
- 多 Squid 实例管理 + 一键切换
- squidclient mgr 实时性能指标
- 流量异常检测(突增/大文件/高频小包/新客户端)

P2 日志分析增强:
- 日志持久化到 SQLite + 历史时间范围查询
- 导出 CSV/JSON(日志/KPI/异常/审计)
- GeoIP 地图(Leaflet + ip-api.com 离线可选 GeoLite2)
- 每客户端 24h 趋势图
- 自定义 Squid logformat 解析器

P3 体验锦上添花:
- 暗/亮主题切换(cookie 持久化)
- WebSSH 终端(xterm.js + paramiko)
- 完整审计日志 + 用户管理

技术栈: Flask 3.0 + SQLAlchemy 2.0 + SQLite + Chart.js + Leaflet
总代码量: ~16500 行 (15 Python 模块 + 34 模板 + CSS)
路由数: 73
2026-07-15 10:19:21 +08:00

52 lines
2.1 KiB
HTML

{% extends "base.html" %}
{% block title %}登录 - Squid Manager{% endblock %}
{% block content %}
<div class="login-wrap">
<div class="login-card">
<div class="login-logo">🦑</div>
<h1>Squid Web Manager</h1>
<p class="login-sub">Squid 代理服务器管理平台</p>
{% if throttle_remaining and throttle_remaining > 0 %}
<div class="login-throttle">
⏳ 登录已锁定,请等待 <strong id="throttle-countdown">{{ throttle_remaining }}</strong>
</div>
{% endif %}
<form method="post" action="{{ url_for('login') }}">
<input type="hidden" name="next" value="{{ next }}">
<input type="hidden" name="_csrf" value="{{ csrf_token() }}">
<div class="form-group">
<label>用户名</label>
<input type="text" name="username" required autofocus
autocomplete="username" placeholder="admin"
class="form-input" {% if throttle_remaining and throttle_remaining > 0 %}disabled{% endif %}>
</div>
<div class="form-group">
<label>密码</label>
<input type="password" name="password" required
autocomplete="current-password" class="form-input"
{% if throttle_remaining and throttle_remaining > 0 %}disabled{% endif %}>
</div>
<button type="submit" class="btn btn-primary btn-block"
{% if throttle_remaining and throttle_remaining > 0 %}disabled{% endif %}>
登录
</button>
</form>
<p class="login-hint">默认账号 admin / admin &middot; 首次登录后请修改密码</p>
</div>
</div>
{% endblock %}
{% block scripts %}
{% if throttle_remaining and throttle_remaining > 0 %}
<script>
let s = {{ throttle_remaining }};
const el = document.getElementById('throttle-countdown');
const t = setInterval(() => {
s--;
if (el) el.textContent = s;
if (s <= 0) { clearInterval(t); location.reload(); }
}, 1000);
</script>
{% endif %}
{% endblock %}