feat: 初始化 kdbx-viewer 项目

实现服务端解密的 KeePass 网页查看器,包含登录门户口令与验证码、RSA+会话级 AES 加密通道、审计日志持久化、HTTPS 自动证书、Docker 部署配置及端到端测试。
这个提交包含在:
2026-08-26 10:42:48 +08:00
当前提交 02e83f5b73
共修改 20 个文件,包含 3356 行新增和 0 行删除
+76
查看文件
@@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>审计日志 - KeePass 查看器</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<div class="audit-page">
<header class="audit-header">
<h1>审计日志</h1>
<div class="audit-actions">
<a href="/" class="btn-ghost">← 返回主界面</a>
<button id="logoutBtn" class="btn-ghost">退出</button>
</div>
</header>
<section class="audit-filters">
<input id="fIp" type="text" placeholder="来源 IP(模糊)">
<select id="fIpType">
<option value="">全部 IP 类型</option>
<option value="external">外网</option>
<option value="internal">内网</option>
</select>
<select id="fCode">
<option value="">全部错误码</option>
<option value="OK">OK(成功)</option>
<option value="AUTH_APP_FAIL">AUTH_APP_FAIL</option>
<option value="CAPTCHA_FAIL">CAPTCHA_FAIL</option>
<option value="IP_BLOCKED">IP_BLOCKED</option>
<option value="AUTH_MASTER_FAIL">AUTH_MASTER_FAIL</option>
<option value="ENC_FAIL">ENC_FAIL</option>
<option value="MISSING">MISSING</option>
<option value="KEY_EXPIRED">KEY_EXPIRED</option>
</select>
<select id="fMethod">
<option value="">全部方法</option>
<option value="GET">GET</option>
<option value="POST">POST</option>
</select>
<input id="fPath" type="text" placeholder="路径关键字">
<label class="chk"><input id="fFail" type="checkbox"> 仅失败</label>
<input id="fFrom" type="datetime-local" title="起始时间">
<input id="fTo" type="datetime-local" title="结束时间">
<button id="searchBtn" class="btn">查询</button>
<button id="resetBtn" class="btn-ghost">重置</button>
</section>
<section class="audit-blocks" id="blocksBox" style="display:none">
<h3>当前被封锁 IP</h3>
<ul id="blocksList"></ul>
</section>
<section class="audit-table-wrap">
<table class="audit-table">
<thead>
<tr>
<th>时间</th><th>来源 IP</th><th>类型</th><th>直连地址</th><th>XFF</th>
<th>方法</th><th>路径</th><th>状态码</th><th>错误码</th><th>UA</th><th>详情</th><th>会话</th>
</tr>
</thead>
<tbody id="auditBody"></tbody>
</table>
<div class="audit-pager">
<button id="prevPage" class="btn-ghost">上一页</button>
<span id="pageInfo">第 1 页</span>
<button id="nextPage" class="btn-ghost">下一页</button>
<span id="totalInfo"></span>
<span id="indexInfo" class="index-info"></span>
</div>
</section>
</div>
<script src="/audit.js"></script>
</body>
</html>