Files

85 lines
2.6 KiB
JavaScript

import db from '../../utils/db.js'
import { verifyToken, extractToken } from '../../utils/jwt.js'
import { getDefaultContentSafetyConfig, MODERATION_PROVIDERS } from '../../utils/moderation.js'
export default defineEventHandler(async (event) => {
try {
// 检查是否登录(可选)
const token = extractToken(event)
let isAdmin = false
if (token) {
const user = await verifyToken(token)
isAdmin = !!user
}
// 获取公共 API 配置
const config = await db.settings.findOne({ key: 'publicApiConfig' })
const defaultConfig = {
enabled: true,
allowedFormats: ['jpeg', 'jpg', 'png', 'gif', 'webp', 'avif', 'svg', 'bmp', 'ico', 'apng', 'tiff', 'tif'],
maxFileSize: 10 * 1024 * 1024,
enableCompression: false,
compressionQuality: 80,
convertToWebp: false,
convertToPng: false,
convertToJpg: false,
rateLimit: 10,
allowConcurrent: false,
contentSafety: getDefaultContentSafetyConfig()
}
let configData = config?.value || defaultConfig
// 确保 contentSafety 配置完整(兼容旧数据)
if (!configData.contentSafety) {
configData.contentSafety = getDefaultContentSafetyConfig()
} else {
// 确保每个 provider 的配置完整(包括默认 apiKey)
const defaultProviders = getDefaultContentSafetyConfig().providers
for (const [key, defaultProvider] of Object.entries(defaultProviders)) {
if (configData.contentSafety.providers?.[key]) {
// 如果没有 apiKey,使用默认值
if (!configData.contentSafety.providers[key].apiKey) {
configData.contentSafety.providers[key].apiKey = defaultProvider.apiKey
}
// 如果没有 name,使用默认值
if (!configData.contentSafety.providers[key].name) {
configData.contentSafety.providers[key].name = defaultProvider.name
}
}
}
}
// 未登录用户只返回上传所需的基本配置
if (!isAdmin) {
return {
success: true,
data: {
enabled: configData.enabled,
allowedFormats: configData.allowedFormats,
maxFileSize: configData.maxFileSize,
allowConcurrent: configData.allowConcurrent
}
}
}
// 登录用户返回完整配置
return {
success: true,
data: configData
}
} catch (error) {
if (error.statusCode) {
throw error
}
console.error('[Config] 获取公共 API 配置失败:', error)
throw createError({
statusCode: 500,
message: '获取配置失败'
})
}
})