diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 1ffdc5587..87e585497 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.4.10", + "version": "2.4.11", "os": [ "linux" ], diff --git a/packages/hydrojudge/src/service.ts b/packages/hydrojudge/src/service.ts index 7da2c67cd..57895fd52 100644 --- a/packages/hydrojudge/src/service.ts +++ b/packages/hydrojudge/src/service.ts @@ -226,7 +226,6 @@ async function postInit() { this.config, { next: this.next }, ); - console.log(this.config); this.stat.judge = new Date(); await judge[this.config.type || 'default'].judge(this); } diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index b0fd1d227..93890c178 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.20.17", + "version": "2.20.18", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/domain.ts b/packages/hydrooj/src/handler/domain.ts index ce56eb83a..cc59efa9c 100644 --- a/packages/hydrooj/src/handler/domain.ts +++ b/packages/hydrooj/src/handler/domain.ts @@ -155,7 +155,6 @@ class DomainPermissionHandler extends ManageHandler { const roles = {}; delete this.request.body.csrfToken; for (const role in this.request.body) { - console.log(role, this.request.body[role]); const perms = this.request.body[role] instanceof Array ? this.request.body[role] : [this.request.body[role]]; diff --git a/packages/hydrooj/src/model/builtin.ts b/packages/hydrooj/src/model/builtin.ts index 9e1ed59d6..d5354358c 100644 --- a/packages/hydrooj/src/model/builtin.ts +++ b/packages/hydrooj/src/model/builtin.ts @@ -2,7 +2,8 @@ import { Udoc } from '../interface'; -/* Why nocheck? +/* + * Why nocheck? * BitInt requires at least ES2020, but we can't use it as * NodeJS doesn't support some of this new features. * e.g.: object?.property diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index bea3f6f00..e1d5f9e84 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -201,7 +201,7 @@ bus.once('app/started', async () => { bus.on('system/setting', (args) => { if (!args.lang?.texts) return; - SETTINGS_BY_KEY['lang.texts'].value = args.lang.texts; + SETTINGS_BY_KEY['codeLang'].range = args.lang.texts; }); global.Hydro.model.setting = { diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index f16c0d75f..1bf404c47 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -15,7 +15,7 @@ import sockjs from 'sockjs'; import type { SetOption } from 'cookies'; import serialize, { SerializeJSOptions } from 'serialize-javascript'; import { argv } from 'yargs'; -import { lrucache } from '../utils'; +import { errorMessage, lrucache } from '../utils'; import { User, DomainDoc } from '../interface'; import { Logger } from '../logger'; import { @@ -478,7 +478,8 @@ export class Handler extends HandlerCommon { if (!this.response.body) return; try { await this.renderBody(); - } catch (error) { + } catch (err) { + const error = errorMessage(err); this.response.status = error instanceof UserFacingError ? error.code : 500; if (this.request.json) this.response.body = { error }; else { @@ -576,7 +577,7 @@ export class Handler extends HandlerCommon { this.response.status = error instanceof UserFacingError ? error.code : 500; this.response.template = error instanceof UserFacingError ? 'error.html' : 'bsod.html'; this.response.body = { - error: { message: error.msg(), params: error.params, stack: error.stack }, + error: { message: error.msg(), params: error.params, stack: errorMessage(error.stack) }, }; await this.finish().catch(() => { }); } diff --git a/packages/hydrooj/src/utils.ts b/packages/hydrooj/src/utils.ts index 38f576d64..3eff24963 100644 --- a/packages/hydrooj/src/utils.ts +++ b/packages/hydrooj/src/utils.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import { Duplex } from 'stream'; import cluster from 'cluster'; -import path from 'path'; +import path, { sep } from 'path'; import serialize from 'serialize-javascript'; import Lru from 'lru-cache'; import { ObjectID } from 'mongodb'; @@ -266,3 +266,16 @@ export const log2 = (val: bigint | number) => { for (let i = 0; ; i++) if (!(val >> i)) return i - 1; } }; + +export function errorMessage(err: Error | string) { + const t = typeof err === 'string' ? err : err.stack; + const q = t.split('\n'); + for (let i = 0; i < q.length; i++) { + if (!q[i].startsWith(' at')) continue; + if (q[i].includes(`${sep}@hydrooj${sep}`)) q[i] = q[i].split(`@hydrooj${sep}`)[1]; + else if (q[i].includes(`${sep}hydrooj${sep}`)) q[i] = `hydrooj${sep}${q[i].split(`hydrooj/${sep}`)[1]}`; + } + if (typeof err === 'string') return q.join('\n'); + err.stack = q.join('\n'); + return err; +}