♻️ 调整utils引用

This commit is contained in:
chaos-zhu 2024-08-18 15:02:31 +08:00
parent 4e9bfe46d3
commit beffd97396
23 changed files with 46 additions and 234 deletions

View File

@ -3,6 +3,8 @@
### Features
* 支持暗黑主题切换 ✔
* 批量脚本下发执行结果通知重复的bug ✔
* 修复交换内存占比的bug ✔
## [2.2.0](https://github.com/chaos-zhu/easynode/releases) (2024-08-17)

View File

@ -1,4 +1,4 @@
const { readGroupList, writeGroupList, readHostList, writeHostList, randomStr } = require('../utils')
const { readGroupList, writeGroupList, readHostList, writeHostList } = require('../utils/storage')
async function getGroupList({ res }) {
let data = await readGroupList()

View File

@ -1,4 +1,5 @@
const { readHostList, writeHostList, RSADecryptSync, AESEncryptSync, AESDecryptSync } = require('../utils')
const { readHostList, writeHostList } = require('../utils/storage')
const { RSADecryptSync, AESEncryptSync, AESDecryptSync } = require('../utils/encrypt')
async function getHostList({ res }) {
// console.log('get-host-list')

View File

@ -1,4 +1,4 @@
const { readNotifyConfig, writeNotifyConfig, readNotifyList, writeNotifyList } = require('../utils')
const { readNotifyConfig, writeNotifyConfig, readNotifyList, writeNotifyList } = require('../utils/storage')
const { sendServerChan, sendEmail } = require('../utils/notify')
// const commonTemp = require('../template/commonTemp')

View File

@ -1,4 +1,4 @@
const { readOneKeyRecord, deleteOneKeyRecord } = require('../utils')
const { readOneKeyRecord, deleteOneKeyRecord } = require('../utils/storage')
async function getOnekeyRecord({ res }) {
let data = await readOneKeyRecord()

View File

@ -1,5 +1,6 @@
const localShellJson = require('../config/shell.json')
const { readScriptList, writeScriptList, randomStr } = require('../utils')
const { readScriptList, writeScriptList } = require('../utils/storage')
const { randomStr } = require('../utils/tools')
let localShell = JSON.parse(JSON.stringify(localShellJson)).map((item) => {
return { ...item, id: randomStr(10), index: '--', description: item.description + '|内置脚本' }

View File

@ -1,4 +1,5 @@
const { readSSHRecord, writeSSHRecord, readHostList, writeHostList, RSADecryptSync, AESEncryptSync, AESDecryptSync } = require('../utils')
const { readSSHRecord, writeSSHRecord, readHostList, writeHostList } = require('../utils/storage')
const { RSADecryptSync, AESEncryptSync, AESDecryptSync } = require('../utils/encrypt')
async function getSSHList({ res }) {
// console.log('get-host-list')

View File

@ -1,7 +1,9 @@
const jwt = require('jsonwebtoken')
const axios = require('axios')
const { getNetIPInfo, readKey, writeKey, RSADecryptSync, AESEncryptSync, SHA1Encrypt } = require('../utils')
const { asyncSendNotice } = require('../utils/notify')
const { readKey, writeKey } = require('../utils/storage')
const { RSADecryptSync, AESEncryptSync, SHA1Encrypt } = require('../utils/encrypt')
const { getNetIPInfo } = require('../utils/tools')
const getpublicKey = async ({ res }) => {
let { publicKey: data } = await readKey()

View File

@ -1,20 +1,7 @@
const NodeRSA = require('node-rsa')
const { getNetIPInfo, readHostList, writeHostList, readKey, writeKey, randomStr, isProd, AESEncryptSync } = require('./utils')
const isDev = !isProd()
// 存储本机IP, 供host列表接口调用
// eslint-disable-next-line no-unused-vars
async function initLocalIp() {
if(isDev) return consola.info('非生产环境不初始化保存本地IP')
const localNetIPInfo = await getNetIPInfo()
let vpsList = await readHostList()
let { ip: localNetIP } = localNetIPInfo
if(vpsList.some(({ host }) => host === localNetIP)) return consola.info('本机IP已储存: ', localNetIP)
vpsList.unshift({ name: 'server-side-host', host: localNetIP, group: 'default' })
writeHostList(vpsList)
consola.info('Task: 生产环境首次启动储存本机IP: ', localNetIP)
}
const { readKey, writeKey } = require('./utils/storage')
const { randomStr } = require('./utils/tools')
const { AESEncryptSync } = require('./utils/encrypt')
// 初始化公私钥, 供登录、保存ssh密钥/密码等加解密
async function initRsa() {
@ -43,7 +30,6 @@ async function randomJWTSecret() {
module.exports = async () => {
await randomJWTSecret() // 全局密钥
await initRsa() // 全局公钥密钥
// initLocalIp() // :TODO: 默认添加服务端vps
// 用于记录客户端登录IP的列表
global.loginRecord = []
}

View File

@ -1,5 +1,5 @@
const { verifyAuthSync } = require('../utils')
const { apiPrefix } = require('../config')
const { verifyAuthSync } = require('../utils/verify-auth')
let whitePath = [
'/login',

View File

@ -1,6 +1,7 @@
const schedule = require('node-schedule')
const { readHostList, formatTimestamp } = require('../utils')
const { asyncSendNotice } = require('../utils/notify')
const { readHostList } = require('../utils/storage')
const { formatTimestamp } = require('../utils/tools')
const expiredNotifyJob = async () => {
consola.info('=====开始检测服务器到期时间=====', new Date())

View File

@ -8,7 +8,7 @@ const wsSftp = require('./socket/sftp')
// const wsHostStatus = require('./socket/host-status')
const wsClientInfo = require('./socket/clients')
const wsOnekey = require('./socket/onekey')
const { throwError } = require('./utils')
const { throwError } = require('./utils/tools')
const httpServer = () => {
const app = new Koa()

View File

@ -1,8 +1,8 @@
const { Server: ServerIO } = require('socket.io')
const { io: ClientIO } = require('socket.io-client')
const { readHostList } = require('../utils')
const { readHostList } = require('../utils/storage')
const { clientPort } = require('../config')
const { verifyAuthSync } = require('../utils')
const { verifyAuthSync } = require('../utils/verify-auth')
let clientSockets = []
let clientsData = {}

View File

@ -1,7 +1,7 @@
const { Server: ServerIO } = require('socket.io')
const { io: ClientIO } = require('socket.io-client')
const { clientPort } = require('../config')
const { verifyAuthSync } = require('../utils')
const { verifyAuthSync } = require('../utils/verify-auth')
let hostSockets = {}

View File

@ -1,7 +1,10 @@
const { Server } = require('socket.io')
const { Client: SSHClient } = require('ssh2')
const { readHostList, readSSHRecord, verifyAuthSync, AESDecryptSync, writeOneKeyRecord, shellThrottle } = require('../utils')
const { asyncSendNotice } = require('../utils/notify')
const { readSSHRecord, readHostList, writeOneKeyRecord } = require('../utils/storage')
const { verifyAuthSync } = require('../utils/verify-auth')
const { shellThrottle } = require('../utils/tools')
const { AESDecryptSync } = require('../utils/encrypt')
const execStatusEnum = {
connecting: '连接中',

View File

@ -1,11 +1,12 @@
const { Server } = require('socket.io')
const SFTPClient = require('ssh2-sftp-client')
const rawPath = require('path')
const fs = require('fs-extra')
const { readHostList, readSSHRecord, verifyAuthSync, AESDecryptSync } = require('../utils')
const { sftpCacheDir } = require('../config')
const SFTPClient = require('ssh2-sftp-client')
const CryptoJS = require('crypto-js')
const { Server } = require('socket.io')
const { sftpCacheDir } = require('../config')
const { verifyAuthSync } = require('../utils/verify-auth')
const { AESDecryptSync } = require('../utils/encrypt')
const { readSSHRecord, readHostList } = require('../utils/storage')
// 读取切片
const pipeStream = (path, writeStream) => {

View File

@ -1,6 +1,8 @@
const { Server } = require('socket.io')
const { Client: SSHClient } = require('ssh2')
const { readHostList, readSSHRecord, verifyAuthSync, AESDecryptSync } = require('../utils')
const { verifyAuthSync } = require('../utils/verify-auth')
const { AESDecryptSync } = require('../utils/encrypt')
const { readSSHRecord, readHostList } = require('../utils/storage')
const { asyncSendNotice } = require('../utils/notify')
function createInteractiveShell(socket, sshClient) {

View File

@ -1,57 +0,0 @@
const {
readSSHRecord,
writeSSHRecord,
readHostList,
writeHostList,
readKey,
writeKey,
readGroupList,
writeGroupList,
readScriptList,
writeScriptList,
readOneKeyRecord,
writeOneKeyRecord,
deleteOneKeyRecord,
readNotifyConfig,
writeNotifyConfig,
getNotifySwByType,
readNotifyList,
writeNotifyList
} = require('./storage')
const { RSADecryptSync, AESEncryptSync, AESDecryptSync, SHA1Encrypt } = require('./encrypt')
const { verifyAuthSync, isProd } = require('./verify-auth')
const { getNetIPInfo, throwError, isIP, randomStr, getUTCDate, formatTimestamp, shellThrottle } = require('./tools')
module.exports = {
getNetIPInfo,
throwError,
isIP,
randomStr,
getUTCDate,
formatTimestamp,
shellThrottle,
verifyAuthSync,
isProd,
RSADecryptSync,
AESEncryptSync,
AESDecryptSync,
SHA1Encrypt,
readSSHRecord,
writeSSHRecord,
readHostList,
writeHostList,
readKey,
writeKey,
readGroupList,
writeGroupList,
readScriptList,
writeScriptList,
readOneKeyRecord,
writeOneKeyRecord,
deleteOneKeyRecord,
readNotifyConfig,
writeNotifyConfig,
getNotifySwByType,
readNotifyList,
writeNotifyList
}

View File

@ -1,6 +1,6 @@
const nodemailer = require('nodemailer')
const axios = require('axios')
const { getNotifySwByType, readNotifyConfig } = require('../utils')
const { getNotifySwByType, readNotifyConfig } = require('../utils/storage')
const commonTemp = require('../template/commonTemp')
function sendServerChan(sendKey, title, content) {

View File

@ -1,84 +0,0 @@
const osu = require('node-os-utils')
const os = require('os')
let cpu = osu.cpu
let mem = osu.mem
let drive = osu.drive
let netstat = osu.netstat
let osuOs = osu.os
let users = osu.users
async function cpuInfo() {
let cpuUsage = await cpu.usage(200)
let cpuCount = cpu.count()
let cpuModel = cpu.model()
return {
cpuUsage,
cpuCount,
cpuModel
}
}
async function memInfo() {
let memInfo = await mem.info()
return {
...memInfo
}
}
async function driveInfo() {
let driveInfo = {}
try {
driveInfo = await drive.info()
} catch {
// console.log(driveInfo)
}
return driveInfo
}
async function netstatInfo() {
let netstatInfo = await netstat.inOut()
return netstatInfo === 'not supported' ? {} : netstatInfo
}
async function osInfo() {
let type = os.type()
let platform = os.platform()
let release = os.release()
let uptime = osuOs.uptime()
let ip = osuOs.ip()
let hostname = osuOs.hostname()
let arch = osuOs.arch()
return {
type,
platform,
release,
ip,
hostname,
arch,
uptime
}
}
async function openedCount() {
let openedCount = await users.openedCount()
return openedCount === 'not supported' ? 0 : openedCount
}
module.exports = async () => {
let data = {}
try {
data = {
cpuInfo: await cpuInfo(),
memInfo: await memInfo(),
driveInfo: await driveInfo(),
netstatInfo: await netstatInfo(),
osInfo: await osInfo(),
openedCount: await openedCount()
}
return data
} catch(err){
console.error('获取系统信息出错:', err)
return err.toString()
}
}

View File

@ -1,47 +0,0 @@
// based off of https://github.com/apaszke/tcp-ping
// rewritten with modern es6 syntax & promises
const { io: ClientIO } = require('socket.io-client')
const testConnectAsync = (options) => {
let connectTimes = 0
options = Object.assign({ retryTimes: 3, timeout: 5000, host: 'http://localhost', port: '80' }, options)
const { retryTimes, host, port, timeout } = options
// eslint-disable-next-line
return new Promise(async (resolve, reject) => {
while (connectTimes < retryTimes) {
try {
connectTimes++
await connect({ host, port, timeout })
break
} catch (error) {
// 重连次数达到限制仍未连接成功
if(connectTimes === retryTimes) {
reject({ message: error.message, host, port, connectTimes })
return
}
}
}
resolve({ status: 'connect_success', host, port, connectTimes })
})
}
const connect = (options) => {
const { host, port, timeout } = options
return new Promise((resolve, reject) => {
let io = ClientIO(`${ host }:${ port }`, {
path: '/client/os-info',
forceNew: false,
timeout,
reconnection: false
})
.on('connect', () => {
resolve()
io.disconnect()
})
.on('connect_error', (error) => {
reject(error)
})
})
}
module.exports = testConnectAsync

View File

@ -226,6 +226,11 @@ let shellThrottle = (fn, delay = 1000) => {
return throttled
}
const isProd = () => {
const EXEC_ENV = process.env.EXEC_ENV || 'production'
return EXEC_ENV === 'production'
}
module.exports = {
getNetIPInfo,
throwError,
@ -234,5 +239,6 @@ module.exports = {
getUTCDate,
formatTimestamp,
resolvePath,
shellThrottle
shellThrottle,
isProd
}

View File

@ -23,12 +23,6 @@ const verifyAuthSync = async (token, clientIp) => {
}
}
const isProd = () => {
const EXEC_ENV = process.env.EXEC_ENV || 'production'
return EXEC_ENV === 'production'
}
module.exports = {
verifyAuthSync,
isProd
verifyAuthSync
}