mirror of
https://github.com/chaos-zhu/easynode.git
synced 2026-10-07 13:38:14 +08:00
118 lines
3.2 KiB
JavaScript
118 lines
3.2 KiB
JavaScript
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
|
|
}
|