diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index d85666264..b40adf86b 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.15.23", + "version": "2.15.24", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index a5afe144f..a8c7b4b1d 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -165,7 +165,6 @@ export class ProblemRandomHandler extends ProblemHandler { export class ProblemDetailHandler extends ProblemHandler { pdoc: Pdoc; - udoc: User; @route('pid', Types.String, true, null, parsePid) @@ -213,6 +212,12 @@ export class ProblemDetailHandler extends ProblemHandler { }); this.back(); } + + async postDelete() { + if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM); + await problem.del(this.pdoc.domainId, this.pdoc.docId); + this.response.redirect = this.url('problem_main'); + } } export class ProblemExportHandler extends ProblemDetailHandler { @@ -464,7 +469,6 @@ export class ProblemFilesHandler extends ProblemDetailHandler { async postUploadFile(domainId: string, filename: string, type = 'testdata') { if (!this.request.files.file) throw new ValidationError('file'); if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM); - else this.checkPerm(PERM.PERM_EDIT_PROBLEM_SELF); if (filename === 'testdata.zip') { const zip = new AdmZip(this.request.files.file.path); const entries = zip.getEntries(); @@ -489,7 +493,6 @@ export class ProblemFilesHandler extends ProblemDetailHandler { @post('type', Types.Range(['testdata', 'additional_file']), true) async postDeleteFiles(domainId: string, files: string[], type = 'testdata') { if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM); - else this.checkPerm(PERM.PERM_EDIT_PROBLEM_SELF); if (type === 'testdata') { await problem.delTestdata(domainId, this.pdoc.docId, files); } else { diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 703c37e80..c221aed8e 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -141,6 +141,7 @@ export function del(domainId: string, docId: number) { return Promise.all([ document.deleteOne(domainId, document.TYPE_PROBLEM, docId), document.deleteMultiStatus(domainId, document.TYPE_PROBLEM, { docId }), + storage.list(`problem/${domainId}/${docId}/`, true).then((items) => storage.del(items.map((item) => item.prefix + item.name))), bus.parallel('problem/delete', domainId, docId), ]); } diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 570bf3c51..ee039cf43 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -660,10 +660,10 @@ export function Route(name: string, path: string, RouteHandler: any, ...permPriv export class ConnectionHandler extends HandlerCommon { conn: sockjs.Connection; - args: any; + args: Record; request: { - params: any; - headers: any; + params: Record; + headers: Record; ip: string; }