From 36fef2cd20631ac2345d2c371cc6f0b653a621e3 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 10 Dec 2020 22:53:11 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8Dbase64=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E4=B8=AD=E5=87=BA=E7=8E=B0/=E4=BC=9A?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=97=A0=E6=B3=95=E4=B8=8B=E8=BD=BD=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +++--- packages/fps-importer/package.json | 4 ++-- packages/hydrojudge/package.json | 10 +++++----- packages/hydrooj/package.json | 12 ++++++------ packages/hydrooj/src/handler/domain.ts | 1 - packages/hydrooj/src/handler/judge.ts | 5 ++++- packages/hydrooj/src/handler/misc.ts | 4 ++-- packages/hydrooj/src/handler/problem.ts | 3 +++ packages/hydrooj/src/model/contest.ts | 2 +- packages/hydrooj/src/model/file.ts | 14 +++++++------- packages/hydrooj/src/model/user.ts | 2 +- packages/hydrooj/src/service/bus.ts | 2 +- packages/hydrooj/src/service/server.ts | 12 ++++++------ packages/import-qduoj/package.json | 4 ++-- packages/login-with-qq/package.json | 2 +- packages/migrate-hustoj/package.json | 2 +- 16 files changed, 45 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index f055bc768..ea3ba5e0c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "devDependencies": { "@shelf/jest-mongodb": "^1.2.3", "@types/cross-spawn": "^6.0.2", - "@types/jest": "^26.0.14", + "@types/jest": "^26.0.18", "@types/node": "^14.14.10", "@types/semver": "^7.3.4", "@typescript-eslint/eslint-plugin": "^3.9.1", @@ -34,12 +34,12 @@ "jest": "^26.6.3", "latest-version": "^5.1.0", "ora": "^5.1.0", - "semver": "^7.3.2", + "semver": "^7.3.4", "ts-jest": "^26.4.4", "typescript": "4.0.3" }, "dependencies": { "fs-extra": "^9.0.1", - "yargs": "^16.1.1" + "yargs": "^16.2.0" } } \ No newline at end of file diff --git a/packages/fps-importer/package.json b/packages/fps-importer/package.json index 3dcdd7bcf..e8d81896a 100644 --- a/packages/fps-importer/package.json +++ b/packages/fps-importer/package.json @@ -7,14 +7,14 @@ "author": "undefined ", "license": "AGPL-3.0-only", "dependencies": { - "adm-zip": "^0.4.16", + "adm-zip": "^0.5.1", "decode-html": "^2.0.0", "fs-extra": "^9.0.1", "xml2js": "^0.4.23" }, "devDependencies": { "@types/xml2js": "^0.4.7", - "bson": "^4.1.0" + "bson": "^4.2.2" }, "peerDependencies": { "hydrooj": "^2.14.0" diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index f7b92109d..11da4c22f 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -6,17 +6,17 @@ "author": "masnn", "repository": "https://github.com/hydro-dev/Hydro.git", "dependencies": { - "adm-zip": "^0.4.16", + "adm-zip": "^0.5.1", "axios": "^0.21.0", - "bson": "^4.1.0", + "bson": "^4.2.2", "fs-extra": "^9.0.1", - "js-yaml": "^3.14.0", + "js-yaml": "^3.14.1", "lodash": "^4.17.20", "p-queue": "^6.6.1", "shell-quote": "^1.7.2", "supports-color": "^8.0.0", - "systeminformation": "^4.30.6", - "yargs": "^16.1.1" + "systeminformation": "^4.31.0", + "yargs": "^16.2.0" }, "peerDependencies": { "hydrooj": "^2.13.3" diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 1ba5d3ca4..0feb3ba49 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.14.7", + "version": "2.14.8", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", @@ -11,12 +11,12 @@ "node": ">=10.10" }, "dependencies": { - "adm-zip": "^0.4.16", + "adm-zip": "^0.5.1", "ansi_up": "^4.0.4", "cookies": "^0.8.0", "detect-browser": "^5.1.1", "fs-extra": "^9.0.1", - "js-yaml": "^3.13.1", + "js-yaml": "^3.14.1", "koa": "^2.13.0", "koa-body": "^4.2.0", "koa-router": "^10.0.0", @@ -31,9 +31,9 @@ "sockjs": "^0.3.20", "superagent": "^6.1.0", "supports-color": "^8.0.0", - "systeminformation": "^4.30.6", + "systeminformation": "^4.31.0", "wtfnode": "^0.8.4", - "yargs": "^16.1.1" + "yargs": "^16.2.0" }, "devDependencies": { "@types/adm-zip": "^0.4.33", @@ -51,7 +51,7 @@ "@types/superagent": "^4.1.8", "@types/supports-color": "^7.2.0", "@types/wtfnode": "^0.7.0", - "@types/yargs": "^15.0.10" + "@types/yargs": "^15.0.11" }, "scripts": { "build": "tsc", diff --git a/packages/hydrooj/src/handler/domain.ts b/packages/hydrooj/src/handler/domain.ts index 169ea95d7..9bcfebdc7 100644 --- a/packages/hydrooj/src/handler/domain.ts +++ b/packages/hydrooj/src/handler/domain.ts @@ -148,7 +148,6 @@ class DomainPermissionHandler extends ManageHandler { : [this.request.body[role]]; // @ts-ignore roles[role] = 0n; - console.log(role, perms); // @ts-ignore for (const r of perms) roles[role] += 1n << BigInt(r); } diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index 9cedcb388..bbd3a4501 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -1,6 +1,7 @@ import { ObjectID } from 'mongodb'; import { JudgeResultBody, Rdoc, TestCase } from '../interface'; import { sleep } from '../utils'; +import { Logger } from '../logger'; import * as record from '../model/record'; import * as problem from '../model/problem'; import * as builtin from '../model/builtin'; @@ -12,6 +13,8 @@ import { Route, Handler, Connection, ConnectionHandler, } from '../service/server'; +const logger = new Logger('judge'); + async function _postJudge(rdoc: Rdoc) { const accept = rdoc.status === builtin.STATUS.STATUS_ACCEPTED; const tasks = []; @@ -135,7 +138,7 @@ class JudgeConnectionHandler extends ConnectionHandler { } async message(msg) { - console.log(msg); + logger.info('%o', msg); if (msg.key === 'next') await next(msg); else if (msg.key === 'end') { await end({ judger: this.user._id, ...msg }); diff --git a/packages/hydrooj/src/handler/misc.ts b/packages/hydrooj/src/handler/misc.ts index 1773da3e3..90aff1dcc 100644 --- a/packages/hydrooj/src/handler/misc.ts +++ b/packages/hydrooj/src/handler/misc.ts @@ -17,8 +17,8 @@ class FileDownloadHandler extends Handler { @param('fileId', Types.ObjectID) @param('secret', Types.String) @param('name', Types.String, true) - async get(domainId: string, fileId: ObjectID, secret: string, name: string) { - if (name) name = Buffer.from(name, 'base64').toString(); + async get(domainId: string, fileId: ObjectID, secret: string, name?: string) { + if (name) name = Buffer.from(name.replace(/~/g, '/'), 'base64').toString(); const doc = await file.getWithSecret(fileId, secret); this.response.attachment(name || fileId.toHexString(), doc); } diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 7e3103447..a60f6265f 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -11,6 +11,7 @@ import { streamToBuffer } from '../utils'; import { Pdoc, User, Rdoc, PathComponent, } from '../interface'; +import { Logger } from '../logger'; import paginate from '../lib/paginate'; import { isTitle, isContent, isPid } from '../lib/validator'; import { ProblemAdd } from '../lib/ui'; @@ -28,6 +29,7 @@ import { export const parseCategory = (value: string) => flatten(value.split('+').map((e) => e.split(','))).map((e) => e.trim()); export const parsePid = (value: string) => (isSafeInteger(value) ? parseInt(value, 10) : value); +const logger = new Logger('problem'); export class ProblemHandler extends Handler { async __prepare() { @@ -226,6 +228,7 @@ export class ProblemDetailHandler extends ProblemHandler { async postRejudge(domainId: string, pid: number) { this.checkPerm(PERM.PERM_REJUDGE_PROBLEM); // TODO maybe async? + console.log(await record.getMulti(domainId, { pid }).count()); await record.getMulti(domainId, { pid }).forEach(async (doc) => { await record.reset(domainId, doc._id, true); await record.judge(domainId, doc._id, -1); diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index 41b764df5..d1c427e5a 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -495,7 +495,7 @@ export const ContestHandlerMixin = (c) => class extends c { async getScoreboard( domainId: string, tid: ObjectID, isExport = false, docType: 30 | 60 = document.TYPE_CONTEST, - ): Promise<[Tdoc, ScoreboardNode[][], Udict]> { + ): Promise<[Tdoc, ScoreboardRow[], Udict]> { const { tdoc, udict, pdict, rankedTsdocs, } = await this.getRawStatus(domainId, tid, docType); diff --git a/packages/hydrooj/src/model/file.ts b/packages/hydrooj/src/model/file.ts index 04623368f..2bbf4ed06 100644 --- a/packages/hydrooj/src/model/file.ts +++ b/packages/hydrooj/src/model/file.ts @@ -97,22 +97,22 @@ export function getMulti(query: any) { return coll.find(query); } -async function _url(_id: ObjectID, name: string | undefined) { +async function _url(_id: ObjectID, name?: string) { const file = await coll.findOne({ _id }); const secret = hash(file.secret, _timestamp().toString()); - if (name) return `/fs/${_id}/${Buffer.from(name).toString('base64')}/${secret}`; + if (name) return `/fs/${_id}/${Buffer.from(name).toString('base64').replace(/\//g, '~')}/${secret}`; return `/fs/${_id}/${secret}`; } -function __url(file: any, name: string | undefined) { +function __url(file: Ufdoc, name?: string) { const secret = hash(file.secret, _timestamp().toString()); - if (name) return `/fs/${file._id}/${Buffer.from(name).toString('base64')}/${secret}`; + if (name) return `/fs/${file._id}/${Buffer.from(name).toString('base64').replace(/\//g, '~')}/${secret}`; return `/fs/${file._id}/${secret}`; } -export function url(_id: ObjectID, name: string | undefined): Promise; -export function url(file: any, name: string | undefined): string; -export function url(arg0: any, name: any) { +export function url(_id: ObjectID, name?: string): Promise; +export function url(file: Ufdoc, name: string): string; +export function url(arg0: ObjectID | Ufdoc, name?: string) { if (arg0 instanceof ObjectID) return _url(arg0, name); return __url(arg0, name); } diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index 008b82768..ea21eaf48 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -221,7 +221,7 @@ export async function create( gravatar: mail, }); } catch (e) { - logger.warn(e); + logger.warn('%o', e); throw new UserAlreadyExistError([uid, uname, mail]); } return uid; diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index d5fa09912..2b670f5e4 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -126,7 +126,7 @@ export async function serial(name: K, ...args: Paramet if (argv.showBus) logger.debug('serial: %s %o', name, args); const hooks = Array.from(_hooks[name] || []); for (const callback of hooks) { - if (argv.busDetail) console.log(callback.toString()); + if (argv.busDetail) logger.debug(callback.toString()); await callback.apply(this, args); } } diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index bf8b992c2..10eae3cef 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -443,9 +443,9 @@ export class Handler { res = router.url(name, args, { query }); if (anchor) return `${res}#${anchor}`; } catch (e) { - console.error(e.message); - console.log(name, args); - console.log(e.stack); + logger.warn(e.message); + logger.info('%s %o', name, args); + logger.info('%s', e.stack); } return res; } @@ -790,8 +790,8 @@ export class ConnectionHandler { res = router.url(name, args, { query }); if (anchor) return `${res}#${anchor}`; } catch (e) { - console.error(e.message); - console.log(name, args); + logger.error(e.message); + logger.info(name, args); } return res; } @@ -877,7 +877,7 @@ export function Connection( if (h.finish) await h.finish(args); }); } catch (e) { - logger.warn(e); + logger.warn('%o', e); await h.onerror(e); } }); diff --git a/packages/import-qduoj/package.json b/packages/import-qduoj/package.json index c38bac2b0..cdba461e3 100644 --- a/packages/import-qduoj/package.json +++ b/packages/import-qduoj/package.json @@ -7,12 +7,12 @@ "author": "undefined ", "license": "AGPL-3.0-only", "dependencies": { - "adm-zip": "^0.4.16", + "adm-zip": "^0.5.1", "decode-html": "^2.0.0", "fs-extra": "^9.0.1" }, "devDependencies": { - "bson": "^4.1.0" + "bson": "^4.2.2" }, "peerDependencies": { "hydrooj": "^2.14.0" diff --git a/packages/login-with-qq/package.json b/packages/login-with-qq/package.json index 9d7d7a0c2..e1247a03e 100644 --- a/packages/login-with-qq/package.json +++ b/packages/login-with-qq/package.json @@ -13,7 +13,7 @@ "hydrooj": "^2.13.1" }, "dependencies": { - "ws": "^7.4.0" + "ws": "^7.4.1" }, "devDependencies": { "@types/ws": "^7.4.0" diff --git a/packages/migrate-hustoj/package.json b/packages/migrate-hustoj/package.json index e40a7e3db..e75fcee3c 100644 --- a/packages/migrate-hustoj/package.json +++ b/packages/migrate-hustoj/package.json @@ -10,7 +10,7 @@ "build": "tsc" }, "devDependencies": { - "@types/mysql": "^2.15.15" + "@types/mysql": "^2.15.16" }, "peerDependencies": { "hydrooj": "^2.14.0"