Files
easynode/server/app/controller/proxy.js
2025-08-03 14:39:02 +08:00

118 lines
3.2 KiB
JavaScript
Raw 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.
const { ProxyDB, HostListDB } = require('../utils/db-class')
const proxyDB = new ProxyDB().getInstance()
const hostListDB = new HostListDB().getInstance()
const getProxyList = async ({ res }) => {
try {
let data = await proxyDB.findAsync({})
data = data.map(item => ({ ...item, id: item._id }))
data?.sort((a, b) => new Date(b.createTime || 0) - new Date(a.createTime || 0))
res.success({ data })
} catch (error) {
res.fail({ data: false, msg: '获取代理列表失败' })
}
}
const addProxy = async ({ res, request }) => {
try {
let { body: { type, name, host, port, username, password } } = request
if (!type || !name || !host || !port) {
return res.fail({ data: false, msg: '参数错误:类型、名称、主机、端口为必填项' })
}
// 验证端口号
const portNum = Number(port)
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535) {
return res.fail({ data: false, msg: '端口号必须是1-65535之间的整数' })
}
let record = {
type,
name,
host,
port: portNum,
username: username || '',
password: password || '',
createTime: new Date().toISOString()
}
await proxyDB.insertAsync(record)
res.success({ data: '添加成功' })
} catch (error) {
res.fail({ data: false, msg: '添加代理失败' })
}
}
const updateProxy = async ({ res, request }) => {
try {
let { params: { id } } = request
let { body: { type, name, host, port, username, password } } = request
if (!id || !type || !name || !host || !port) {
return res.fail({ data: false, msg: '参数错误ID、类型、名称、主机、端口为必填项' })
}
// 验证端口号
const portNum = Number(port)
if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535) {
return res.fail({ data: false, msg: '端口号必须是1-65535之间的整数' })
}
let target = await proxyDB.findOneAsync({ _id: id })
if (!target) {
return res.fail({ data: false, msg: `代理ID ${ id } 不存在` })
}
await proxyDB.updateAsync(
{ _id: id },
{
$set: {
type,
name,
host,
port: portNum,
username: username || '',
password: password || '',
updateTime: new Date().toISOString()
}
}
)
res.success({ data: '修改成功' })
} catch (error) {
res.fail({ data: false, msg: '修改代理失败' })
}
}
const removeProxy = async ({ res, request }) => {
try {
let { params: { id } } = request
if (!id) {
return res.fail({ data: false, msg: '参数错误缺少代理ID' })
}
let target = await proxyDB.findOneAsync({ _id: id })
if (!target) {
return res.fail({ data: false, msg: `代理ID ${ id } 不存在` })
}
await proxyDB.removeAsync({ _id: id })
// 删除代理后将所有使用该代理的实例的proxyServer设置为空
await hostListDB.updateAsync({ proxyServer: id }, { $set: { proxyServer: '' } })
res.success({ data: '删除成功' })
} catch (error) {
res.fail({ data: false, msg: '删除代理失败' })
}
}
module.exports = {
getProxyList,
addProxy,
updateProxy,
removeProxy
}