4a1d949e41
完整 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
56 lines
2.1 KiB
HTML
56 lines
2.1 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}配置预览 - Squid Manager{% endblock %}
|
|
{% block content %}
|
|
<div class="page-header">
|
|
<h1>🔍 配置变更预览</h1>
|
|
<div class="page-actions">
|
|
<a href="{{ return_to }}" class="btn btn-secondary">← 取消</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h3 class="card-title">📊 变更摘要</h3>
|
|
<div class="diff-summary">
|
|
<span class="diff-stat-add">+ 新增 {{ summary.adds }} 行</span>
|
|
<span class="diff-stat-del">- 删除 {{ summary.dels }} 行</span>
|
|
<span>共 {{ summary.total_changed }} 行变更</span>
|
|
{% if summary.total_changed == 0 %}
|
|
<span class="badge badge-blue">无变更</span>
|
|
{% endif %}
|
|
</div>
|
|
|
|
{% if summary.total_changed > 0 %}
|
|
<div class="diff-warning">
|
|
⚠️ 仔细检查以下变更,确认无误后再点击 <strong>应用配置</strong>。
|
|
配置写入后会自动备份当前文件到 <code>backups/</code>。
|
|
</div>
|
|
{% endif %}
|
|
|
|
{{ diff_html | safe }}
|
|
|
|
{% if summary.total_changed > 0 %}
|
|
<form method="post" action="{{ url_for('config_confirm') }}" style="margin-top:20px;">
|
|
<input type="hidden" name="_csrf" value="{{ csrf_token() }}">
|
|
<input type="hidden" name="pending" value="{{ pending_b64 }}">
|
|
<input type="hidden" name="return_to" value="{{ return_to }}">
|
|
<div class="form-group">
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" name="validate" value="1" checked>
|
|
写入前运行 <code>squid -k parse</code> 校验
|
|
</label>
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="btn btn-primary"
|
|
onclick="return confirm('确认应用此配置?\\n\\n会自动备份当前配置。')">
|
|
✅ 应用配置
|
|
</button>
|
|
<a href="{{ return_to }}" class="btn btn-secondary">取消</a>
|
|
</div>
|
|
</form>
|
|
{% else %}
|
|
<p class="meta-text" style="margin-top:16px;">配置无变化,无需保存。</p>
|
|
<a href="{{ return_to }}" class="btn btn-secondary">返回</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|