brand-master/PASSWORD_RESET_GUIDE.md
dvirlabs d0b672ac15
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Update app
2026-05-10 03:26:03 +03:00

305 lines
8.9 KiB
Markdown

# Password Reset with Email PIN - Implementation Summary
## What Was Implemented
### 1. Email Service Module ✅
**File**: `backend/app/services/email.py`
**Features**:
- `send_email()` - Generic SMTP email sender
- `send_password_reset_pin()` - Sends 6-digit PIN with HTML/plain text template
- `send_welcome_email()` - Welcome new users
- Graceful fallback: Prints to console if SMTP not configured
- Professional HTML email templates with branding
**Template Highlights**:
- Beautiful HTML design with Brand Master branding
- 6-digit PIN displayed prominently
- 15-minute expiration timer
- Instructions for password reset
- Responsive design
- Plain text fallback
### 2. Auth Router Integration ✅
**File**: `backend/app/routers/auth.py`
**Changes**:
- Imported email service functions
- Updated `request_reset_pin()` to send email instead of just printing
- Updated `register()` to send welcome email to new users
- Added error handling (non-blocking - won't fail if email fails)
- Removed PIN from API response (security fix)
**Flow**:
1. User requests password reset with email
2. System generates 6-digit PIN
3. Stores PIN in database with 15-minute expiration
4. **Sends PIN to user's email** (new!)
5. Falls back to console print if SMTP not configured
6. User enters PIN and new password
7. System validates PIN and updates password
### 3. Configuration Guide ✅
**File**: `EMAIL_SETUP.md`
**Includes**:
- 3 email provider options (Gmail, SendGrid, AWS SES)
- Step-by-step setup for each provider
- Kubernetes deployment configuration
- Secret management (production best practices)
- Testing instructions
- Troubleshooting guide
- Production checklist
### 4. Quick Fix Deployment Script ✅
**File**: `quick-fix.bat`
**Automates**:
- Applies both database migrations (007, 008)
- Builds backend and frontend Docker images
- Pushes to Harbor registry
- Deploys via Helm
- Shows next steps and instructions
## What You Need to Do
### REQUIRED Steps
#### 1. Apply Database Migrations (CRITICAL)
The system currently has errors because migrations aren't applied:
```bash
# Option A: Use quick-fix script (does everything)
quick-fix.bat
# Option B: Apply migrations manually
apply-migration.bat 007_enhance_contact_messages.sql
apply-migration.bat 008_add_username_to_users.sql
```
**These migrations fix**:
- ❌ "column full_name does not exist" → ✅ Renames name → full_name
- ❌ "column username does not exist" → ✅ Adds username column
#### 2. Configure Email (for password reset to work)
**Quick Setup (Gmail)**:
1. Get Gmail App Password:
- Go to https://myaccount.google.com/apppasswords
- Generate password for "Mail"
- Copy 16-character password
2. Update `brand-master-chart/values.yaml`:
```yaml
backend:
env:
# ... existing vars ...
- name: SMTP_HOST
value: "smtp.gmail.com"
- name: SMTP_PORT
value: "587"
- name: SMTP_USERNAME
value: "your-email@gmail.com"
- name: SMTP_PASSWORD
value: "abcd efgh ijkl mnop" # Your 16-char app password
- name: SMTP_FROM
value: "Brand Master <noreply@brand-master.com>"
```
3. Redeploy:
```bash
cd brand-master-chart
helm upgrade brand-master . --namespace my-apps --wait
```
**Read [EMAIL_SETUP.md](EMAIL_SETUP.md) for**:
- Other email providers (SendGrid, AWS SES)
- Production setup with Kubernetes Secrets
- Troubleshooting guide
### OPTIONAL Steps
#### 3. Test Email Functionality
**Test Password Reset**:
```bash
# Request PIN
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/request-reset-pin \
-H "Content-Type: application/json" \
-d '{"email": "your-test-email@gmail.com"}'
# Check your email for 6-digit PIN
# Reset password
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/reset-password-with-pin \
-H "Content-Type: application/json" \
-d '{
"email": "your-test-email@gmail.com",
"pin": "123456",
"new_password": "NewPassword123!"
}'
```
**Or test via UI**:
1. Go to https://brand-master.dvirlabs.com/login
2. Click "Forgot Password?"
3. Enter email
4. Check inbox for PIN
5. Enter PIN and new password
#### 4. Monitor Email Sending
```bash
# View backend logs
kubectl logs -n my-apps deployment/brand-master-backend -f
# Look for:
# ✅ Email sent successfully to user@example.com
# ⚠️ SMTP not configured. Email would have been sent to: ...
# ❌ Failed to send email: <error>
```
## Current Status
| Feature | Status | Notes |
|---------|--------|-------|
| Email service code | ✅ Complete | `backend/app/services/email.py` created |
| Password reset PIN email | ✅ Complete | Sends HTML email with 6-digit PIN |
| Welcome email | ✅ Complete | Sent on new user registration |
| Auth router integration | ✅ Complete | Email functions called in endpoints |
| Configuration guide | ✅ Complete | See `EMAIL_SETUP.md` |
| Deployment script | ✅ Complete | `quick-fix.bat` |
| Database migrations | ⚠️ **NOT APPLIED** | Must run migrations! |
| SMTP configuration | ⚠️ **NOT CONFIGURED** | Emails print to console until configured |
| Production deployment | ⚠️ Pending | Need to rebuild/redeploy |
## How It Works Now
### Without SMTP Configured (Current State)
**What happens**:
1. User requests password reset
2. System generates PIN
3. **Email service prints to console**:
```
⚠️ SMTP not configured. Email would have been sent to: user@example.com
Subject: Brand Master - Password Reset PIN
Body: Your PIN is: 123456
```
4. You check backend logs for the PIN
5. User can still reset password with the PIN
**This is fine for testing but not production!**
### With SMTP Configured (After Setup)
**What happens**:
1. User requests password reset
2. System generates PIN
3. **Email sent to user's inbox** ✅
4. User receives beautiful HTML email with PIN
5. User resets password (no need to check logs)
## Files Changed
### Created
- ✅ `backend/app/services/email.py` - Email service module
- ✅ `EMAIL_SETUP.md` - Email configuration guide
- ✅ `quick-fix.bat` - Automated deployment script
- ✅ `PASSWORD_RESET_GUIDE.md` - This file
### Modified
- ✅ `backend/app/routers/auth.py` - Integrated email service
### Ready to Apply
- ⚠️ `backend/migrations/007_enhance_contact_messages.sql`
- ⚠️ `backend/migrations/008_add_username_to_users.sql`
## Quick Start Commands
### Full Automated Deployment
```bash
# This does everything: migrations + build + deploy
quick-fix.bat
```
### Manual Step-by-Step
```bash
# 1. Apply migrations
apply-migration.bat 007_enhance_contact_messages.sql
apply-migration.bat 008_add_username_to_users.sql
# 2. Build images
cd backend && docker build -t harbor.dvirlabs.com/my-apps/brand-master-backend:latest . && cd ..
cd frontend && docker build -t harbor.dvirlabs.com/my-apps/brand-master-frontend:latest . && cd ..
# 3. Push images
docker push harbor.dvirlabs.com/my-apps/brand-master-backend:latest
docker push harbor.dvirlabs.com/my-apps/brand-master-frontend:latest
# 4. Deploy
cd brand-master-chart
helm upgrade brand-master . --namespace my-apps --wait
```
## Email Provider Recommendations
| Provider | Best For | Cost | Setup Difficulty |
|----------|----------|------|------------------|
| **Gmail** | Testing, Development | Free | Easy (App Password) |
| **SendGrid** | Production (Small) | Free tier: 100 emails/day | Medium |
| **AWS SES** | Production (Large) | $0.10 per 1000 emails | Medium-Hard |
| **Mailgun** | Production | Free tier: 5000 emails/month | Medium |
**My Recommendation**:
- **For testing now**: Gmail (5 minutes to setup)
- **For production later**: SendGrid or AWS SES (better deliverability)
## Testing Checklist
After deployment:
- [ ] Can submit contact form without errors
- [ ] Can register with username and phone
- [ ] Can login with email, username, OR phone
- [ ] Can request password reset
- [ ] Receive PIN email (or see in logs if SMTP not configured)
- [ ] Can reset password with PIN
- [ ] PIN expires after 15 minutes
- [ ] Invalid PIN shows error
- [ ] Welcome email sent on registration
## Troubleshooting
### "Column full_name does not exist"
**Fix**: Run `apply-migration.bat 007_enhance_contact_messages.sql`
### "Column username does not exist"
**Fix**: Run `apply-migration.bat 008_add_username_to_users.sql`
### "SMTP not configured" in logs
**Fix**: Configure SMTP in `values.yaml` (see [EMAIL_SETUP.md](EMAIL_SETUP.md))
### PIN not received in email
**Fix**: Check backend logs for error message, verify SMTP credentials
### Emails go to spam
**Fix**: Use proper From address, setup SPF/DKIM, or use SendGrid/SES
## Next Features (Future)
Possible enhancements:
- ✉️ Order confirmation emails
- ✉️ Shipping notification emails
- ✉️ Contact form notification to admin
- ✉️ Email templates customization UI
- 📊 Email delivery tracking
- 🎨 Email template builder
---
**Implementation Date**: January 2025
**Status**: Ready to deploy (migrations required)
**Documentation**: EMAIL_SETUP.md, API_DOCUMENTATION.md