From be0423fe937702233c2439ee8d76502f2b8c068c Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 22 Dec 2022 22:49:31 +0800 Subject: [PATCH] core: allow banReason option --- packages/hydrooj/src/handler/user.ts | 4 ++-- packages/hydrooj/src/model/setting.ts | 1 + packages/hydrooj/src/model/user.ts | 4 ++-- packages/ui-default/api.ts | 1 - 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index c46542c8..d8c64ae5 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -129,7 +129,7 @@ class UserLoginHandler extends Handler { if (udoc._tfa && !verifyToken(udoc._tfa, tfa)) throw new InvalidTokenError('2FA'); udoc.checkPassword(password); await user.setById(udoc._id, { loginat: new Date(), loginip: this.request.ip }); - if (!udoc.hasPriv(PRIV.PRIV_USER_PROFILE)) throw new BlacklistedError(uname); + if (!udoc.hasPriv(PRIV.PRIV_USER_PROFILE)) throw new BlacklistedError(uname, udoc.banReason); this.session.viewLang = ''; this.session.uid = udoc._id; this.session.sudo = null; @@ -471,5 +471,5 @@ export async function apply(ctx) { 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); + ctx.Route('user_detail', '/user/:uid(-?\\d+)', UserDetailHandler); } diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 0a3a7234..eed93d20 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -152,6 +152,7 @@ AccountSetting( 'Choose the background image in your profile page.'), Setting('setting_storage', 'unreadMsg', 0, 'number', 'Unread Message Count', null, FLAG_DISABLED | FLAG_HIDDEN), Setting('setting_storage', 'badge', '', 'text', 'badge info', null, FLAG_DISABLED | FLAG_HIDDEN), + Setting('setting_storage', 'banReason', '', 'text', 'ban reason', null, FLAG_DISABLED | FLAG_HIDDEN), ); DomainSetting( diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index 5185075a..75a6f24e 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -400,9 +400,9 @@ class UserModel { } @ArgMethod - static ban(uid: number) { + static ban(uid: number, reason = '') { return Promise.all([ - UserModel.setPriv(uid, PRIV.PRIV_NONE), + UserModel.setById(uid, { priv: PRIV.PRIV_NONE, banReason: reason }), token.delByUid(uid), ]); } diff --git a/packages/ui-default/api.ts b/packages/ui-default/api.ts index 6411f9e0..13e3912b 100644 --- a/packages/ui-default/api.ts +++ b/packages/ui-default/api.ts @@ -27,7 +27,6 @@ import UserSelectAutoComplete from './components/autocomplete/UserSelectAutoComp export { load, AutoComplete, UserSelectAutoComplete, ProblemSelectAutoComplete, DomainSelectAutoComplete, CustomSelectAutoComplete, }; -export const { UserContext, UiContext } = window; export function addPage(page: import('./misc/Page').Page | (() => Promise | void)) { window.Hydro.extraPages.push(page); }