mirror of
https://github.com/qitoqito/psyduck.git
synced 2026-01-11 20:20:43 +08:00
243 lines
7.3 KiB
JavaScript
243 lines
7.3 KiB
JavaScript
import axios from 'axios'
|
|
import ini from 'ini'
|
|
import fs from 'fs'
|
|
|
|
export class Panel {
|
|
constructor(dict = {}) {
|
|
this.dict = dict
|
|
this.env = process.psyDuck.env
|
|
this.type = process.psyDuck.type
|
|
this.func = process.psyDuck
|
|
this.config = {
|
|
baseURL: this.env.QINGLONG_BaseUrl || 'http://127.0.0.1:5700',
|
|
clientId: this.env.QINGLONG_ClientId,
|
|
clientSecret: this.env.QINGLONG_ClientSecret
|
|
};
|
|
this.token = null;
|
|
}
|
|
|
|
async send() {
|
|
switch (this.env.panel) {
|
|
case 'qinglong':
|
|
await this._qlTask()
|
|
break;
|
|
case 'ini':
|
|
await this._iniTask()
|
|
break
|
|
default:
|
|
await this._jsTask()
|
|
break
|
|
}
|
|
}
|
|
|
|
async _qlTask() {
|
|
let envs = await this.getEnvs(`${this.type}_cookie`.toUpperCase())
|
|
// let pins = []
|
|
if (envs.length) {
|
|
// console.log(envs)
|
|
for (let i of envs) {
|
|
let pin = this.func.userName(i.value)
|
|
if (this.dict[pin]) {
|
|
i.value = this.dict[pin]
|
|
let ary = ['_id', 'id', 'name', 'value']
|
|
let d = ary.reduce((v, k) => {
|
|
if (i[k]) {
|
|
v[k] = i[k]
|
|
}
|
|
return v
|
|
}, {})
|
|
let data = await this.setEnvs(d)
|
|
if (data.code == 200) {
|
|
this.func.msg(`更新: ${pin} 成功`)
|
|
}
|
|
else {
|
|
this.func.msg(`更新: ${pin} 失败`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
async _iniTask() {
|
|
let dict = {}
|
|
for (let i in this.func.cookies) {
|
|
if (!['test', 'all', 'local'].includes(i)) {
|
|
dict[i] = this.func.cookies[i]
|
|
}
|
|
}
|
|
for (let i in dict) {
|
|
for (let j in dict[i]) {
|
|
let pin = this.func.userName(dict[i][j])
|
|
if (this.dict[pin]) {
|
|
dict[i][j] = this.dict[pin]
|
|
}
|
|
}
|
|
}
|
|
let text = []
|
|
for (let i in dict) {
|
|
text.push(`[${i}]`)
|
|
for (let j of dict[i]) {
|
|
text.push(j)
|
|
}
|
|
}
|
|
await fs.writeFileSync(`${this.func.abspath}/cookie/${this.type}.ini`, text.join("\n"))
|
|
this.func.msg(`${this.type}.ini 更新成功`)
|
|
}
|
|
|
|
async _jsTask() {
|
|
let dict = {}
|
|
for (let i in this.func.cookies) {
|
|
if (!['test', 'all', 'local'].includes(i)) {
|
|
dict[i] = this.func.cookies[i]
|
|
}
|
|
}
|
|
for (let i in dict) {
|
|
for (let j in dict[i]) {
|
|
let pin = this.func.userName(dict[i][j])
|
|
if (this.dict[pin]) {
|
|
dict[i][j] = this.dict[pin]
|
|
}
|
|
}
|
|
}
|
|
let text = `export default ${JSON.stringify(dict, null, 4)}`
|
|
await fs.writeFileSync(`${this.func.abspath}/cookie/${this.type}.js`, text)
|
|
this.func.msg(`${this.type}.js 更新成功`)
|
|
}
|
|
|
|
// 获取 token
|
|
async getToken() {
|
|
try {
|
|
const response = await axios.get(`${this.config.baseURL}/open/auth/token`, {
|
|
params: {
|
|
client_id: this.config.clientId,
|
|
client_secret: this.config.clientSecret
|
|
}
|
|
});
|
|
this.token = response.data.data.token;
|
|
return this.token;
|
|
} catch (error) {
|
|
console.error('[Error] 获取qinglong token失败', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async setEnvs(data) {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.put(
|
|
`${this.config.baseURL}/open/envs`,
|
|
data,
|
|
{
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
}
|
|
);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('[Error] 更新环境变量失败:', error);
|
|
}
|
|
}
|
|
|
|
// 获取环境变量
|
|
async getEnvs(search = null) {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.get(`${this.config.baseURL}/open/envs?searchValue=${search}`, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data.data;
|
|
} catch (error) {
|
|
console.error('[Error] 获取qinglong环境变量失败:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// 添加环境变量
|
|
async addEnv(name, value, remarks = '') {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.post(`${this.config.baseURL}/open/envs`, [{
|
|
name,
|
|
value,
|
|
remarks
|
|
}], {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('[Error] 添加qinglong环境变量失败');
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// 删除环境变量
|
|
async deleteEnv(envId) {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.delete(`${this.config.baseURL}/open/envs`, {
|
|
data: [envId],
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('[Error] 删除qinglong环境变量失败');
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// 获取定时任务列表
|
|
async getCrons() {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.get(`${this.config.baseURL}/open/crons`, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data.data;
|
|
} catch (error) {
|
|
console.error('[Error] 获取qinglong定时任务失败');
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// 运行任务
|
|
async runCrons(cronIds) {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.put(`${this.config.baseURL}/open/crons/run`, cronIds, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('[Error] 运行qinglong任务失败');
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// 获取任务日志
|
|
async getCronLogs(cronId) {
|
|
const token = await this.getToken();
|
|
try {
|
|
const response = await axios.get(`${this.config.baseURL}/open/crons/${cronId}/log`, {
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`
|
|
}
|
|
});
|
|
return response.data.data;
|
|
} catch (error) {
|
|
console.error('获取任务日志失败:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|