60 lines
2.2 KiB
Markdown
60 lines
2.2 KiB
Markdown
# Implementation Plan - Email Services
|
|
|
|
## 1. Infrastructure
|
|
- Add MailHog to `docker-compose.yml` for local SMTP testing.
|
|
- Install `nodemailer` and `@types/nodemailer`.
|
|
|
|
## 2. Database Schema
|
|
- Update `shared/schema.ts`:
|
|
- Add `password_reset_tokens` table.
|
|
- `id` (uuid, pk)
|
|
- `userId` (fk users.id)
|
|
- `token` (string, unique)
|
|
- `expiresAt` (timestamp)
|
|
- `isUsed` (boolean)
|
|
- Add validation schemas (`insertPasswordResetTokenSchema`).
|
|
|
|
## 3. Email Service (`server/email.ts`)
|
|
- Create `EmailService` class.
|
|
- Methods:
|
|
- `sendWelcomeEmail(user)`
|
|
- `sendPasswordResetEmail(user, token)`
|
|
- Configuration:
|
|
- Use `nodemailer`.
|
|
- Fetch SMTP settings from `storage.getSystemSettings` (fallback to env vars or MailHog defaults for dev).
|
|
- Keys: `smtp_host`, `smtp_port`, `smtp_user`, `smtp_pass`, `smtp_secure`, `smtp_from`.
|
|
|
|
## 4. Backend Routes (`server/routes.ts`)
|
|
- **Modify Registration**:
|
|
- After successful user creation, call `emailService.sendWelcomeEmail`.
|
|
- **New Routes**:
|
|
- `POST /api/auth/forgot-password`:
|
|
- Input: `email`.
|
|
- Logic: Find user, generate token (uuid), save to DB, send email.
|
|
- `POST /api/auth/reset-password`:
|
|
- Input: `token`, `newPassword`.
|
|
- Logic: Validate token (exists, not used, not expired), hash new password, update user, mark token used.
|
|
|
|
## 5. Storage (`server/storage.ts`)
|
|
- Update `IStorage`, `MemStorage`, `DbStorage`:
|
|
- `createPasswordResetToken(token)`
|
|
- `getPasswordResetToken(token)`
|
|
- `markPasswordResetTokenUsed(tokenId)`
|
|
|
|
## 6. Frontend
|
|
- **Forgot Password Page** (`/forgot-password`):
|
|
- Form: Email input.
|
|
- Action: `POST /api/auth/forgot-password`.
|
|
- **Reset Password Page** (`/reset-password`):
|
|
- Form: New Password, Confirm Password.
|
|
- Params: `?token=...` from URL.
|
|
- Action: `POST /api/auth/reset-password`.
|
|
- **Login Page Update**:
|
|
- Add "Forgot Password?" link.
|
|
- **Admin Settings**:
|
|
- Add "Email Settings" section in `AdminUserManagement` or `Settings` page (optional but requested "add email settings").
|
|
- Form to set SMTP host/port/etc.
|
|
|
|
## 7. Configuration
|
|
- Add `scripts/test-email-flow.ts` to simulate the flow and verify via MailHog API (`http://localhost:8025/api/v2/messages`).
|