core: 添加handler/create和handler/init事件

This commit is contained in:
undefined committed 2021-03-27 14:18:23 +08:00
1 parent f7478ab346
commit 3040f17702
5 files changed
+14 -2

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "hydrooj", "name": "hydrooj",
"version": "2.20.40", "version": "2.20.41",
"bin": "bin/hydrooj.js", "bin": "bin/hydrooj.js",
"main": "dist/loader.js", "main": "dist/loader.js",
"typings": "dist/loader.d.ts", "typings": "dist/loader.d.ts",
+1 -1
View File
@@ -379,7 +379,7 @@ export class ProblemFilesHandler extends ProblemDetailHandler {
async postUploadFile(domainId: string, filename: string, type = 'testdata') { async postUploadFile(domainId: string, filename: string, type = 'testdata') {
if (!this.request.files.file) throw new ValidationError('file'); if (!this.request.files.file) throw new ValidationError('file');
if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM); if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
if (filename === 'testdata.zip') { if (filename.endsWith('.zip')) {
const zip = new AdmZip(this.request.files.file.path); const zip = new AdmZip(this.request.files.file.path);
const entries = zip.getEntries(); const entries = zip.getEntries();
for (const entry of entries) { for (const entry of entries) {
+4
View File
@@ -4,6 +4,10 @@ import 'reflect-metadata';
/* eslint-disable import/no-dynamic-require */ /* eslint-disable import/no-dynamic-require */
/* eslint-disable no-await-in-loop */ /* eslint-disable no-await-in-loop */
/* eslint-disable no-eval */ /* eslint-disable no-eval */
const versionNum = +process.version.replace(/v/gim, '').split('.')[0];
if (versionNum < 14) throw new Error('NodeJS >=v14 required');
if (!global.Hydro) { if (!global.Hydro) {
global.Hydro = { global.Hydro = {
stat: { reqCount: 0 }, stat: { reqCount: 0 },
+3
View File
@@ -4,6 +4,7 @@ import type {
Db, FilterQuery, ObjectID, OnlyFieldsOfType, Db, FilterQuery, ObjectID, OnlyFieldsOfType,
} from 'mongodb'; } from 'mongodb';
import { argv } from 'yargs'; import { argv } from 'yargs';
import type { Handler } from './server';
import { Logger } from '../logger'; import { Logger } from '../logger';
import type { import type {
Mdoc, Pdoc, Rdoc, TrainingDoc, User, Mdoc, Pdoc, Rdoc, TrainingDoc, User,
@@ -60,6 +61,8 @@ export interface EventMap {
$set: any, $unset: OnlyFieldsOfType<DocType[T], any, true | '' | 1> $set: any, $unset: OnlyFieldsOfType<DocType[T], any, true | '' | 1>
) => VoidReturn ) => VoidReturn
'handler/create': (thisArg: Handler) => VoidReturn
'handler/init': (thisArg: Handler) => VoidReturn
'handler/solution/get': (thisArg: ProblemSolutionHandler) => VoidReturn 'handler/solution/get': (thisArg: ProblemSolutionHandler) => VoidReturn
'discussion/before-add': ( 'discussion/before-add': (
+5
View File
@@ -18,6 +18,7 @@ import sockjs from 'sockjs';
import type { SetOption } from 'cookies'; import type { SetOption } from 'cookies';
import serialize, { SerializeJSOptions } from 'serialize-javascript'; import serialize, { SerializeJSOptions } from 'serialize-javascript';
import { argv } from 'yargs'; import { argv } from 'yargs';
import * as bus from './bus';
import { errorMessage, lrucache } from '../utils'; import { errorMessage, lrucache } from '../utils';
import { User, DomainDoc } from '../interface'; import { User, DomainDoc } from '../interface';
import { Logger } from '../logger'; import { Logger } from '../logger';
@@ -616,6 +617,8 @@ async function handle(ctx, HandlerClass, checker) {
.replace(/_([a-z])/gm, (s) => s[1].toUpperCase()); .replace(/_([a-z])/gm, (s) => s[1].toUpperCase());
} }
await bus.serial('handler/create', h);
await h.init(args); await h.init(args);
if (checker) checker.call(h); if (checker) checker.call(h);
if (method === 'post') { if (method === 'post') {
@@ -630,6 +633,8 @@ async function handle(ctx, HandlerClass, checker) {
throw new MethodNotAllowedError(method); throw new MethodNotAllowedError(method);
} }
await bus.serial('handler/init', h);
if (h._prepare) await h._prepare(args); if (h._prepare) await h._prepare(args);
if (h.prepare) await h.prepare(args); if (h.prepare) await h.prepare(args);