diff --git a/src/modules/email/email-blocking.controller.ts b/src/modules/email/email-blocking.controller.ts new file mode 100644 index 0000000..2ab18de --- /dev/null +++ b/src/modules/email/email-blocking.controller.ts @@ -0,0 +1,31 @@ +import { Controller, Get, Query } from "@nestjs/common"; +import { ApiOperation, ApiResponse } from "@nestjs/swagger"; + +import { EmailSpamService } from "./services/email-spam.service"; +import { AdminRoute } from "../../common/decorators/admin.decorator"; + +@Controller("email-blocking") +export class EmailBlockingController { + constructor(private readonly emailSpamService: EmailSpamService) {} + + @Get("diagnose") + @AdminRoute() + @ApiOperation({ + summary: "Diagnose email blocking issues (Admin only)", + description: "Check if a sender domain is blocked for a recipient and optionally unblock it", + }) + @ApiResponse({ status: 200, description: "Diagnostic information" }) + @ApiResponse({ status: 400, description: "Invalid parameters" }) + @ApiResponse({ status: 403, description: "Not authorized (Admin only)" }) + async diagnoseEmailBlocking( + @Query("recipient") recipientEmail: string, + @Query("senderDomain") senderDomain: string, + @Query("unblock") unblock?: string, + ) { + if (!recipientEmail || !senderDomain) { + throw new Error("Both recipient and senderDomain query parameters are required"); + } + const shouldUnblock = unblock === "true" || unblock === "1"; + return this.emailSpamService.diagnoseEmailBlocking(recipientEmail, senderDomain, shouldUnblock); + } +} diff --git a/src/modules/email/email.controller.ts b/src/modules/email/email.controller.ts index b9c3e30..7975384 100644 --- a/src/modules/email/email.controller.ts +++ b/src/modules/email/email.controller.ts @@ -7,7 +7,6 @@ import { AttachmentIdQueryDto, MailboxIdQueryDto, MessageParamDto, QueueIdParamD import { MessageListQueryDto } from "./DTO/email-query.dto"; import { EmailSuggestionsQueryDto, SearchMessagesQueryDto } from "./DTO/email-query.dto"; import { SendEmailDto, UpdateDraftDto } from "./DTO/send-email.dto"; -import { EmailSpamService } from "./services/email-spam.service"; import { EmailService } from "./services/email.service"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { UserDec } from "../../common/decorators/user.decorator"; @@ -18,7 +17,6 @@ import { User } from "../users/entities/user.entity"; export class EmailController { constructor( private readonly emailService: EmailService, - private readonly emailSpamService: EmailSpamService, ) {} @Post("send") @@ -318,24 +316,4 @@ export class EmailController { return this.emailService.performBulkAction(user.wildduckUserId, user.id, bulkActionDto, query.mailbox); } - @Get("diagnose-blocking") - // @AdminRoute() - @ApiOperation({ - summary: "Diagnose email blocking issues (Admin only)", - description: "Check if a sender domain is blocked for a recipient and optionally unblock it", - }) - @ApiResponse({ status: 200, description: "Diagnostic information" }) - @ApiResponse({ status: 400, description: "Invalid parameters" }) - @ApiResponse({ status: 403, description: "Not authorized (Admin only)" }) - async diagnoseEmailBlocking( - @Query("recipient") recipientEmail: string, - @Query("senderDomain") senderDomain: string, - @Query("unblock") unblock?: string, - ) { - if (!recipientEmail || !senderDomain) { - throw new Error("Both recipient and senderDomain query parameters are required"); - } - const shouldUnblock = unblock === "true" || unblock === "1"; - return this.emailSpamService.diagnoseEmailBlocking(recipientEmail, senderDomain, shouldUnblock); - } } diff --git a/src/modules/email/email.module.ts b/src/modules/email/email.module.ts index 97d2659..8647292 100644 --- a/src/modules/email/email.module.ts +++ b/src/modules/email/email.module.ts @@ -2,6 +2,7 @@ import { MikroOrmModule } from "@mikro-orm/nestjs"; import { BullModule } from "@nestjs/bullmq"; import { Module } from "@nestjs/common"; +import { EmailBlockingController } from "./email-blocking.controller"; import { EmailController } from "./email.controller"; import { EmailHeadersService } from "./services/email-headers.service"; import { EmailSpamService } from "./services/email-spam.service"; @@ -27,7 +28,7 @@ import { User } from "../users/entities/user.entity"; EmailUtilsModule, MikroOrmModule.forFeature([User]), ], - controllers: [EmailController], + controllers: [EmailController, EmailBlockingController], providers: [EmailService, EmailSpamService, EmailHeadersService, EmailBulkActionProcessor], exports: [EmailService, EmailSpamService, EmailHeadersService, EmailBulkActionProcessor], })