easynode/server/app/utils/storage.js
2024-10-22 22:02:05 +08:00

232 lines
6.1 KiB
JavaScript

const { KeyDB, SshRecordDB, NotifyDB, NotifyConfigDB, ScriptsDB, OnekeyDB } = require('./db-class')
const readKey = async () => {
return new Promise((resolve, reject) => {
const keyDB = new KeyDB().getInstance()
keyDB.findOne({}, (err, doc) => {
if (err) {
reject(err)
} else {
resolve(doc)
}
})
})
}
const writeKey = async (keyObj = {}) => {
const keyDB = new KeyDB().getInstance()
return new Promise((resolve, reject) => {
keyDB.update({}, { $set: keyObj }, { upsert: true }, (err, numReplaced) => {
if (err) {
reject(err)
} else {
keyDB.compactDatafile()
resolve(numReplaced)
}
})
})
}
const readSSHRecord = async () => {
const sshRecordDB = new SshRecordDB().getInstance()
return new Promise((resolve, reject) => {
sshRecordDB.find({}, (err, docs) => {
if (err) {
consola.error('读取ssh-record-db错误: ', err)
reject(err)
} else {
resolve(docs)
}
})
})
}
const writeSSHRecord = async (record = []) => {
return new Promise((resolve, reject) => {
const sshRecordDB = new SshRecordDB().getInstance()
sshRecordDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空SSHRecord出错:', err)
reject(err)
} else {
sshRecordDB.compactDatafile()
sshRecordDB.insert(record, (err, newDocs) => {
if (err) {
consola.error('写入新的ssh记录出错:', err)
reject(err)
} else {
sshRecordDB.compactDatafile()
resolve(newDocs)
}
})
}
})
})
}
const readNotifyConfig = async () => {
return new Promise((resolve, reject) => {
const notifyConfigDB = new NotifyConfigDB().getInstance()
notifyConfigDB.findOne({}, (err, doc) => {
if (err) {
reject(err)
} else {
resolve(doc)
}
})
})
}
const writeNotifyConfig = async (keyObj = {}) => {
const notifyConfigDB = new NotifyConfigDB().getInstance()
return new Promise((resolve, reject) => {
notifyConfigDB.update({}, { $set: keyObj }, { upsert: true }, (err, numReplaced) => {
if (err) {
reject(err)
} else {
notifyConfigDB.compactDatafile()
resolve(numReplaced)
}
})
})
}
const getNotifySwByType = async (type) => {
if (!type) throw Error('missing params: type')
try {
let notifyList = await readNotifyList()
let { sw } = notifyList.find((item) => item.type === type)
return sw
} catch (error) {
consola.error(`通知类型[${ type }]不存在`)
return false
}
}
const readNotifyList = async () => {
return new Promise((resolve, reject) => {
const notifyDB = new NotifyDB().getInstance()
notifyDB.find({}, (err, docs) => {
if (err) {
consola.error('读取notify list错误: ', err)
reject(err)
} else {
resolve(docs)
}
})
})
}
const writeNotifyList = async (notifyList) => {
return new Promise((resolve, reject) => {
const notifyDB = new NotifyDB().getInstance()
notifyDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空notify list出错:', err)
reject(err)
} else {
notifyDB.compactDatafile()
notifyDB.insert(notifyList, (err, newDocs) => {
if (err) {
consola.error('写入新的notify list出错:', err)
reject(err)
} else {
notifyDB.compactDatafile()
resolve(newDocs)
}
})
}
})
})
}
const readScriptList = async () => {
return new Promise((resolve, reject) => {
const scriptsDB = new ScriptsDB().getInstance()
scriptsDB.find({}, (err, docs) => {
if (err) {
consola.error('读取scripts list错误: ', err)
reject(err)
} else {
resolve(docs)
}
})
})
}
const writeScriptList = async (list = []) => {
return new Promise((resolve, reject) => {
const scriptsDB = new ScriptsDB().getInstance()
scriptsDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空scripts list出错:', err)
reject(err)
} else {
scriptsDB.compactDatafile()
scriptsDB.insert(list, (err, newDocs) => {
if (err) {
consola.error('写入新的group list出错:', err)
reject(err)
} else {
scriptsDB.compactDatafile()
resolve(newDocs)
}
})
}
})
})
}
const readOneKeyRecord = async () => {
return new Promise((resolve, reject) => {
const onekeyDB = new OnekeyDB().getInstance()
onekeyDB.find({}, (err, docs) => {
if (err) {
consola.error('读取onekey record错误: ', err)
reject(err)
} else {
onekeyDB.compactDatafile()
resolve(docs)
}
})
})
}
const writeOneKeyRecord = async (records =[]) => {
return new Promise((resolve, reject) => {
const onekeyDB = new OnekeyDB().getInstance()
onekeyDB.insert(records, (err, newDocs) => {
if (err) {
consola.error('写入新的onekey记录出错:', err)
reject(err)
} else {
onekeyDB.compactDatafile()
resolve(newDocs)
}
})
})
}
const deleteOneKeyRecord = async (ids =[]) => {
return new Promise((resolve, reject) => {
const onekeyDB = new OnekeyDB().getInstance()
onekeyDB.remove({ _id: { $in: ids } }, { multi: true }, function (err, numRemoved) {
if (err) {
consola.error('Error deleting onekey record(s):', err)
reject(err)
} else {
onekeyDB.compactDatafile()
resolve(numRemoved)
}
})
})
}
module.exports = {
readSSHRecord, writeSSHRecord,
readKey, writeKey,
readNotifyList, writeNotifyList,
readNotifyConfig, writeNotifyConfig, getNotifySwByType,
readScriptList, writeScriptList,
readOneKeyRecord, writeOneKeyRecord, deleteOneKeyRecord
}