From 43fb00e3c700c50d79df92f68544ad2e2e0954c1 Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Thu, 18 Jun 2026 11:01:39 +0800 Subject: [PATCH] core: auth/login event (#1181) --- packages/hydrooj/src/handler/user.ts | 10 ++++++++-- packages/hydrooj/src/service/bus.ts | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index 4830187db..674b0a2fb 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -31,7 +31,10 @@ import { } from '../service/server'; async function successfulAuth(this: Handler, udoc: User) { - if (udoc._id !== 0) await user.setById(udoc._id, { loginat: new Date(), loginip: this.request.ip }); + if (udoc._id !== 0) { + await this.ctx.serial('auth/before-login', this, udoc); + await user.setById(udoc._id, { loginat: new Date(), loginip: this.request.ip }); + } this.context.HydroContext.user = udoc; this.session.viewLang = ''; this.session.uid = udoc._id; @@ -40,7 +43,10 @@ async function successfulAuth(this: Handler, udoc: User) { this.session.scope = PERM.PERM_ALL.toString(); this.session.oauthBind = null; this.session.recreate = true; - if (udoc._id !== 0) await oplog.log(this, 'user.loginSuccess', { uid: udoc._id }); + if (udoc._id !== 0) { + await oplog.log(this, 'user.loginSuccess', { uid: udoc._id }); + await this.ctx.serial('auth/login', this, udoc); + } } class UserLoginHandler extends Handler { diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 69a505c1d..c2d1f0a24 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -98,6 +98,9 @@ export interface EventMap { 'record/change': (rdoc: RecordDoc, $set?: any, $push?: any, body?: any) => void; 'record/judge': (rdoc: RecordDoc, updated: boolean, pdoc?: ProblemDoc, updater?: any) => VoidReturn; + + 'auth/before-login': (ctx: Handler, udoc: User) => VoidReturn; + 'auth/login': (ctx: Handler, udoc: User) => VoidReturn; } export function apply(ctx: Context) {