| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { Hono } from 'hono'
- import { cors } from 'hono/cors'
- import type { Context as HonoContext } from 'hono'
- import { Auth } from '@d8d-appcontainer/auth'
- import type { User as AuthUser } from '@d8d-appcontainer/auth'
- import { APIClient } from '@d8d-appcontainer/api'
- import type { SystemSettingRecord } from '../client/share/types.ts'
- import debug from "debug"
- const log = {
- auth: debug('auth:server')
- }
- // 定义自定义上下文类型
- export interface Variables {
- auth: Auth
- user?: AuthUser
- apiClient: APIClient
- moduleDir: string
- systemSettings?: SystemSettingRecord
- }
- // 认证中间件
- export const withAuth = async (c: HonoContext<{ Variables: Variables }>, next: () => Promise<void>) => {
- try {
- const auth = c.get('auth')
-
- const token = c.req.header('Authorization')?.replace('Bearer ', '')
- if (token) {
- const userData = await auth.verifyToken(token)
- if (userData) {
- c.set('user', userData)
- await next()
- return
- }
- }
-
- return c.json({ error: '未授权' }, 401)
- } catch (error) {
- log.auth('认证失败:', error)
- return c.json({ error: '无效凭证' }, 401)
- }
- }
- // 导出withAuth类型定义
- export type WithAuth = typeof withAuth;
- // 环境变量设置中间件
- export const setEnvVariables = (apiClient: APIClient, moduleDir: string, auth: Auth) => {
- return async (c: HonoContext<{ Variables: Variables }>, next: () => Promise<void>) => {
- c.set('apiClient', apiClient)
- c.set('moduleDir', moduleDir)
- c.set('auth', auth)
- c.set('systemSettings', await initSystemSettings(apiClient))
- await next()
- }
- }
- // CORS中间件
- export const corsMiddleware = cors()
- // 初始化系统设置
- const initSystemSettings = async (apiClient: APIClient) => {
- try {
- const systemSettings = await apiClient.database.table('system_settings')
- .select()
-
- // 将系统设置转换为键值对形式
- const settings = systemSettings.reduce((acc: Record<string, any>, setting: any) => {
- acc[setting.key] = setting.value
- return acc
- }, {}) as SystemSettingRecord
-
- return settings
-
- } catch (error) {
- log.auth('获取系统设置失败:', error)
- return {} as SystemSettingRecord
- }
- }
|