Files
api-worker/apps/worker/src/middleware/adminAuth.ts
T
lsy 3bcc9ebb99 refactor(app): 管理台模块化并整理 worker API 类型
- 拆分管理台入口为 App/feature/core 结构并更新样式/配置
- 规范 worker 路由/中间件/服务类型与 JSON 解析
- 同步工具链与知识库记录
2026-02-16 00:48:49 +08:00

37 lines
1.1 KiB
TypeScript

import { createMiddleware } from "hono/factory";
import type { AppEnv } from "../env";
import { sha256Hex } from "../utils/crypto";
import { jsonError } from "../utils/http";
import { getBearerToken } from "../utils/request";
/**
* Validates admin session tokens for management APIs.
*/
export const adminAuth = createMiddleware<AppEnv>(async (c, next) => {
const token = getBearerToken(c);
if (!token) {
return jsonError(c, 401, "admin_token_required", "admin_token_required");
}
const tokenHash = await sha256Hex(token);
const session = await c.env.DB.prepare(
"SELECT id, expires_at FROM admin_sessions WHERE token_hash = ?",
)
.bind(tokenHash)
.first();
if (!session) {
return jsonError(c, 401, "invalid_admin_token", "invalid_admin_token");
}
if (new Date(String(session.expires_at)).getTime() <= Date.now()) {
await c.env.DB.prepare("DELETE FROM admin_sessions WHERE id = ?")
.bind(String(session.id))
.run();
return jsonError(c, 401, "admin_session_expired", "admin_session_expired");
}
c.set("adminSessionId", String(session.id));
await next();
});