From 00586b588364b3a373145dec0967bf24f84d1134 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 27 Apr 2021 22:40:58 +0800 Subject: [PATCH] core: try to fix #121 --- package.json | 6 +++--- packages/hydrojudge/package.json | 2 +- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/user.ts | 2 +- packages/hydrooj/src/lib/testdataConfig.ts | 2 +- packages/hydrooj/src/model/record.ts | 9 +++++++-- packages/hydrooj/src/model/user.ts | 8 ++++++-- packages/login-with-qq/package.json | 4 ++-- 8 files changed, 22 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 45f2131a9..7d1c10c8e 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,13 @@ "devDependencies": { "@shelf/jest-mongodb": "^1.2.3", "@types/cross-spawn": "^6.0.2", - "@types/jest": "^26.0.22", + "@types/jest": "^26.0.23", "@types/node": "^14.14.41", - "@types/semver": "^7.3.4", + "@types/semver": "^7.3.5", "@typescript-eslint/eslint-plugin": "^4.21.0", "@typescript-eslint/parser": "^4.21.0", "cross-spawn": "^7.0.3", - "eslint": "^7.23.0", + "eslint": "^7.25.0", "eslint-config-airbnb-typescript": "^12.0.0", "eslint-import-resolver-typescript": "^2.4.0", "eslint-plugin-import": "^2.22.1", diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 6edfabcba..cd6cffb1f 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -15,7 +15,7 @@ "lodash": "^4.17.21", "p-queue": "^6.6.1", "shell-quote": "^1.7.2", - "ws": "^7.4.4", + "ws": "^7.4.5", "yargs": "^16.2.0" }, "license": "AGPL-3.0-only", diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index b40539620..01a3496cf 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.23.27", + "version": "2.23.28", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index 37fb8c9f7..429f97544 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -123,7 +123,7 @@ class UserRegisterWithCodeHandler extends Handler { const uid = await user.create(tdoc.mail, uname, password, undefined, this.request.ip); await token.del(code, token.TYPE_REGISTRATION); this.session.uid = uid; - this.session.scpoe = PERM.PERM_ALL; + this.session.scpoe = PERM.PERM_ALL.toString(); this.response.redirect = this.url('homepage'); } } diff --git a/packages/hydrooj/src/lib/testdataConfig.ts b/packages/hydrooj/src/lib/testdataConfig.ts index d00aad1fc..efc9345c9 100644 --- a/packages/hydrooj/src/lib/testdataConfig.ts +++ b/packages/hydrooj/src/lib/testdataConfig.ts @@ -19,7 +19,7 @@ export async function parseConfig(config: string | ProblemConfig = {}) { timeMax: 0, }; let cfg: ProblemConfig = {}; - if (typeof config === 'string' && config.length) { + if (typeof config === 'string') { // TODO should validate here? cfg = await readYamlCases(load(config) as Record); } else if (typeof config === 'object') cfg = await readYamlCases(config); diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index 07fa10e48..da12aa7e9 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -10,6 +10,7 @@ import task from './task'; import problem from './problem'; import { Rdoc, ContestInfo, ProblemConfig } from '../interface'; import { ArgMethod, Time } from '../utils'; +import { MaybeArray } from '../typeutils'; import * as bus from '../service/bus'; import db from '../service/db'; @@ -109,7 +110,7 @@ class RecordModel { } static async update( - domainId: string, _id: ObjectID, + domainId: string, _id: MaybeArray, $set?: MatchKeysAndValues, $push?: PushOperator, $unset?: OnlyFieldsOfType, @@ -118,6 +119,10 @@ class RecordModel { if ($set && Object.keys($set).length) $update.$set = $set; if ($push && Object.keys($push).length) $update.$push = $push; if ($unset && Object.keys($unset).length) $update.$unset = $unset; + if (_id instanceof Array) { + await RecordModel.coll.updateMany({ _id: { $in: _id }, domainId }, $update); + return null; + } if (Object.keys($update).length) { const res = await RecordModel.coll.findOneAndUpdate( { _id, domainId }, @@ -143,7 +148,7 @@ class RecordModel { return res.modifiedCount; } - static reset(domainId: string, rid: ObjectID, isRejudge: boolean) { + static reset(domainId: string, rid: MaybeArray, isRejudge: boolean) { const upd: any = { score: 0, status: STATUS.STATUS_WAITING, diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index bae4895a1..d034cda04 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -115,12 +115,13 @@ class UserModel { }; @ArgMethod - static async getById(domainId: string, _id: number, scope: bigint = PERM.PERM_ALL): Promise { + static async getById(domainId: string, _id: number, scope: bigint | string = PERM.PERM_ALL): Promise { const udoc = _id === 0 || _id === 1 ? BUILTIN_USERS[_id] : await coll.findOne({ _id }); if (!udoc) return null; const dudoc = await domain.getDomainUser(domainId, udoc); + if (typeof scope === 'string') scope = BigInt(scope); return new User(udoc, dudoc, scope); } @@ -197,7 +198,10 @@ class UserModel { uid: number = 0, regip: string = '127.0.0.1', priv: number = system.get('default.priv'), ) { const salt = String.random(); - if (!uid) uid = await system.inc('user'); + if (!uid) { + const [udoc] = await coll.find({}).sort({ _id: -1 }).limit(1).toArray(); + uid = Math.max((udoc._id || 0) + 1, 2); + } try { await coll.insertOne({ _id: uid, diff --git a/packages/login-with-qq/package.json b/packages/login-with-qq/package.json index ab5ec2ff9..e2d6a7213 100644 --- a/packages/login-with-qq/package.json +++ b/packages/login-with-qq/package.json @@ -6,9 +6,9 @@ "author": "undefined ", "license": "MIT", "dependencies": { - "ws": "^7.4.4" + "ws": "^7.4.5" }, "devDependencies": { "@types/ws": "^7.4.1" } -} \ No newline at end of file +}