From be2e2e32af41fbf3e7cb5b38ab422cebec9af5e2 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 6 Apr 2023 23:08:12 +0800 Subject: [PATCH] center: use different field for version downgrade --- packages/center/index.ts | 64 +++++++++++++++++++++++------------- packages/center/package.json | 5 +-- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/packages/center/index.ts b/packages/center/index.ts index 94ee06b64..35d4da294 100644 --- a/packages/center/index.ts +++ b/packages/center/index.ts @@ -1,5 +1,6 @@ import assert from 'assert'; import crypto from 'crypto-js'; +import { lt } from 'semver'; import { db, definePlugin, ForbiddenError, Handler, post, Types, yaml, } from 'hydrooj'; @@ -43,30 +44,47 @@ class DataReportHandler extends Handler { throw new ForbiddenError(); } 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, - }, - $setOnInsert: { init: new Date() }, - }, { upsert: true }); + const setPayload = { + 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, + }; + if (old && lt(payload.version, old.version)) { + await coll.updateOne( + { _id: installId }, + { + $push: { + ips: this.request.ip, + }, + $set: { downgrade: setPayload }, + }, + ); + } else { + await coll.updateOne({ _id: installId }, { + $push: { + ips: this.request.ip, + }, + $set: setPayload, + $setOnInsert: { init: new Date() }, + }, { upsert: true }); + } this.ctx.emit('center/report', this, installId, old, payload); - this.response.body = { code: 0 }; + // TODO deliver messages + this.response.body = { code: 0, u: lt(payload.version, old.version) }; } } diff --git a/packages/center/package.json b/packages/center/package.json index 913dc497c..5331b34b5 100644 --- a/packages/center/package.json +++ b/packages/center/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/center", - "version": "0.2.3", + "version": "0.2.4", "main": "index.ts", "repository": "https://github.com/hydro-dev/Hydro.git", "author": "undefined ", @@ -10,6 +10,7 @@ "hydrooj": "*" }, "dependencies": { - "crypto-js": "^4.1.1" + "crypto-js": "^4.1.1", + "semver": "^7.3.8" } }