From 3d4aa0ba214df615f9fdeaa5a938097f5540a266 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 20 Sep 2022 22:47:14 +0800 Subject: [PATCH] core: use disposable handler --- packages/center/handler.ts | 4 +-- packages/fps-importer/handler.ts | 2 +- packages/hydrooj/src/handler/blog.ts | 4 +-- packages/hydrooj/src/handler/contest.ts | 26 ++++++++-------- packages/hydrooj/src/handler/discussion.ts | 24 ++++++--------- packages/hydrooj/src/handler/domain.ts | 26 ++++++++-------- packages/hydrooj/src/handler/home.ts | 22 ++++++------- packages/hydrooj/src/handler/homework.ts | 22 ++++++------- packages/hydrooj/src/handler/import.ts | 8 ++--- packages/hydrooj/src/handler/judge.ts | 10 +++--- packages/hydrooj/src/handler/manage.ts | 22 ++++++------- packages/hydrooj/src/handler/misc.ts | 16 +++++----- packages/hydrooj/src/handler/problem.ts | 36 ++++++++++------------ packages/hydrooj/src/handler/record.ts | 14 ++++----- packages/hydrooj/src/handler/status.ts | 12 +++----- packages/hydrooj/src/handler/training.ts | 16 ++++------ packages/hydrooj/src/handler/user.ts | 26 ++++++++-------- packages/import-qduoj/handler.ts | 8 ++--- 18 files changed, 130 insertions(+), 168 deletions(-) diff --git a/packages/center/handler.ts b/packages/center/handler.ts index feac6c147..5ecf8da86 100644 --- a/packages/center/handler.ts +++ b/packages/center/handler.ts @@ -3,9 +3,7 @@ import crypto from 'crypto'; import yaml from 'js-yaml'; import * as bus from 'hydrooj/src/service/bus'; import db from 'hydrooj/src/service/db'; -import { - Handler, post, Route, Types, -} from 'hydrooj/src/service/server'; +import { Handler, post, Types } from 'hydrooj/src/service/server'; function decrypt(encrypted: string) { if (!encrypted) throw new Error(); diff --git a/packages/fps-importer/handler.ts b/packages/fps-importer/handler.ts index e147eece6..3396d653e 100644 --- a/packages/fps-importer/handler.ts +++ b/packages/fps-importer/handler.ts @@ -11,7 +11,7 @@ import { ProblemAdd } from 'hydrooj/src/lib/ui'; import { PERM } from 'hydrooj/src/model/builtin'; import problem from 'hydrooj/src/model/problem'; import solution from 'hydrooj/src/model/solution'; -import { Handler, Route } from 'hydrooj/src/service/server'; +import { Handler } from 'hydrooj/src/service/server'; class FpsProblemImportHandler extends Handler { async get() { diff --git a/packages/hydrooj/src/handler/blog.ts b/packages/hydrooj/src/handler/blog.ts index c0b838d58..19d2823f4 100644 --- a/packages/hydrooj/src/handler/blog.ts +++ b/packages/hydrooj/src/handler/blog.ts @@ -7,9 +7,7 @@ import { PRIV } from '../model/builtin'; import * as oplog from '../model/oplog'; import * as system from '../model/system'; import user from '../model/user'; -import { - Handler, param, Route, Types, -} from '../service/server'; +import { Handler, param, Types } from '../service/server'; class BlogHandler extends Handler { ddoc?: BlogDoc; diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 2a51d19ef..ea8eb6780 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -22,7 +22,7 @@ import * as system from '../model/system'; import TaskModel from '../model/task'; import user from '../model/user'; import { - Handler, param, post, Route, Types, + Handler, param, post, Types, } from '../service/server'; import { registerResolver, registerValue } from './api'; @@ -458,17 +458,15 @@ export class ContestFileDownloadHandler extends ContestDetailBaseHandler { } } -export async function apply() { - Route('contest_create', '/contest/create', ContestEditHandler); - Route('contest_main', '/contest', ContestListHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_detail', '/contest/:tid', ContestDetailHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_broadcast', '/contest/:tid/broadcast', ContestBroadcastHandler); - Route('contest_edit', '/contest/:tid/edit', ContestEditHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_scoreboard', '/contest/:tid/scoreboard', ContestScoreboardHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_scoreboard_download', '/contest/:tid/export/:ext', ContestScoreboardHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_code', '/contest/:tid/code', ContestCodeHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_files', '/contest/:tid/file', ContestFilesHandler, PERM.PERM_VIEW_CONTEST); - Route('contest_file_download', '/contest/:tid/file/:filename', ContestFileDownloadHandler, PERM.PERM_VIEW_CONTEST); +export async function apply(ctx) { + ctx.Route('contest_create', '/contest/create', ContestEditHandler); + ctx.Route('contest_main', '/contest', ContestListHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_detail', '/contest/:tid', ContestDetailHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_broadcast', '/contest/:tid/broadcast', ContestBroadcastHandler); + ctx.Route('contest_edit', '/contest/:tid/edit', ContestEditHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_scoreboard', '/contest/:tid/scoreboard', ContestScoreboardHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_scoreboard_download', '/contest/:tid/export/:ext', ContestScoreboardHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_code', '/contest/:tid/code', ContestCodeHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_files', '/contest/:tid/file', ContestFilesHandler, PERM.PERM_VIEW_CONTEST); + ctx.Route('contest_file_download', '/contest/:tid/file/:filename', ContestFileDownloadHandler, PERM.PERM_VIEW_CONTEST); } - -global.Hydro.handler.contest = apply; diff --git a/packages/hydrooj/src/handler/discussion.ts b/packages/hydrooj/src/handler/discussion.ts index c182bc2e6..42f842196 100644 --- a/packages/hydrooj/src/handler/discussion.ts +++ b/packages/hydrooj/src/handler/discussion.ts @@ -13,9 +13,7 @@ import message from '../model/message'; import * as oplog from '../model/oplog'; import * as system from '../model/system'; import user from '../model/user'; -import { - Handler, param, Route, Types, -} from '../service/server'; +import { Handler, param, Types } from '../service/server'; export const typeMapper = { problem: document.TYPE_PROBLEM, @@ -425,15 +423,13 @@ class DiscussionEditHandler extends DiscussionHandler { } } -export async function apply() { - Route('discussion_main', '/discuss', DiscussionMainHandler); - Route('discussion_detail', '/discuss/:did', DiscussionDetailHandler); - Route('discussion_edit', '/discuss/:did/edit', DiscussionEditHandler); - Route('discussion_detail', '/discuss/:did/raw', DiscussionRawHandler); - Route('discussion_reply_raw', '/discuss/:did/:drid/raw', DiscussionRawHandler); - Route('discussion_tail_reply_raw', '/discuss/:did/:drid/:drrid/raw', DiscussionRawHandler); - Route('discussion_node', '/discuss/:type/:name', DiscussionNodeHandler); - Route('discussion_create', '/discuss/:type/:name/create', DiscussionCreateHandler, PRIV.PRIV_USER_PROFILE, PERM.PERM_CREATE_DISCUSSION); +export async function apply(ctx) { + ctx.Route('discussion_main', '/discuss', DiscussionMainHandler); + ctx.Route('discussion_detail', '/discuss/:did', DiscussionDetailHandler); + ctx.Route('discussion_edit', '/discuss/:did/edit', DiscussionEditHandler); + ctx.Route('discussion_detail', '/discuss/:did/raw', DiscussionRawHandler); + ctx.Route('discussion_reply_raw', '/discuss/:did/:drid/raw', DiscussionRawHandler); + ctx.Route('discussion_tail_reply_raw', '/discuss/:did/:drid/:drrid/raw', DiscussionRawHandler); + ctx.Route('discussion_node', '/discuss/:type/:name', DiscussionNodeHandler); + ctx.Route('discussion_create', '/discuss/:type/:name/create', DiscussionCreateHandler, PRIV.PRIV_USER_PROFILE, PERM.PERM_CREATE_DISCUSSION); } - -global.Hydro.handler.discussion = apply; diff --git a/packages/hydrooj/src/handler/domain.ts b/packages/hydrooj/src/handler/domain.ts index 8b878d94d..374a0f2a8 100644 --- a/packages/hydrooj/src/handler/domain.ts +++ b/packages/hydrooj/src/handler/domain.ts @@ -16,7 +16,7 @@ import { DOMAIN_SETTINGS, DOMAIN_SETTINGS_BY_KEY } from '../model/setting'; import * as system from '../model/system'; import user from '../model/user'; import { - Handler, param, post, query, Route, Types, + Handler, param, post, query, Types, } from '../service/server'; import { log2 } from '../utils'; import { registerResolver, registerValue } from './api'; @@ -334,17 +334,15 @@ class DomainSearchHandler extends Handler { } } -export async function apply() { - Route('ranking', '/ranking', DomainRankHandler, PERM.PERM_VIEW_RANKING); - Route('domain_dashboard', '/domain/dashboard', DomainDashboardHandler); - Route('domain_edit', '/domain/edit', DomainEditHandler); - Route('domain_user', '/domain/user', DomainUserHandler); - Route('domain_permission', '/domain/permission', DomainPermissionHandler); - Route('domain_role', '/domain/role', DomainRoleHandler); - Route('domain_group', '/domain/group', DomainUserGroupHandler); - Route('domain_join_applications', '/domain/join_applications', DomainJoinApplicationsHandler); - Route('domain_join', '/domain/join', DomainJoinHandler, PRIV.PRIV_USER_PROFILE); - Route('domain_search', '/domain/search', DomainSearchHandler, PRIV.PRIV_USER_PROFILE); +export async function apply(ctx) { + ctx.Route('ranking', '/ranking', DomainRankHandler, PERM.PERM_VIEW_RANKING); + ctx.Route('domain_dashboard', '/domain/dashboard', DomainDashboardHandler); + ctx.Route('domain_edit', '/domain/edit', DomainEditHandler); + ctx.Route('domain_user', '/domain/user', DomainUserHandler); + ctx.Route('domain_permission', '/domain/permission', DomainPermissionHandler); + ctx.Route('domain_role', '/domain/role', DomainRoleHandler); + ctx.Route('domain_group', '/domain/group', DomainUserGroupHandler); + ctx.Route('domain_join_applications', '/domain/join_applications', DomainJoinApplicationsHandler); + ctx.Route('domain_join', '/domain/join', DomainJoinHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('domain_search', '/domain/search', DomainSearchHandler, PRIV.PRIV_USER_PROFILE); } - -global.Hydro.handler.domain = apply; diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index ce04b375e..094b82ec1 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -24,7 +24,7 @@ import * as training from '../model/training'; import user from '../model/user'; import * as bus from '../service/bus'; import { - Connection, ConnectionHandler, Handler, param, query, Route, Types, + ConnectionHandler, Handler, param, query, Types, } from '../service/server'; import { md5 } from '../utils'; @@ -431,15 +431,13 @@ class HomeMessagesConnectionHandler extends ConnectionHandler { } } -export async function apply() { - Route('homepage', '/', HomeHandler); - Route('home_security', '/home/security', HomeSecurityHandler, PRIV.PRIV_USER_PROFILE); - Route('user_changemail_with_code', '/home/changeMail/:code', UserChangemailWithCodeHandler, PRIV.PRIV_USER_PROFILE); - Route('home_settings', '/home/settings/:category', HomeSettingsHandler, PRIV.PRIV_USER_PROFILE); - Route('home_domain', '/home/domain', HomeDomainHandler, PRIV.PRIV_USER_PROFILE); - Route('home_domain_create', '/home/domain/create', HomeDomainCreateHandler, PRIV.PRIV_CREATE_DOMAIN); - if (system.get('server.message')) Route('home_messages', '/home/messages', HomeMessagesHandler, PRIV.PRIV_USER_PROFILE); - Connection('home_messages_conn', '/home/messages-conn', HomeMessagesConnectionHandler, PRIV.PRIV_USER_PROFILE); +export async function apply(ctx) { + ctx.Route('homepage', '/', HomeHandler); + ctx.Route('home_security', '/home/security', HomeSecurityHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('user_changemail_with_code', '/home/changeMail/:code', UserChangemailWithCodeHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('home_settings', '/home/settings/:category', HomeSettingsHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('home_domain', '/home/domain', HomeDomainHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('home_domain_create', '/home/domain/create', HomeDomainCreateHandler, PRIV.PRIV_CREATE_DOMAIN); + if (system.get('server.message')) ctx.Route('home_messages', '/home/messages', HomeMessagesHandler, PRIV.PRIV_USER_PROFILE); + ctx.Connection('home_messages_conn', '/home/messages-conn', HomeMessagesConnectionHandler, PRIV.PRIV_USER_PROFILE); } - -global.Hydro.handler.home = apply; diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 08e7961e4..a16eb91ea 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -15,9 +15,7 @@ import problem from '../model/problem'; import record from '../model/record'; import * as system from '../model/system'; import user from '../model/user'; -import { - Handler, param, Route, Types, -} from '../service/server'; +import { Handler, param, Types } from '../service/server'; import { ContestCodeHandler, ContestScoreboardHandler } from './contest'; const validatePenaltyRules = (input: string) => yaml.load(input); @@ -209,17 +207,15 @@ class HomeworkEditHandler extends Handler { } } -export async function apply() { - Route('homework_main', '/homework', HomeworkMainHandler, PERM.PERM_VIEW_HOMEWORK); - Route('homework_create', '/homework/create', HomeworkEditHandler); - Route('homework_detail', '/homework/:tid', HomeworkDetailHandler, PERM.PERM_VIEW_HOMEWORK); - Route('homework_scoreboard', '/homework/:tid/scoreboard', ContestScoreboardHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD); - Route( +export async function apply(ctx) { + ctx.Route('homework_main', '/homework', HomeworkMainHandler, PERM.PERM_VIEW_HOMEWORK); + ctx.Route('homework_create', '/homework/create', HomeworkEditHandler); + ctx.Route('homework_detail', '/homework/:tid', HomeworkDetailHandler, PERM.PERM_VIEW_HOMEWORK); + ctx.Route('homework_scoreboard', '/homework/:tid/scoreboard', ContestScoreboardHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD); + ctx.Route( 'homework_scoreboard_download', '/homework/:tid/scoreboard/download/:ext', ContestScoreboardHandler, PERM.PERM_VIEW_HOMEWORK_SCOREBOARD, ); - Route('homework_code', '/homework/:tid/code', ContestCodeHandler, PERM.PERM_VIEW_HOMEWORK); - Route('homework_edit', '/homework/:tid/edit', HomeworkEditHandler); + ctx.Route('homework_code', '/homework/:tid/code', ContestCodeHandler, PERM.PERM_VIEW_HOMEWORK); + ctx.Route('homework_edit', '/homework/:tid/edit', HomeworkEditHandler); } - -global.Hydro.handler.homework = apply; diff --git a/packages/hydrooj/src/handler/import.ts b/packages/hydrooj/src/handler/import.ts index b59d092ab..26e809436 100644 --- a/packages/hydrooj/src/handler/import.ts +++ b/packages/hydrooj/src/handler/import.ts @@ -8,7 +8,7 @@ import { ValidationError } from '../error'; import { ProblemAdd } from '../lib/ui'; import { PERM, PRIV } from '../model/builtin'; import problem, { ProblemDoc } from '../model/problem'; -import { Handler, Route } from '../service/server'; +import { Handler } from '../service/server'; function findOverrideContent(dir: string) { let files = fs.readdirSync(dir); @@ -93,9 +93,7 @@ class ProblemImportHydroHandler extends Handler { } } -export async function apply() { +export async function apply(ctx) { ProblemAdd('problem_import_hydro', {}, 'copy', 'Import From Hydro'); - Route('problem_import_hydro', '/problem/import/hydro', ProblemImportHydroHandler, PERM.PERM_CREATE_PROBLEM); + ctx.Route('problem_import_hydro', '/problem/import/hydro', ProblemImportHydroHandler, PERM.PERM_CREATE_PROBLEM); } - -global.Hydro.handler.import = apply; diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index 968750af0..5f7500cb2 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -17,7 +17,7 @@ import task from '../model/task'; import * as bus from '../service/bus'; import { updateJudge } from '../service/monitor'; import { - Connection, ConnectionHandler, Handler, post, Route, Types, + ConnectionHandler, Handler, post, Types, } from '../service/server'; import { sleep } from '../utils'; @@ -233,10 +233,10 @@ class JudgeConnectionHandler extends ConnectionHandler { } } -export async function apply() { - Route('judge_files_download', '/judge/files', JudgeFilesDownloadHandler, builtin.PRIV.PRIV_JUDGE); - Route('judge_submission_download', '/judge/code', SubmissionDataDownloadHandler, builtin.PRIV.PRIV_JUDGE); - Connection('judge_conn', '/judge/conn', JudgeConnectionHandler, builtin.PRIV.PRIV_JUDGE); +export async function apply(ctx) { + ctx.Route('judge_files_download', '/judge/files', JudgeFilesDownloadHandler, builtin.PRIV.PRIV_JUDGE); + ctx.Route('judge_submission_download', '/judge/code', SubmissionDataDownloadHandler, builtin.PRIV.PRIV_JUDGE); + ctx.Connection('judge_conn', '/judge/conn', JudgeConnectionHandler, builtin.PRIV.PRIV_JUDGE); } apply.next = next; diff --git a/packages/hydrooj/src/handler/manage.ts b/packages/hydrooj/src/handler/manage.ts index 148445cc5..9ce422508 100644 --- a/packages/hydrooj/src/handler/manage.ts +++ b/packages/hydrooj/src/handler/manage.ts @@ -16,8 +16,8 @@ import * as system from '../model/system'; import user from '../model/user'; import * as bus from '../service/bus'; import { - Connection, ConnectionHandler, Handler, - param, Route, Types, + ConnectionHandler, Handler, + param, Types, } from '../service/server'; import { configSource, saveConfig, SystemSettings } from '../settings'; import * as judge from './judge'; @@ -263,14 +263,12 @@ class SystemUserImportHandler extends SystemHandler { } } -async function apply() { - Route('manage', '/manage', SystemMainHandler); - Route('manage_dashboard', '/manage/dashboard', SystemDashboardHandler); - Route('manage_script', '/manage/script', SystemScriptHandler); - Route('manage_setting', '/manage/setting', SystemSettingHandler); - Route('manage_config', '/manage/config', SystemConfigHandler); - Route('manage_user_import', '/manage/userimport', SystemUserImportHandler); - Connection('manage_check', '/manage/check-conn', SystemCheckConnHandler); +export async function apply(ctx) { + ctx.Route('manage', '/manage', SystemMainHandler); + ctx.Route('manage_dashboard', '/manage/dashboard', SystemDashboardHandler); + ctx.Route('manage_script', '/manage/script', SystemScriptHandler); + ctx.Route('manage_setting', '/manage/setting', SystemSettingHandler); + ctx.Route('manage_config', '/manage/config', SystemConfigHandler); + ctx.Route('manage_user_import', '/manage/userimport', SystemUserImportHandler); + ctx.Connection('manage_check', '/manage/check-conn', SystemCheckConnHandler); } - -global.Hydro.handler.manage = apply; diff --git a/packages/hydrooj/src/handler/misc.ts b/packages/hydrooj/src/handler/misc.ts index 54fc83ba2..c8fb8b223 100644 --- a/packages/hydrooj/src/handler/misc.ts +++ b/packages/hydrooj/src/handler/misc.ts @@ -11,7 +11,7 @@ import storage from '../model/storage'; import * as system from '../model/system'; import user from '../model/user'; import { - Handler, param, post, Route, Types, + Handler, param, post, Types, } from '../service/server'; import { encodeRFC5987ValueChars } from '../service/storage'; import { builtinConfig } from '../settings'; @@ -129,12 +129,10 @@ export class SwitchAccountHandler extends Handler { } } -export async function apply() { - Route('switch_language', '/language/:lang', SwitchLanguageHandler); - Route('home_files', '/file', FilesHandler); - Route('fs_download', '/file/:uid/:filename', FSDownloadHandler); - Route('storage', '/storage', StorageHandler); - Route('switch_account', '/account', SwitchAccountHandler, PRIV.PRIV_EDIT_SYSTEM); +export async function apply(ctx) { + ctx.Route('switch_language', '/language/:lang', SwitchLanguageHandler); + ctx.Route('home_files', '/file', FilesHandler); + ctx.Route('fs_download', '/file/:uid/:filename', FSDownloadHandler); + ctx.Route('storage', '/storage', StorageHandler); + ctx.Route('switch_account', '/account', SwitchAccountHandler, PRIV.PRIV_EDIT_SYSTEM); } - -global.Hydro.handler.misc = apply; diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 149123e2c..29bf511f0 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -33,7 +33,7 @@ import * as system from '../model/system'; import user from '../model/user'; import * as bus from '../service/bus'; import { - Handler, param, post, query, Route, route, Types, + Handler, param, post, query, route, Types, } from '../service/server'; import { registerResolver, registerValue } from './api'; import { ContestDetailBaseHandler } from './contest'; @@ -1004,22 +1004,20 @@ export class ProblemPrefixListHandler extends Handler { } } -export async function apply() { - Route('problem_main', '/p', ProblemMainHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_random', '/problem/random', ProblemRandomHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_detail', '/p/:pid', ProblemDetailHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_submit', '/p/:pid/submit', ProblemSubmitHandler, PERM.PERM_SUBMIT_PROBLEM); - Route('problem_hack', '/p/:pid/hack/:rid', ProblemHackHandler, PERM.PERM_SUBMIT_PROBLEM); - Route('problem_edit', '/p/:pid/edit', ProblemEditHandler); - Route('problem_config', '/p/:pid/config', ProblemConfigHandler); - Route('problem_files', '/p/:pid/files', ProblemFilesHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_file_download', '/p/:pid/file/:filename', ProblemFileDownloadHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_solution', '/p/:pid/solution', ProblemSolutionHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_solution_detail', '/p/:pid/solution/:sid', ProblemSolutionHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_solution_raw', '/p/:pid/solution/:psid/raw', ProblemSolutionRawHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_solution_reply_raw', '/p/:pid/solution/:psid/:psrid/raw', ProblemSolutionRawHandler, PERM.PERM_VIEW_PROBLEM); - Route('problem_create', '/problem/create', ProblemCreateHandler, PERM.PERM_CREATE_PROBLEM); - Route('problem_prefix_list', '/problem/list', ProblemPrefixListHandler, PERM.PERM_VIEW_PROBLEM); +export async function apply(ctx) { + ctx.Route('problem_main', '/p', ProblemMainHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_random', '/problem/random', ProblemRandomHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_detail', '/p/:pid', ProblemDetailHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_submit', '/p/:pid/submit', ProblemSubmitHandler, PERM.PERM_SUBMIT_PROBLEM); + ctx.Route('problem_hack', '/p/:pid/hack/:rid', ProblemHackHandler, PERM.PERM_SUBMIT_PROBLEM); + ctx.Route('problem_edit', '/p/:pid/edit', ProblemEditHandler); + ctx.Route('problem_config', '/p/:pid/config', ProblemConfigHandler); + ctx.Route('problem_files', '/p/:pid/files', ProblemFilesHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_file_download', '/p/:pid/file/:filename', ProblemFileDownloadHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_solution', '/p/:pid/solution', ProblemSolutionHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_solution_detail', '/p/:pid/solution/:sid', ProblemSolutionHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_solution_raw', '/p/:pid/solution/:psid/raw', ProblemSolutionRawHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_solution_reply_raw', '/p/:pid/solution/:psid/:psrid/raw', ProblemSolutionRawHandler, PERM.PERM_VIEW_PROBLEM); + ctx.Route('problem_create', '/problem/create', ProblemCreateHandler, PERM.PERM_CREATE_PROBLEM); + ctx.Route('problem_prefix_list', '/problem/list', ProblemPrefixListHandler, PERM.PERM_VIEW_PROBLEM); } - -global.Hydro.handler.problem = apply; diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index ea44b2111..4babc2ff3 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -16,7 +16,7 @@ import TaskModel from '../model/task'; import user from '../model/user'; import * as bus from '../service/bus'; import { - Connection, ConnectionHandler, Handler, param, Route, Types, + ConnectionHandler, Handler, param, Types, } from '../service/server'; import { buildProjection } from '../utils'; import { postJudge } from './judge'; @@ -359,11 +359,9 @@ class RecordDetailConnectionHandler extends ConnectionHandler { } } -export async function apply() { - Route('record_main', '/record', RecordListHandler); - Route('record_detail', '/record/:rid', RecordDetailHandler); - Connection('record_conn', '/record-conn', RecordMainConnectionHandler); - Connection('record_detail_conn', '/record-detail-conn', RecordDetailConnectionHandler); +export async function apply(ctx) { + ctx.Route('record_main', '/record', RecordListHandler); + ctx.Route('record_detail', '/record/:rid', RecordDetailHandler); + ctx.Connection('record_conn', '/record-conn', RecordMainConnectionHandler); + ctx.Connection('record_detail_conn', '/record-detail-conn', RecordDetailConnectionHandler); } - -global.Hydro.handler.record = apply; diff --git a/packages/hydrooj/src/handler/status.ts b/packages/hydrooj/src/handler/status.ts index 82810263b..3e1376c9a 100644 --- a/packages/hydrooj/src/handler/status.ts +++ b/packages/hydrooj/src/handler/status.ts @@ -5,7 +5,7 @@ import RecordModel from '../model/record'; import UserModel from '../model/user'; import * as bus from '../service/bus'; import db from '../service/db'; -import { Handler, Route } from '../service/server'; +import { Handler } from '../service/server'; const coll = db.collection('status'); @@ -72,10 +72,8 @@ class StatusUpdateHandler extends Handler { bus.once('app/started', () => coll.createIndex('updateAt', { expireAfterSeconds: 24 * 3600 })); -export async function apply() { - Route('status', '/status', StatusHandler); - Route('status_admin', '/.status', AdminStatusHandler); - Route('status_update', '/status/update', StatusUpdateHandler); +export async function apply(ctx) { + ctx.Route('status', '/status', StatusHandler); + ctx.Route('status_admin', '/.status', AdminStatusHandler); + ctx.Route('status_update', '/status/update', StatusUpdateHandler); } - -global.Hydro.handler.status = apply; diff --git a/packages/hydrooj/src/handler/training.ts b/packages/hydrooj/src/handler/training.ts index cc9e03967..680eb7757 100644 --- a/packages/hydrooj/src/handler/training.ts +++ b/packages/hydrooj/src/handler/training.ts @@ -10,9 +10,7 @@ import * as system from '../model/system'; import * as training from '../model/training'; import user from '../model/user'; import * as bus from '../service/bus'; -import { - Handler, param, Route, Types, -} from '../service/server'; +import { Handler, param, Types } from '../service/server'; async function _parseDagJson(domainId: string, _dag: string): Promise { const parsed = []; @@ -208,11 +206,9 @@ class TrainingEditHandler extends Handler { } } -export async function apply() { - Route('training_main', '/training', TrainingMainHandler, PERM.PERM_VIEW_TRAINING); - Route('training_create', '/training/create', TrainingEditHandler); - Route('training_detail', '/training/:tid', TrainingDetailHandler, PERM.PERM_VIEW_TRAINING); - Route('training_edit', '/training/:tid/edit', TrainingEditHandler); +export async function apply(ctx) { + ctx.Route('training_main', '/training', TrainingMainHandler, PERM.PERM_VIEW_TRAINING); + ctx.Route('training_create', '/training/create', TrainingEditHandler); + ctx.Route('training_detail', '/training/:tid', TrainingDetailHandler, PERM.PERM_VIEW_TRAINING); + ctx.Route('training_edit', '/training/:tid/edit', TrainingEditHandler); } - -global.Hydro.handler.training = apply; diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index 7eb15908a..65101ada9 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -22,7 +22,7 @@ import task from '../model/task'; import token from '../model/token'; import user from '../model/user'; import { - Handler, param, post, Route, Types, + Handler, param, post, Types, } from '../service/server'; import { registerResolver, registerValue } from './api'; @@ -422,17 +422,15 @@ class OauthCallbackHandler extends Handler { } } -export async function apply() { - Route('user_login', '/login', UserLoginHandler); - Route('user_oauth', '/oauth/:type', OauthHandler); - Route('user_oauth_callback', '/oauth/:type/callback', OauthCallbackHandler); - Route('user_register', '/register', UserRegisterHandler, PRIV.PRIV_REGISTER_USER); - Route('user_register_with_code', '/register/:code', UserRegisterWithCodeHandler, PRIV.PRIV_REGISTER_USER); - Route('user_logout', '/logout', UserLogoutHandler, PRIV.PRIV_USER_PROFILE); - Route('user_lostpass', '/lostpass', UserLostPassHandler); - Route('user_lostpass_with_code', '/lostpass/:code', UserLostPassWithCodeHandler); - Route('user_delete', '/user/delete', UserDeleteHandler, PRIV.PRIV_USER_PROFILE); - Route('user_detail', '/user/:uid', UserDetailHandler); +export async function apply(ctx) { + ctx.Route('user_login', '/login', UserLoginHandler); + ctx.Route('user_oauth', '/oauth/:type', OauthHandler); + ctx.Route('user_oauth_callback', '/oauth/:type/callback', OauthCallbackHandler); + ctx.Route('user_register', '/register', UserRegisterHandler, PRIV.PRIV_REGISTER_USER); + ctx.Route('user_register_with_code', '/register/:code', UserRegisterWithCodeHandler, PRIV.PRIV_REGISTER_USER); + ctx.Route('user_logout', '/logout', UserLogoutHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('user_lostpass', '/lostpass', UserLostPassHandler); + ctx.Route('user_lostpass_with_code', '/lostpass/:code', UserLostPassWithCodeHandler); + ctx.Route('user_delete', '/user/delete', UserDeleteHandler, PRIV.PRIV_USER_PROFILE); + ctx.Route('user_detail', '/user/:uid', UserDetailHandler); } - -global.Hydro.handler.user = apply; diff --git a/packages/import-qduoj/handler.ts b/packages/import-qduoj/handler.ts index 44758be22..83fc735c6 100644 --- a/packages/import-qduoj/handler.ts +++ b/packages/import-qduoj/handler.ts @@ -10,7 +10,7 @@ import { buildContent } from 'hydrooj/src/lib/content'; import { ProblemAdd } from 'hydrooj/src/lib/ui'; import { PERM } from 'hydrooj/src/model/builtin'; import problem from 'hydrooj/src/model/problem'; -import { Handler, Route } from 'hydrooj/src/service/server'; +import { Handler } from 'hydrooj/src/service/server'; fs.ensureDirSync('/tmp/hydro/import-qduoj'); @@ -126,9 +126,7 @@ class ImportQduojHandler extends Handler { } } -export async function apply() { - Route('problem_import_qduoj', '/problem/import/qduoj', ImportQduojHandler, PERM.PERM_CREATE_PROBLEM); +export async function apply(ctx) { + ctx.Route('problem_import_qduoj', '/problem/import/qduoj', ImportQduojHandler, PERM.PERM_CREATE_PROBLEM); ProblemAdd('problem_import_qduoj', {}, 'copy', 'From QDUOJ Export'); } - -global.Hydro.handler.qduImport = apply;