From 72998f643bbd5d475feb185d7fcb6d738f71e0f3 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 7 Mar 2021 19:03:58 +0800 Subject: [PATCH] core: add log for send-mail-error --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/discussion.ts | 6 ++++++ packages/hydrooj/src/lib/mail.ts | 4 ++++ packages/hydrooj/src/service/bus.ts | 10 +++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index a90b2c8da..9a1c68728 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.20.1", + "version": "2.20.2", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/discussion.ts b/packages/hydrooj/src/handler/discussion.ts index 5a35268fb..04efd2536 100644 --- a/packages/hydrooj/src/handler/discussion.ts +++ b/packages/hydrooj/src/handler/discussion.ts @@ -15,6 +15,7 @@ import { PERM, PRIV } from '../model/builtin'; import { Route, Handler, Types, param, } from '../service/server'; +import * as bus from '../service/bus'; import { isTitle, isContent } from '../lib/validator'; export const typeMapper = { @@ -165,6 +166,11 @@ class DiscussionCreateHandler extends DiscussionHandler { else name = _name; if (highlight) this.checkPerm(PERM.PERM_HIGHLIGHT_DISCUSSION); if (pin) this.checkPerm(PERM.PERM_PIN_DISCUSSION); + await bus.serial( + 'discussion/before-add', + domainId, typeMapper[type], name, this.user._id, + title, content, this.request.ip, highlight, pin, + ); const did = await discussion.add( domainId, typeMapper[type], name, this.user._id, title, content, this.request.ip, highlight, pin, diff --git a/packages/hydrooj/src/lib/mail.ts b/packages/hydrooj/src/lib/mail.ts index 7d5827106..4571fe631 100644 --- a/packages/hydrooj/src/lib/mail.ts +++ b/packages/hydrooj/src/lib/mail.ts @@ -1,5 +1,8 @@ import nodemailer from 'nodemailer'; import { SendMailError } from '../error'; +import { Logger } from '../logger'; + +const logger = new Logger('mail'); export async function sendMail(to: string, subject: string, text: string, html: string) { let t: unknown; @@ -29,6 +32,7 @@ export async function sendMail(to: string, subject: string, text: string, html: }); }); } catch (e) { + logger.error(e); throw new SendMailError(to); } return t; diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 63cf3ae3d..7a459144d 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -1,6 +1,8 @@ /* eslint-disable no-await-in-loop */ import cluster from 'cluster'; -import { Db, FilterQuery, OnlyFieldsOfType } from 'mongodb'; +import type { + Db, FilterQuery, ObjectID, OnlyFieldsOfType, +} from 'mongodb'; import { argv } from 'yargs'; import { Logger } from '../logger'; import type { @@ -57,6 +59,12 @@ export interface EventMap { $set: any, $unset: OnlyFieldsOfType ) => VoidReturn + 'discussion/before-add': ( + domainId: string, parentType: number, parentId: ObjectID | number | string, + owner: number, title: string, content: string, + ip: string | null, highlight: boolean, pin: boolean + ) => VoidReturn + 'problem/before-edit': (doc: Partial) => VoidReturn 'problem/edit': (doc: Pdoc) => VoidReturn 'problem/list': (query: FilterQuery, handler: any) => VoidReturn