mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: use common plugin-api interface
This commit is contained in:
1 parent
c61c875bee
commit
70a96aecac
54 files changed
+387
-566
No files matched your search
@@ -0,0 +1,65 @@
|
||||
import assert from 'assert';
|
||||
import crypto from 'crypto';
|
||||
import {
|
||||
Context, db, Handler, post, Types, yaml,
|
||||
} from 'hydrooj';
|
||||
|
||||
function decrypt(encrypted: string) {
|
||||
if (!encrypted) throw new Error();
|
||||
const decipher = crypto.createDecipheriv('des-ecb', 'hydro-oj', '');
|
||||
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
||||
decrypted += decipher.final('utf8');
|
||||
return decrypted;
|
||||
}
|
||||
|
||||
declare module 'hydrooj' {
|
||||
interface Collections {
|
||||
dataReport: any;
|
||||
}
|
||||
}
|
||||
|
||||
const coll = db.collection('dataReport');
|
||||
|
||||
class DataReportHandler extends Handler {
|
||||
noCheckPermView = true;
|
||||
|
||||
@post('installId', Types.String)
|
||||
@post('payload', Types.String)
|
||||
async post(domainId: string, installId: string, _payload: string) {
|
||||
let payload: any;
|
||||
try {
|
||||
payload = yaml.load(decrypt(_payload));
|
||||
} catch (e) {
|
||||
payload = yaml.load(_payload);
|
||||
}
|
||||
assert(payload.url);
|
||||
const old = await coll.findOne({ _id: installId });
|
||||
await coll.updateOne({ _id: installId }, {
|
||||
$set: {
|
||||
version: payload.version,
|
||||
name: payload.name,
|
||||
url: payload.url,
|
||||
addons: payload.addons,
|
||||
mem: payload.memory,
|
||||
osinfo: payload.osinfo,
|
||||
cpu: payload.cpu,
|
||||
ip: this.request.ip,
|
||||
flags: payload.flags,
|
||||
update: new Date(),
|
||||
domainCount: payload.domainCount,
|
||||
userCount: payload.userCount,
|
||||
problemCount: payload.problemCount,
|
||||
discussionCount: payload.discussionCount,
|
||||
recordCount: payload.recordCount,
|
||||
sandbox: payload.sandbox,
|
||||
dbVersion: payload.dbVersion,
|
||||
},
|
||||
}, { upsert: true });
|
||||
bus.emit('center/report', this, installId, old, payload);
|
||||
this.response.body = { code: 0 };
|
||||
}
|
||||
}
|
||||
|
||||
export function apply(ctx: Context) {
|
||||
ctx.Route('data_report', '/center/report', DataReportHandler);
|
||||
}
|
||||
Reference in new issue
Block a user