From bb4c1ac74f437fc4aa36280e52a03a1045027511 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 7 Mar 2025 12:37:12 +0800 Subject: [PATCH] core: fix ci --- packages/hydrooj/src/entry/cli.ts | 2 +- packages/hydrooj/src/entry/worker.ts | 2 +- packages/hydrooj/src/model/setting.ts | 52 +++++++++++++++------------ 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/packages/hydrooj/src/entry/cli.ts b/packages/hydrooj/src/entry/cli.ts index aafdf4c38..41e27d029 100644 --- a/packages/hydrooj/src/entry/cli.ts +++ b/packages/hydrooj/src/entry/cli.ts @@ -111,7 +111,7 @@ export async function load(ctx: Context) { require('../service/bus').apply(ctx); const pending = global.addons; const fail = []; - await ctx.plugin(MongoService, loadOptions()); + await ctx.plugin(MongoService, loadOptions() || {}); await ctx.plugin(ConfigService); await require('../model/system').runConfig(); ctx = await new Promise((resolve) => { diff --git a/packages/hydrooj/src/entry/worker.ts b/packages/hydrooj/src/entry/worker.ts index ffe3accf4..c2845442c 100644 --- a/packages/hydrooj/src/entry/worker.ts +++ b/packages/hydrooj/src/entry/worker.ts @@ -34,7 +34,7 @@ export async function apply(ctx: Context) { locale(pending, fail), template(pending, fail), ]); - await ctx.plugin(MongoService, load()); + await ctx.plugin(MongoService, load() || {}); await ctx.plugin(ConfigService); const modelSystem = require('../model/system'); await modelSystem.runConfig(); diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 5c8f0d3ea..b2d03f7bf 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -286,30 +286,38 @@ const ignoreUA = [ 'YandexBot', ].join('\n'); +// This is a showcase of how to use Schema to define settings. +SystemSetting(Schema.object({ + smtp: Schema.object({ + user: Schema.string().default('').description('SMTP Username'), + pass: Schema.string().default('').description('SMTP Password').role('password'), + host: Schema.string().default('').description('SMTP Server Host'), + port: Schema.number().step(1).min(1).max(65535).default(465).description('SMTP Server Port'), + from: Schema.string().default('').description('Mail From'), + secure: Schema.boolean().default(false).description('SSL'), + verify: Schema.boolean().default(true).description('Verify register email'), + }).extra('family', 'setting_smtp'), + server: Schema.object({ + center: Schema.string().default('https://hydro.ac/center').description('Server Center').role('url').hidden(), + name: Schema.string().default('Hydro').description('Server Name'), + url: Schema.string().default('/').description('Server BaseURL'), + upload: Schema.string().default('256m').description('Max upload file size'), + cdn: Schema.string().default('/').description('CDN Prefix'), + ws: Schema.string().default('/').description('WebSocket Prefix'), + host: Schema.string().default('127.0.0.1').description('Listen host'), + port: Schema.number().step(1).min(1).max(65535).default(8888).description('Server Port'), + xff: Schema.string().default('').description('IP Header'), + xhost: Schema.string().default('').description('Hostname Header'), + xproxy: Schema.boolean().default(false).description('Use reverse_proxy'), + cors: Schema.string().default('').description('CORS domains'), + login: Schema.boolean().default(true).description('Allow builtin-login').hidden(), + checkUpdate: Schema.boolean().default(true).description('Daily update check'), + ignoreUA: Schema.string().default(ignoreUA).description('ignoredUA').role('textarea'), + }).extra('family', 'setting_server'), +})); +// We will keep the old settings as-is until new setting ui is ready. SystemSetting( - Setting('setting_smtp', 'smtp.user', null, 'text', 'smtp.user', 'SMTP Username'), - Setting('setting_smtp', 'smtp.pass', null, 'password', 'smtp.pass', 'SMTP Password', FLAG_SECRET), - Setting('setting_smtp', 'smtp.host', null, 'text', 'smtp.host', 'SMTP Server Host'), - Setting('setting_smtp', 'smtp.port', 465, 'number', 'smtp.port', 'SMTP Server Port'), - Setting('setting_smtp', 'smtp.from', null, 'text', 'smtp.from', 'Mail From'), - Setting('setting_smtp', 'smtp.secure', false, 'boolean', 'smtp.secure', 'SSL'), - Setting('setting_smtp', 'smtp.verify', true, 'boolean', 'smtp.verify', 'Verify register email'), - Setting('setting_server', 'server.center', 'https://hydro.ac/center', 'text', 'server.center', '', FLAG_HIDDEN), - Setting('setting_server', 'server.name', 'Hydro', 'text', 'server.name', 'Server Name'), - Setting('setting_server', 'server.url', '/', 'text', 'server.url', 'Server BaseURL'), - Setting('setting_server', 'server.upload', '256m', 'text', 'server.upload', 'Max upload file size'), - Setting('setting_server', 'server.cdn', '/', 'text', 'server.cdn', 'CDN Prefix'), - Setting('setting_server', 'server.ws', '/', 'text', 'server.ws', 'WebSocket Prefix'), - Setting('setting_server', 'server.host', '127.0.0.1', 'text', 'server.host', 'Listen host'), - Setting('setting_server', 'server.port', 8888, 'number', 'server.port', 'Server Port'), - Setting('setting_server', 'server.xff', null, 'text', 'server.xff', 'IP Header'), - Setting('setting_server', 'server.xhost', null, 'text', 'server.xhost', 'Hostname Header'), - Setting('setting_server', 'server.xproxy', false, 'boolean', 'server.xproxy', 'Use reverse_proxy'), - Setting('setting_server', 'server.cors', '', 'text', 'server.cors', 'CORS domains'), Setting('setting_server', 'server.language', 'zh_CN', langRange, 'server.language', 'Default display language'), - Setting('setting_server', 'server.login', true, 'boolean', 'server.login', 'Allow builtin-login', FLAG_PRO), - Setting('setting_server', 'server.checkUpdate', true, 'boolean', 'server.checkUpdate', 'Daily update check'), - Setting('setting_server', 'server.ignoreUA', ignoreUA, 'textarea', 'server.ignoreUA', 'ignoredUA'), ServerLangSettingNode, Setting('setting_limits', 'limit.by_user', false, 'boolean', 'limit.by_user', 'Use per-user limits instead of per ip limits'), Setting('setting_limits', 'limit.problem_files_max', 100, 'number', 'limit.problem_files_max', 'Max files per problem'),