Files

150 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { verifyToken, extractToken } from '../../utils/jwt.js'
import { testWebhook, testTelegram, testEmail, testServerChan } from '../../utils/notification.js'
export default defineEventHandler(async (event) => {
try {
// 验证登录
const token = extractToken(event)
if (!token) {
throw createError({
statusCode: 401,
message: '请先登录'
})
}
const user = await verifyToken(token)
if (!user) {
throw createError({
statusCode: 401,
message: 'Token 无效或已过期'
})
}
// 获取请求体中的配置
const body = await readBody(event)
const { webhook, telegram, email, serverchan, method } = body
// 根据通知方式测试
if (method === 'serverchan') {
// 测试 Server酱
if (!serverchan?.sendKey) {
throw createError({
statusCode: 400,
message: '请提供 Server酱 SendKey'
})
}
const result = await testServerChan({
sendKey: serverchan.sendKey
})
if (!result.success) {
return {
success: false,
message: result.error || '测试失败'
}
}
return {
success: true,
message: '测试通知发送成功'
}
} else if (method === 'email') {
// 测试 Email
if (!email?.service || !email?.user || !email?.pass) {
throw createError({
statusCode: 400,
message: '请提供完整的邮件配置(service、user、pass)'
})
}
const result = await testEmail({
service: email.service,
user: email.user,
pass: email.pass,
to: email.to || ''
})
if (!result.success) {
return {
success: false,
message: result.error || '测试失败'
}
}
return {
success: true,
message: '测试通知发送成功'
}
} else if (method === 'telegram') {
// 测试 Telegram
if (!telegram?.token || !telegram?.chatId) {
throw createError({
statusCode: 400,
message: '请提供 Telegram Token 和 Chat ID'
})
}
const result = await testTelegram({
token: telegram.token,
chatId: telegram.chatId
})
if (!result.success) {
return {
success: false,
message: result.error || '测试失败'
}
}
return {
success: true,
message: '测试通知发送成功'
}
} else {
// 默认测试 Webhook
if (!webhook?.url) {
throw createError({
statusCode: 400,
message: '请提供 Webhook URL'
})
}
const result = await testWebhook({
url: webhook.url,
method: webhook.method || 'POST',
contentType: webhook.contentType || 'application/json',
headers: webhook.headers || {},
bodyTemplate: webhook.bodyTemplate || JSON.stringify({
type: '{{type}}',
title: '{{title}}',
message: '{{message}}',
timestamp: '{{timestamp}}',
data: '{{data}}'
}, null, 2)
})
if (!result.success) {
return {
success: false,
message: result.error || '测试失败'
}
}
return {
success: true,
message: '测试通知发送成功'
}
}
} catch (error) {
if (error.statusCode) {
throw error
}
console.error('[Notification] 测试通知失败:', error)
throw createError({
statusCode: 500,
message: '测试失败: ' + error.message
})
}
})