Config.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Messaging;
  2. using Web.Api.Common;
  3. namespace Web.Api.Endpoints.Config;
  4. internal sealed class Config : IEndpoint
  5. {
  6. public void MapEndpoint(IEndpointRouteBuilder app)
  7. {
  8. app.MapGet("api/config", async (
  9. ISender sender,
  10. CancellationToken ct
  11. ) => {
  12. var result = await sender.Send(new Application.Features.Config.Get.Query(), ct);
  13. // 공개(익명) 응답 정화 — 민감 Basic 필드는 프론트가 쓰지 않으며 노출 시 심각한 보안 위험
  14. // (SMTP 자격증명 = 메일계정 탈취, RootID = 최고관리자 ID, IP 화이트리스트 = 인프라 노출).
  15. // 화이트리스트 방식(default-deny): 안전 필드만 복사 → 이후 새 Basic 필드도 명시 전엔 비공개.
  16. // Admin/DirectMailService/MailWorker 는 in-process(mediator·cache·DB)로 원본을 읽어 영향 없음.
  17. if (result is not null)
  18. {
  19. result.Basic = new Application.Features.Config.Get.Response.BasicConfigDto
  20. {
  21. SiteName = result.Basic.SiteName,
  22. SiteURL = result.Basic.SiteURL,
  23. FromEmail = result.Basic.FromEmail,
  24. FromName = result.Basic.FromName,
  25. BlockAlertTitle = result.Basic.BlockAlertTitle,
  26. BlockAlertContent = result.Basic.BlockAlertContent,
  27. IsMaintenance = result.Basic.IsMaintenance,
  28. MaintenanceContent = result.Basic.MaintenanceContent,
  29. NoteDailySendLimit = result.Basic.NoteDailySendLimit
  30. // 비공개(제외): RootID, SmtpServer, SmtpPort, SmtpEnableSSL, SmtpUsername, SmtpPassword, AdminWhiteIPList, FrontWhiteIPList
  31. };
  32. }
  33. return ApiResponse.Ok(result);
  34. })
  35. .WithTags("Config")
  36. .AllowAnonymous();
  37. }
  38. }