Add SMTP infrastructure + auth rate limiting

Foundation for the upcoming email-based invite and password-reset flows.

- IEmailSender abstraction with SmtpEmailSender (MailKit 4.16) and a
  LoggingEmailSender fallback used automatically when SMTP is unconfigured
  so local dev works without a real SMTP server.
- Fixed-window rate limits keyed by remote IP: 10 / 15 min on /login,
  5 / hour on /register. Returns 429 with Retry-After. Bypassed in the
  Testing environment so the existing integration suite is unaffected.
- New env vars (SMTP_*, APP_BASE_URL) plumbed through docker-compose
  and documented in .env.example.
This commit is contained in:
Josh Rogers
2026-05-08 22:35:57 -05:00
parent 86603b4f4a
commit a1635218a8
13 changed files with 270 additions and 4 deletions
@@ -0,0 +1,3 @@
namespace YesChef.Api.Email;
public record EmailMessage(string ToAddress, string Subject, string HtmlBody, string TextBody);