From 0c81eea40a808d7c61ef3ebadc0d548dd75a0287 Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 3 Oct 2022 16:38:08 +0800 Subject: [PATCH] core: do not allow edit for setting_storage --- packages/hydrooj/src/context.ts | 2 +- packages/hydrooj/src/handler/home.ts | 1 + packages/hydrooj/src/service/bus.ts | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/hydrooj/src/context.ts b/packages/hydrooj/src/context.ts index 817d09f6c..9953dad66 100644 --- a/packages/hydrooj/src/context.ts +++ b/packages/hydrooj/src/context.ts @@ -67,7 +67,7 @@ export class ApiMixin extends Service { setImmediate = T(setImmediate, clearImmediate); provideModule = T(provideModule); inject = T(inject); - broadcast = (event: string, ...payload) => this.ctx.emit('bus/broadcast', event, payload); + broadcast = (event: keyof EventMap, ...payload) => this.ctx.emit('bus/broadcast', event, payload); constructor(ctx) { super(ctx, 'api', true); } diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 094b82ec1..4ad8f2c23 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -223,6 +223,7 @@ class HomeSecurityHandler extends Handler { function set(s: Setting, key: string, value: any) { if (s) { + if (s.family === 'setting_storage') return undefined; if (s.flag & setting.FLAG_DISABLED) return undefined; if ((s.flag & setting.FLAG_SECRET) && !value) return undefined; if (s.type === 'boolean') { diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 85f894746..27f9c9592 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -28,6 +28,7 @@ export interface EventMap { 'app/load/model': () => VoidReturn 'app/load/handler': () => VoidReturn 'app/load/service': () => VoidReturn + 'app/ready': () => VoidReturn 'app/exit': () => VoidReturn 'database/connect': (db: Db) => void @@ -36,6 +37,8 @@ export interface EventMap { 'system/setting': (args: Record) => VoidReturn 'bus/broadcast': (event: keyof EventMap, ...args: any[]) => VoidReturn 'monitor/update': (type: 'server' | 'judge', $set: any) => VoidReturn + 'api/update': () => void; + 'task/daily': () => void; 'user/message': (uid: number, mdoc: MessageDoc) => void 'user/get': (udoc: User) => void