♻️ 调整utils引用
This commit is contained in:
parent
4e9bfe46d3
commit
beffd97396
@ -3,6 +3,8 @@
|
|||||||
### Features
|
### Features
|
||||||
|
|
||||||
* 支持暗黑主题切换 ✔
|
* 支持暗黑主题切换 ✔
|
||||||
|
* 批量脚本下发执行结果通知重复的bug ✔
|
||||||
|
* 修复交换内存占比的bug ✔
|
||||||
|
|
||||||
## [2.2.0](https://github.com/chaos-zhu/easynode/releases) (2024-08-17)
|
## [2.2.0](https://github.com/chaos-zhu/easynode/releases) (2024-08-17)
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const { readGroupList, writeGroupList, readHostList, writeHostList, randomStr } = require('../utils')
|
const { readGroupList, writeGroupList, readHostList, writeHostList } = require('../utils/storage')
|
||||||
|
|
||||||
async function getGroupList({ res }) {
|
async function getGroupList({ res }) {
|
||||||
let data = await readGroupList()
|
let data = await readGroupList()
|
||||||
|
@ -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 }) {
|
async function getHostList({ res }) {
|
||||||
// console.log('get-host-list')
|
// console.log('get-host-list')
|
||||||
|
@ -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 { sendServerChan, sendEmail } = require('../utils/notify')
|
||||||
// const commonTemp = require('../template/commonTemp')
|
// const commonTemp = require('../template/commonTemp')
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const { readOneKeyRecord, deleteOneKeyRecord } = require('../utils')
|
const { readOneKeyRecord, deleteOneKeyRecord } = require('../utils/storage')
|
||||||
|
|
||||||
async function getOnekeyRecord({ res }) {
|
async function getOnekeyRecord({ res }) {
|
||||||
let data = await readOneKeyRecord()
|
let data = await readOneKeyRecord()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const localShellJson = require('../config/shell.json')
|
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) => {
|
let localShell = JSON.parse(JSON.stringify(localShellJson)).map((item) => {
|
||||||
return { ...item, id: randomStr(10), index: '--', description: item.description + '|内置脚本' }
|
return { ...item, id: randomStr(10), index: '--', description: item.description + '|内置脚本' }
|
||||||
|
@ -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 }) {
|
async function getSSHList({ res }) {
|
||||||
// console.log('get-host-list')
|
// console.log('get-host-list')
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
const jwt = require('jsonwebtoken')
|
const jwt = require('jsonwebtoken')
|
||||||
const axios = require('axios')
|
const axios = require('axios')
|
||||||
const { getNetIPInfo, readKey, writeKey, RSADecryptSync, AESEncryptSync, SHA1Encrypt } = require('../utils')
|
|
||||||
const { asyncSendNotice } = require('../utils/notify')
|
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 }) => {
|
const getpublicKey = async ({ res }) => {
|
||||||
let { publicKey: data } = await readKey()
|
let { publicKey: data } = await readKey()
|
||||||
|
@ -1,20 +1,7 @@
|
|||||||
const NodeRSA = require('node-rsa')
|
const NodeRSA = require('node-rsa')
|
||||||
const { getNetIPInfo, readHostList, writeHostList, readKey, writeKey, randomStr, isProd, AESEncryptSync } = require('./utils')
|
const { readKey, writeKey } = require('./utils/storage')
|
||||||
|
const { randomStr } = require('./utils/tools')
|
||||||
const isDev = !isProd()
|
const { AESEncryptSync } = require('./utils/encrypt')
|
||||||
|
|
||||||
// 存储本机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)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化公私钥, 供登录、保存ssh密钥/密码等加解密
|
// 初始化公私钥, 供登录、保存ssh密钥/密码等加解密
|
||||||
async function initRsa() {
|
async function initRsa() {
|
||||||
@ -43,7 +30,6 @@ async function randomJWTSecret() {
|
|||||||
module.exports = async () => {
|
module.exports = async () => {
|
||||||
await randomJWTSecret() // 全局密钥
|
await randomJWTSecret() // 全局密钥
|
||||||
await initRsa() // 全局公钥密钥
|
await initRsa() // 全局公钥密钥
|
||||||
// initLocalIp() // :TODO: 默认添加服务端vps
|
|
||||||
// 用于记录客户端登录IP的列表
|
// 用于记录客户端登录IP的列表
|
||||||
global.loginRecord = []
|
global.loginRecord = []
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
const { verifyAuthSync } = require('../utils')
|
|
||||||
const { apiPrefix } = require('../config')
|
const { apiPrefix } = require('../config')
|
||||||
|
const { verifyAuthSync } = require('../utils/verify-auth')
|
||||||
|
|
||||||
let whitePath = [
|
let whitePath = [
|
||||||
'/login',
|
'/login',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const schedule = require('node-schedule')
|
const schedule = require('node-schedule')
|
||||||
const { readHostList, formatTimestamp } = require('../utils')
|
|
||||||
const { asyncSendNotice } = require('../utils/notify')
|
const { asyncSendNotice } = require('../utils/notify')
|
||||||
|
const { readHostList } = require('../utils/storage')
|
||||||
|
const { formatTimestamp } = require('../utils/tools')
|
||||||
|
|
||||||
const expiredNotifyJob = async () => {
|
const expiredNotifyJob = async () => {
|
||||||
consola.info('=====开始检测服务器到期时间=====', new Date())
|
consola.info('=====开始检测服务器到期时间=====', new Date())
|
||||||
|
@ -8,7 +8,7 @@ const wsSftp = require('./socket/sftp')
|
|||||||
// const wsHostStatus = require('./socket/host-status')
|
// const wsHostStatus = require('./socket/host-status')
|
||||||
const wsClientInfo = require('./socket/clients')
|
const wsClientInfo = require('./socket/clients')
|
||||||
const wsOnekey = require('./socket/onekey')
|
const wsOnekey = require('./socket/onekey')
|
||||||
const { throwError } = require('./utils')
|
const { throwError } = require('./utils/tools')
|
||||||
|
|
||||||
const httpServer = () => {
|
const httpServer = () => {
|
||||||
const app = new Koa()
|
const app = new Koa()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
const { Server: ServerIO } = require('socket.io')
|
const { Server: ServerIO } = require('socket.io')
|
||||||
const { io: ClientIO } = require('socket.io-client')
|
const { io: ClientIO } = require('socket.io-client')
|
||||||
const { readHostList } = require('../utils')
|
const { readHostList } = require('../utils/storage')
|
||||||
const { clientPort } = require('../config')
|
const { clientPort } = require('../config')
|
||||||
const { verifyAuthSync } = require('../utils')
|
const { verifyAuthSync } = require('../utils/verify-auth')
|
||||||
|
|
||||||
let clientSockets = []
|
let clientSockets = []
|
||||||
let clientsData = {}
|
let clientsData = {}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const { Server: ServerIO } = require('socket.io')
|
const { Server: ServerIO } = require('socket.io')
|
||||||
const { io: ClientIO } = require('socket.io-client')
|
const { io: ClientIO } = require('socket.io-client')
|
||||||
const { clientPort } = require('../config')
|
const { clientPort } = require('../config')
|
||||||
const { verifyAuthSync } = require('../utils')
|
const { verifyAuthSync } = require('../utils/verify-auth')
|
||||||
|
|
||||||
let hostSockets = {}
|
let hostSockets = {}
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
const { Server } = require('socket.io')
|
const { Server } = require('socket.io')
|
||||||
const { Client: SSHClient } = require('ssh2')
|
const { Client: SSHClient } = require('ssh2')
|
||||||
const { readHostList, readSSHRecord, verifyAuthSync, AESDecryptSync, writeOneKeyRecord, shellThrottle } = require('../utils')
|
|
||||||
const { asyncSendNotice } = require('../utils/notify')
|
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 = {
|
const execStatusEnum = {
|
||||||
connecting: '连接中',
|
connecting: '连接中',
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
const { Server } = require('socket.io')
|
|
||||||
const SFTPClient = require('ssh2-sftp-client')
|
|
||||||
const rawPath = require('path')
|
const rawPath = require('path')
|
||||||
const fs = require('fs-extra')
|
const fs = require('fs-extra')
|
||||||
|
const SFTPClient = require('ssh2-sftp-client')
|
||||||
const { readHostList, readSSHRecord, verifyAuthSync, AESDecryptSync } = require('../utils')
|
|
||||||
const { sftpCacheDir } = require('../config')
|
|
||||||
const CryptoJS = require('crypto-js')
|
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) => {
|
const pipeStream = (path, writeStream) => {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
const { Server } = require('socket.io')
|
const { Server } = require('socket.io')
|
||||||
const { Client: SSHClient } = require('ssh2')
|
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')
|
const { asyncSendNotice } = require('../utils/notify')
|
||||||
|
|
||||||
function createInteractiveShell(socket, sshClient) {
|
function createInteractiveShell(socket, sshClient) {
|
||||||
|
@ -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
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
const nodemailer = require('nodemailer')
|
const nodemailer = require('nodemailer')
|
||||||
const axios = require('axios')
|
const axios = require('axios')
|
||||||
const { getNotifySwByType, readNotifyConfig } = require('../utils')
|
const { getNotifySwByType, readNotifyConfig } = require('../utils/storage')
|
||||||
const commonTemp = require('../template/commonTemp')
|
const commonTemp = require('../template/commonTemp')
|
||||||
|
|
||||||
function sendServerChan(sendKey, title, content) {
|
function sendServerChan(sendKey, title, content) {
|
||||||
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -226,6 +226,11 @@ let shellThrottle = (fn, delay = 1000) => {
|
|||||||
return throttled
|
return throttled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isProd = () => {
|
||||||
|
const EXEC_ENV = process.env.EXEC_ENV || 'production'
|
||||||
|
return EXEC_ENV === 'production'
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getNetIPInfo,
|
getNetIPInfo,
|
||||||
throwError,
|
throwError,
|
||||||
@ -234,5 +239,6 @@ module.exports = {
|
|||||||
getUTCDate,
|
getUTCDate,
|
||||||
formatTimestamp,
|
formatTimestamp,
|
||||||
resolvePath,
|
resolvePath,
|
||||||
shellThrottle
|
shellThrottle,
|
||||||
|
isProd
|
||||||
}
|
}
|
@ -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 = {
|
module.exports = {
|
||||||
verifyAuthSync,
|
verifyAuthSync
|
||||||
isProd
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user