150 lines
3.6 KiB
JavaScript
150 lines
3.6 KiB
JavaScript
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
|
||
})
|
||
}
|
||
}) |