Compare commits

..

No commits in common. "ae4e462be69f4a831ff10b6961cb787102abdb56" and "35194d796ac49536ea5e9477f636dcd6ff13e9e5" have entirely different histories.

8 changed files with 275 additions and 214 deletions

File diff suppressed because one or more lines are too long

View File

@ -5,28 +5,22 @@ require('dotenv').config();
const { readFile } = require('fs/promises');
const path = require('path');
const fs = require('fs');
const tokenFileList = ['/ql/data/db/keyv.sqlite', '/ql/data/config/auth.json', '/ql/config/auth.json'];
let authFile = getLatestFile(tokenFileList);
let Fileexists280 = fs.existsSync('/ql/data/db/keyv.sqlite');
let Fileexists = fs.existsSync('/ql/data/config/auth.json');
let authFile = "";
if (Fileexists280)
authFile = "/ql/data/db/keyv.sqlite"
else if (Fileexists)
authFile = "/ql/data/config/auth.json"
else
authFile = "/ql/config/auth.json"
const api = got.extend({
prefixUrl: 'http://127.0.0.1:5600',
retry: { limit: 0 },
});
function getLatestFile(files) {
let latestFile = null;
let latestMtime = 0;
for (const file of files) {
try {
const stats = fs.statSync(file);
const mtime = stats.mtimeMs;
if (mtime > latestMtime) {
latestMtime = mtime;
latestFile = file;
}
} catch (e) {
}
}
return latestFile;
}
async function getToken() {
const authConfig = await readFile(authFile);
// console.log(authConfig.toString().match(/"token":"(.*?)",/)[1])

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

236
ql.js
View File

@ -1,43 +1,119 @@
'use strict'
'use strict';
const got = require('got')
require('dotenv').config()
const { readFile } = require('fs/promises')
const path = require('path')
const got = require('got');
require('dotenv').config();
const { readFile } = require('fs/promises');
const path = require('path');
const qlDir = '/ql'
const fs = require('fs')
const tokenFileList = ['/ql/data/db/keyv.sqlite', '/ql/data/config/auth.json', '/ql/config/auth.json']
const qlDir = '/ql';
const fs = require('fs');
//const authFile = path.join(qlDir, 'config/auth.json');
let authFile = getLatestFile(tokenFileList)
const api = got.extend({
prefixUrl: 'http://127.0.0.1:5600',
retry: { limit: 0 },
})
function getLatestFile(files) {
let latestFile = null
let latestMtime = 0
for (const file of files) {
responseType: 'json'
});
global.versionPromise = null;
module.exports.getVersion = () => {
return api({
url: 'api/system',
headers: {
Accept: 'application/json',
},
}).then(response => {
return response.body.data.version;
}).catch(error => {
console.error('Error fetching version:', error.response ? error.response.body : error.message);
throw error;
});
};
let authFile = "";
(function initialize() {
global.versionPromise = module.exports.getVersion();
global.versionPromise.then(version => {
console.log('当前青龙版本:', version + "\n");
if (version) {
if (version >= '2.18.0') {
authFile = "/ql/data/db/keyv.sqlite";
} else if (version < '2.12.0') {
authFile = "/ql/config/auth.json";
} else {
authFile = "/ql/data/config/auth.json";
}
} else {
// 当检测不到版本号时,采用 version < '2.12.0' 的操作
authFile = "/ql/config/auth.json";
}
}).catch(error => {
console.error('Error after initialization:', error);
});
})();
async function getAuthFile() {
await global.versionPromise;
return authFile;
}
async function getTokenFromSqlite(dbPath) {
const sqlite3 = require('sqlite3').verbose();
return new Promise((resolve, reject) => {
const db = new sqlite3.Database(dbPath, (err) => {
if (err) {
return reject(err);
}
db.serialize(() => {
db.get('SELECT value FROM keyv WHERE key = ?', ['keyv:authInfo'], (err, row) => {
if (err) {
db.close((closeErr) => {
if (closeErr) {
console.error('Error closing database:', closeErr);
}
reject(err);
});
return;
}
let token = null;
if (row && row.value) {
try {
const stats = fs.statSync(file)
const mtime = stats.mtimeMs
if (mtime > latestMtime) {
latestMtime = mtime
latestFile = file
const parsedData = JSON.parse(row.value);
token = parsedData.value.token;
} catch (parseErr) {
console.error('Error parsing JSON:', parseErr);
reject(parseErr);
return;
}
} catch (e) {}
}
return latestFile
resolve(token);
db.close((closeErr) => {
if (closeErr) {
console.error('Error closing database:', closeErr);
}
});
});
});
});
});
}
async function getToken() {
const authConfig = await readFile(authFile)
// console.log(authConfig.toString().match(/"token":"(.*?)",/)[1])
return authConfig.toString().match(/"token":"(.*?)",/)[1]
const authFilePath = await getAuthFile();
if (authFilePath.endsWith('keyv.sqlite')) {
return getTokenFromSqlite(authFilePath);
} else {
const authConfig = JSON.parse(await readFile(authFilePath));
return authConfig.token;
}
}
module.exports.getEnvs = async () => {
const token = await getToken()
const token = await getToken();
const body = await api({
url: 'api/envs',
searchParams: {
@ -48,39 +124,37 @@ module.exports.getEnvs = async () => {
Accept: 'application/json',
authorization: `Bearer ${token}`,
},
}).json()
return body.data
}
}).json();
return body.data;
};
module.exports.getEnvsCount = async () => {
const data = await this.getEnvs()
return data.length
}
const data = await this.getEnvs();
return data.length;
};
module.exports.addEnv = async (cookie, remarks) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'post',
url: 'api/envs',
params: { t: Date.now() },
json: [
{
json: [{
name: 'JD_COOKIE',
value: cookie,
remarks,
},
],
}],
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};
module.exports.updateEnv = async (cookie, eid, remarks) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
@ -96,12 +170,12 @@ module.exports.updateEnv = async (cookie, eid, remarks) => {
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};
module.exports.updateEnv11 = async (cookie, eid, remarks) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
@ -117,12 +191,12 @@ module.exports.updateEnv11 = async (cookie, eid, remarks) => {
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};
module.exports.DisableCk = async (eid) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/disable',
@ -133,12 +207,12 @@ module.exports.DisableCk = async (eid) => {
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};
module.exports.EnableCk = async (eid) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/enable',
@ -149,59 +223,59 @@ module.exports.EnableCk = async (eid) => {
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};
module.exports.getstatus = async (eid) => {
const envs = await this.getEnvs()
var tempid = 0
const envs = await this.getEnvs();
var tempid = 0;
for (let i = 0; i < envs.length; i++) {
tempid = 0
tempid = 0;
if (envs[i]._id) {
tempid = envs[i]._id
tempid = envs[i]._id;
}
if (envs[i].id) {
tempid = envs[i].id
tempid = envs[i].id;
}
if (tempid == eid) {
return envs[i].status
return envs[i].status;
}
}
return 99
}
return 99;
};
module.exports.getEnvById = async (eid) => {
const envs = await this.getEnvs()
var tempid = 0
const envs = await this.getEnvs();
var tempid = 0;
for (let i = 0; i < envs.length; i++) {
tempid = 0
tempid = 0;
if (envs[i]._id) {
tempid = envs[i]._id
tempid = envs[i]._id;
}
if (envs[i].id) {
tempid = envs[i].id
tempid = envs[i].id;
}
if (tempid == eid) {
return envs[i].value
return envs[i].value;
}
}
return ''
}
return "";
};
module.exports.getEnvByPtPin = async (Ptpin) => {
const envs = await this.getEnvs()
const envs = await this.getEnvs();
for (let i = 0; i < envs.length; i++) {
var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1])
var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
if (tempptpin == Ptpin) {
return envs[i]
return envs[i];
}
}
return ''
}
return "";
};
module.exports.delEnv = async (eid) => {
const token = await getToken()
const token = await getToken();
const body = await api({
method: 'delete',
url: 'api/envs',
@ -212,6 +286,6 @@ module.exports.delEnv = async (eid) => {
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json()
return body
}
}).json();
return body;
};

File diff suppressed because one or more lines are too long