diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 17f698b2b..4656c8196 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.30.0", + "version": "2.30.1", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/error.ts b/packages/hydrooj/src/error.ts index c5ea707b9..9fefbcb1a 100644 --- a/packages/hydrooj/src/error.ts +++ b/packages/hydrooj/src/error.ts @@ -1,18 +1,11 @@ /* eslint-disable max-len */ /* eslint-disable func-names */ -import { isClass } from './utils'; interface IHydroError { new(...args: any[]): HydroError } -function isHydroError(item: any): item is IHydroError { - return isClass(item); -} - -const Err = (name: string, ...info: Array string) | ((_super: Function, ...args: any) => HydroError) | string | number>) => { - let Class: IHydroError; - let constr: (_super: Function, ...args: any[]) => HydroError; +const Err = (name: string, Class: IHydroError, ...info: Array<(() => string) | string | number>) => { let msg: () => string; let code: number; for (const item of info) { @@ -20,26 +13,14 @@ const Err = (name: string, ...info: Array string) | ((_supe code = item; } else if (typeof item === 'string') { msg = function () { return item; }; - } else if (isHydroError(item)) { - Class = item; - } else if (typeof item === 'function' && item.length === 0) { - // @ts-ignore - msg = item; } else if (typeof item === 'function') { - // @ts-ignore - constr = item; + msg = item; } } const HydroError = class extends Class { }; HydroError.prototype.name = name; if (msg) HydroError.prototype.msg = msg; if (code) HydroError.prototype.code = code; - if (constr) { - const original = HydroError.prototype.constructor; - HydroError.prototype.constructor = function (...args: any[]) { - constr.call(this, original.bind(this, ...args)); - }; - } return HydroError; }; @@ -49,7 +30,7 @@ export class HydroError extends Error { constructor(...params: any[]) { super(); - this.params = params; + this.params = params || []; } // eslint-disable-next-line class-methods-use-this diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index ce4dcb688..c0b3ae472 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -311,12 +311,13 @@ export class HandlerCommon { } checkPerm(...args: bigint[]) { - // @ts-ignore - if (!this.user.hasPerm(...args)) throw new PermissionError(...args); + if (!this.user.hasPerm(...args)) { + if (this.user.hasPriv(PRIV.PRIV_USER_PROFILE)) throw new PermissionError(...args); + throw new PrivilegeError(PRIV.PRIV_USER_PROFILE); + } } checkPriv(...args: number[]) { - // @ts-ignore if (!this.user.hasPriv(...args)) throw new PrivilegeError(...args); } diff --git a/packages/hydrooj/src/ui.ts b/packages/hydrooj/src/ui.ts index 4dd5c2612..b294ea07a 100644 --- a/packages/hydrooj/src/ui.ts +++ b/packages/hydrooj/src/ui.ts @@ -42,7 +42,7 @@ if (cluster.isMaster) { }); if (process.env.NODE_ENV !== 'test') { process.stdin.setEncoding('utf-8'); - process.stdin.setRawMode(false); + if (process.stdin.setRawMode) process.stdin.setRawMode(false); process.stdin.on('data', (buf) => { const input = buf.toString(); if (input[0] === '@') {