LL-007+ · 邮箱 HTML 美化 · 服务器全线部署完成

- revive-guard.py: send_email 改为 HTML 邮件
  深蓝渐变背景 + 湖绿色验证码卡片 + 金色操作指引
  纯文本降级兼容不支持HTML的邮件客户端
- 服务器端部署:
  SG-001 revive-guard 升级到无密码版 + 新UI生效
  Forgejo pre-receive-guard 拦截层已安装
  pre-op-guard SSH 登录钩子已安装
  8个模块已注册到 module-registry
  pre-op-guard 自审正常 · 编码集完整

[SEC-CLEAN] · 部署完毕 · 三层防线全部激活
This commit is contained in:
冰朔 2026-07-11 16:35:05 +08:00
parent 875b4c2381
commit b5e79e031a

View File

@ -27,6 +27,7 @@ Guanghu Language System · Revive Guard
import os, json, time, hmac, hashlib, secrets, smtplib, subprocess, threading import os, json, time, hmac, hashlib, secrets, smtplib, subprocess, threading
from email.mime.text import MIMEText from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from http.server import HTTPServer, BaseHTTPRequestHandler from http.server import HTTPServer, BaseHTTPRequestHandler
# ═══════════════════════════════════════════ # ═══════════════════════════════════════════
@ -68,23 +69,111 @@ def get_server_ip():
def send_email(code, server_ip): def send_email(code, server_ip):
"""小湖灯 · 发送复活验证码到冰朔主权邮箱""" """小湖灯 · 发送复活验证码到冰朔主权邮箱 · HTML 美化版"""
msg = MIMEText(f"""╔══════════════════════════════════╗ html_body = f"""<!DOCTYPE html>
光湖语言系统 · 守门人复活 <html lang="zh">
<head><meta charset="utf-8"></head>
<body style="margin:0;padding:0;background:#0a1628;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif">
<table width="100%" cellpadding="0" cellspacing="0" style="background:#0a1628;padding:40px 0">
<tr><td align="center">
<!-- 主卡片 -->
<table width="480" cellpadding="0" cellspacing="0" style="background:linear-gradient(135deg,#152238 0%,#1a2d4a 100%);border-radius:16px;overflow:hidden;border:1px solid #2a3f5f">
<!-- 头部 -->
<tr>
<td style="padding:32px 32px 20px;text-align:center;border-bottom:1px solid #2a3f5f">
<div style="font-size:13px;color:#4ec9b0;letter-spacing:3px;text-transform:uppercase;margin-bottom:8px">ICE-GL 光湖语言系统</div>
<div style="font-size:20px;color:#e0e8f0;font-weight:600">🛡 守门人复活 · 验证码</div>
</td>
</tr>
<!-- 验证码 -->
<tr>
<td style="padding:28px 32px;text-align:center">
<div style="font-size:11px;color:#6b8299;margin-bottom:12px;letter-spacing:2px"> </div>
<div style="background:linear-gradient(135deg,#0d1b2e,#162840);border:2px solid #4ec9b0;border-radius:12px;padding:20px 12px;display:inline-block">
<span style="font-family:'SF Mono','Fira Code','Cascadia Code',monospace;font-size:36px;font-weight:700;letter-spacing:8px;color:#4ec9b0">{code}</span>
</div>
<div style="margin-top:14px;font-size:12px;color:#c9a84c"> 5 分钟内有效 · 用完即废</div>
</td>
</tr>
<!-- 信息行 -->
<tr>
<td style="padding:0 32px 20px">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td style="padding:10px 16px;background:#0d1b2e;border-radius:8px;margin-bottom:8px">
<span style="color:#6b8299;font-size:11px;letter-spacing:1px">服务器</span><br>
<span style="color:#e0e8f0;font-size:14px;font-weight:500">{server_ip}</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- 操作指引 -->
<tr>
<td style="padding:0 32px 24px">
<div style="background:#0d1b2e;border-radius:10px;padding:16px;border-left:3px solid #c9a84c">
<div style="font-size:12px;color:#c9a84c;margin-bottom:6px">📋 使用方式</div>
<div style="font-size:13px;color:#9ab0cc;line-height:1.8">
将此验证码发给 <span style="color:#4ec9b0">铸渊</span> 铸渊调用<br>
<code style="background:#152238;color:#4ec9b0;padding:2px 6px;border-radius:4px;font-size:12px">POST /revive/confirm</code> 守门人复活
</div>
</div>
</td>
</tr>
<!-- 安全标识 -->
<tr>
<td style="padding:0 32px 10px;text-align:center">
<div style="display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:#0d1b2e;border-radius:20px">
<span style="font-size:11px;color:#6b8299"></span>
<span style="font-size:11px;color:#6b8299">不进仓库 · 不存密码 · 一次即废</span>
</div>
</td>
</tr>
<!-- 底部 -->
<tr>
<td style="padding:20px 32px 28px;text-align:center;border-top:1px solid #2a3f5f;margin-top:10px">
<div style="font-size:11px;color:#4a607a;line-height:1.6">
小湖灯 · 自动发送<br>
国作登字-2026-A-00037559
</div>
</td>
</tr>
</table>
<!-- 页脚光湖标识 -->
<div style="margin-top:16px;font-size:10px;color:#3a506a;letter-spacing:2px">ICE-GL GUANGHU LANGUAGE SYSTEM</div>
</td></tr>
</table>
</body>
</html>"""
# 纯文本降级版(邮件客户端不支持 HTML 时显示)
plain_body = f"""光湖语言系统 · 守门人复活
服务器: {server_ip}
验证码: {code} 验证码: {code}
服务器: {server_ip}
有效期: 5 分钟用完即废 有效期: 5 分钟用完即废
将此验证码发给铸渊 铸渊调 /revive/confirm 复活守门人 将此验证码发给铸渊 /revive/confirm
验证码用一次就扔 · 不进仓库 · 不存密码 ICE-GL 小湖灯自动发送
国作登字-2026-A-00037559"""
ICE-GL 光湖语言系统 · 小湖灯自动发送
国作登字-2026-A-00037559""", "plain", "utf-8")
msg["Subject"] = f"🔐 光湖·复活验证码 {code[:3]}***" msg = MIMEMultipart("alternative")
msg.attach(MIMEText(plain_body, "plain", "utf-8"))
msg.attach(MIMEText(html_body, "html", "utf-8"))
msg["Subject"] = f"🔐 光湖 · 复活验证码 {code[:3]}***"
msg["From"] = SMTP_USER msg["From"] = SMTP_USER
msg["To"] = SOVEREIGN_EMAIL msg["To"] = SOVEREIGN_EMAIL