| <<<<<<< HEAD | |
| # β Firebase + OTP Authentication Implementation Complete | |
| All code changes have been applied successfully! Here are the next steps you need to follow: | |
| ## π Implementation Summary | |
| ### β Backend Changes (Completed) | |
| - β Updated `requirements.txt` with Firebase Admin SDK | |
| - β Updated `models.py` - User model now supports Firebase and OTP auth methods | |
| - β Created `email_validator.py` - Business email validation | |
| - β Created `firebase_auth.py` - Firebase token verification | |
| - β Created `brevo_service.py` - Brevo email service for OTP | |
| - β Created `otp_service.py` - OTP generation and verification | |
| - β Updated `auth_routes.py` - New endpoints for Firebase and OTP login | |
| ### β Frontend Changes (Completed) | |
| - β Updated `package.json` with Firebase SDK | |
| - β Created `config/firebase.js` - Firebase configuration | |
| - β Updated `services/auth.js` - Firebase and OTP auth functions | |
| - β Updated `contexts/AuthContext.jsx` - Firebase and OTP support | |
| - β Created `components/auth/LoginForm.jsx` - Login UI with both options | |
| - β Updated `App.jsx` - Integrated LoginForm component | |
| --- | |
| ## π Next Steps (YOU NEED TO DO THESE) | |
| ### Step 1: Install Dependencies | |
| **Backend:** | |
| ```bash | |
| cd backend | |
| pip install -r requirements.txt | |
| ``` | |
| **Frontend:** | |
| ```bash | |
| cd frontend | |
| npm install | |
| ``` | |
| --- | |
| ### Step 2: Set Up Firebase | |
| 1. **Create Firebase Project:** | |
| - Go to https://console.firebase.google.com/ | |
| - Create a new project or use existing one | |
| 2. **Enable Google Authentication:** | |
| - In Firebase Console β Authentication β Sign-in method | |
| - Enable "Google" provider | |
| - Set project support email | |
| 3. **Get Web App Config:** | |
| - Project Settings β Your apps β Add Web app | |
| - Copy the config values | |
| 4. **Get Service Account Key:** | |
| - Project Settings β Service accounts | |
| - Click "Generate new private key" | |
| - Download the JSON file | |
| 5. **Set Frontend Environment Variables:** | |
| Create `frontend/.env`: | |
| ```bash | |
| VITE_FIREBASE_API_KEY=your-api-key-here | |
| VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com | |
| VITE_FIREBASE_PROJECT_ID=your-project-id | |
| VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com | |
| VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id | |
| VITE_FIREBASE_APP_ID=your-app-id | |
| VITE_API_BASE_URL=http://localhost:7860 | |
| ``` | |
| 6. **Set Backend Environment Variables:** | |
| Option A (JSON file path): | |
| ```bash | |
| FIREBASE_SERVICE_ACCOUNT_KEY=/path/to/service-account-key.json | |
| ``` | |
| Option B (JSON string - recommended for Docker): | |
| ```bash | |
| FIREBASE_SERVICE_ACCOUNT_JSON='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}' | |
| ``` | |
| (Copy the entire JSON content from the downloaded file) | |
| --- | |
| ### Step 3: Set Up Brevo | |
| 1. **Create Brevo Account:** | |
| - Go to https://www.brevo.com/ | |
| - Sign up (free tier: 300 emails/day) | |
| 2. **Get API Key:** | |
| - Settings β API Keys | |
| - Generate new API key | |
| - Copy the key (starts with `xkeysib-`) | |
| 3. **Verify Sender Email:** | |
| - Senders & IP β Senders | |
| - Add sender email (e.g., `noreply@yourdomain.com`) | |
| - Verify via email | |
| 4. **Set Backend Environment Variables:** | |
| ```bash | |
| BREVO_API_KEY=xkeysib-your-api-key-here | |
| BREVO_SENDER_EMAIL=noreply@yourdomain.com | |
| BREVO_SENDER_NAME=EZOFIS AI | |
| ``` | |
| --- | |
| ### Step 4: Set JWT Secret | |
| Generate a secure random key: | |
| ```bash | |
| # Linux/Mac | |
| openssl rand -hex 32 | |
| # Or Python | |
| python -c "import secrets; print(secrets.token_hex(32))" | |
| ``` | |
| Set environment variable: | |
| ```bash | |
| JWT_SECRET_KEY=your-generated-secret-key-here | |
| ``` | |
| --- | |
| ### Step 5: Set Frontend URL | |
| ```bash | |
| FRONTEND_URL=http://localhost:5173 # Development | |
| # OR | |
| FRONTEND_URL=https://your-domain.com # Production | |
| ``` | |
| --- | |
| ### Step 6: Database Migration | |
| **If you have existing data:** | |
| - The new schema will be created automatically | |
| - Existing `extractions` table needs `user_id` column | |
| - You may need to assign existing records to a default user | |
| **For fresh start (recommended for development):** | |
| - Delete `data/app.db` (if exists) | |
| - Restart application - tables will be recreated | |
| --- | |
| ### Step 7: Test the Implementation | |
| 1. **Start Backend:** | |
| ```bash | |
| cd backend | |
| uvicorn app.main:app --reload --port 7860 | |
| ``` | |
| 2. **Start Frontend:** | |
| ```bash | |
| cd frontend | |
| npm run dev | |
| ``` | |
| 3. **Test Firebase Login:** | |
| - Navigate to http://localhost:5173 | |
| - Click "Google Sign In" tab | |
| - Sign in with business Google account | |
| - Should redirect to dashboard | |
| 4. **Test OTP Login:** | |
| - Click "Email / OTP" tab | |
| - Enter business email | |
| - Click "Send OTP" | |
| - Check email for OTP code | |
| - Enter OTP and verify | |
| - Should redirect to dashboard | |
| 5. **Test Business Email Validation:** | |
| - Try personal Gmail account β Should be blocked | |
| - Try OTP with personal email β Should be blocked | |
| --- | |
| ## π Environment Variables Checklist | |
| ### Backend (.env or system environment) | |
| - [ ] `FIREBASE_SERVICE_ACCOUNT_JSON` or `FIREBASE_SERVICE_ACCOUNT_KEY` | |
| - [ ] `BREVO_API_KEY` | |
| - [ ] `BREVO_SENDER_EMAIL` | |
| - [ ] `BREVO_SENDER_NAME` | |
| - [ ] `JWT_SECRET_KEY` | |
| - [ ] `FRONTEND_URL` | |
| ### Frontend (.env) | |
| - [ ] `VITE_FIREBASE_API_KEY` | |
| - [ ] `VITE_FIREBASE_AUTH_DOMAIN` | |
| - [ ] `VITE_FIREBASE_PROJECT_ID` | |
| - [ ] `VITE_FIREBASE_STORAGE_BUCKET` | |
| - [ ] `VITE_FIREBASE_MESSAGING_SENDER_ID` | |
| - [ ] `VITE_FIREBASE_APP_ID` | |
| - [ ] `VITE_API_BASE_URL` | |
| --- | |
| ## π Security Reminders | |
| 1. β Never commit API keys or secrets to git | |
| 2. β Use `.env` files (add to `.gitignore`) | |
| 3. β Business email validation is enforced on both frontend and backend | |
| 4. β JWT tokens expire after 7 days | |
| 5. β OTP codes expire after 10 minutes | |
| 6. β Maximum 5 OTP verification attempts | |
| --- | |
| ## π Documentation | |
| - **Firebase Setup:** See `FIREBASE_OTP_SETUP.md` for detailed instructions | |
| - **Brevo API:** https://developers.brevo.com/reference/sendtransacemail | |
| --- | |
| ## β οΈ Important Notes | |
| 1. **Database Schema Change:** | |
| - User model changed from `google_id` (required) to `firebase_uid` (optional) | |
| - If you have existing users, you'll need to migrate the data | |
| - For development, deleting `data/app.db` is the easiest option | |
| 2. **Business Email Validation:** | |
| - Personal email domains are blocked (Gmail, Yahoo, Outlook, etc.) | |
| - Validation happens on both frontend and backend | |
| - Users must use their work/corporate email addresses | |
| 3. **OTP Storage:** | |
| - Currently stored in memory (works for single server) | |
| - For production with multiple servers, consider using Redis | |
| --- | |
| ## π You're All Set! | |
| Once you complete the setup steps above, your application will have: | |
| - β Firebase Google Sign-in (no OAuth credentials needed!) | |
| - β Email/OTP authentication via Brevo | |
| - β Business email validation | |
| - β User-specific data isolation | |
| - β Secure JWT token authentication | |
| Good luck! π | |
| ======= | |
| # β Firebase + OTP Authentication Implementation Complete | |
| All code changes have been applied successfully! Here are the next steps you need to follow: | |
| ## π Implementation Summary | |
| ### β Backend Changes (Completed) | |
| - β Updated `requirements.txt` with Firebase Admin SDK | |
| - β Updated `models.py` - User model now supports Firebase and OTP auth methods | |
| - β Created `email_validator.py` - Business email validation | |
| - β Created `firebase_auth.py` - Firebase token verification | |
| - β Created `brevo_service.py` - Brevo email service for OTP | |
| - β Created `otp_service.py` - OTP generation and verification | |
| - β Updated `auth_routes.py` - New endpoints for Firebase and OTP login | |
| ### β Frontend Changes (Completed) | |
| - β Updated `package.json` with Firebase SDK | |
| - β Created `config/firebase.js` - Firebase configuration | |
| - β Updated `services/auth.js` - Firebase and OTP auth functions | |
| - β Updated `contexts/AuthContext.jsx` - Firebase and OTP support | |
| - β Created `components/auth/LoginForm.jsx` - Login UI with both options | |
| - β Updated `App.jsx` - Integrated LoginForm component | |
| --- | |
| ## π Next Steps (YOU NEED TO DO THESE) | |
| ### Step 1: Install Dependencies | |
| **Backend:** | |
| ```bash | |
| cd backend | |
| pip install -r requirements.txt | |
| ``` | |
| **Frontend:** | |
| ```bash | |
| cd frontend | |
| npm install | |
| ``` | |
| --- | |
| ### Step 2: Set Up Firebase | |
| 1. **Create Firebase Project:** | |
| - Go to https://console.firebase.google.com/ | |
| - Create a new project or use existing one | |
| 2. **Enable Google Authentication:** | |
| - In Firebase Console β Authentication β Sign-in method | |
| - Enable "Google" provider | |
| - Set project support email | |
| 3. **Get Web App Config:** | |
| - Project Settings β Your apps β Add Web app | |
| - Copy the config values | |
| 4. **Get Service Account Key:** | |
| - Project Settings β Service accounts | |
| - Click "Generate new private key" | |
| - Download the JSON file | |
| 5. **Set Frontend Environment Variables:** | |
| Create `frontend/.env`: | |
| ```bash | |
| VITE_FIREBASE_API_KEY=your-api-key-here | |
| VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com | |
| VITE_FIREBASE_PROJECT_ID=your-project-id | |
| VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com | |
| VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id | |
| VITE_FIREBASE_APP_ID=your-app-id | |
| VITE_API_BASE_URL=http://localhost:7860 | |
| ``` | |
| 6. **Set Backend Environment Variables:** | |
| Option A (JSON file path): | |
| ```bash | |
| FIREBASE_SERVICE_ACCOUNT_KEY=/path/to/service-account-key.json | |
| ``` | |
| Option B (JSON string - recommended for Docker): | |
| ```bash | |
| FIREBASE_SERVICE_ACCOUNT_JSON='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}' | |
| ``` | |
| (Copy the entire JSON content from the downloaded file) | |
| --- | |
| ### Step 3: Set Up Brevo | |
| 1. **Create Brevo Account:** | |
| - Go to https://www.brevo.com/ | |
| - Sign up (free tier: 300 emails/day) | |
| 2. **Get API Key:** | |
| - Settings β API Keys | |
| - Generate new API key | |
| - Copy the key (starts with `xkeysib-`) | |
| 3. **Verify Sender Email:** | |
| - Senders & IP β Senders | |
| - Add sender email (e.g., `noreply@yourdomain.com`) | |
| - Verify via email | |
| 4. **Set Backend Environment Variables:** | |
| ```bash | |
| BREVO_API_KEY=xkeysib-your-api-key-here | |
| BREVO_SENDER_EMAIL=noreply@yourdomain.com | |
| BREVO_SENDER_NAME=EZOFIS AI | |
| ``` | |
| --- | |
| ### Step 4: Set JWT Secret | |
| Generate a secure random key: | |
| ```bash | |
| # Linux/Mac | |
| openssl rand -hex 32 | |
| # Or Python | |
| python -c "import secrets; print(secrets.token_hex(32))" | |
| ``` | |
| Set environment variable: | |
| ```bash | |
| JWT_SECRET_KEY=your-generated-secret-key-here | |
| ``` | |
| --- | |
| ### Step 5: Set Frontend URL | |
| ```bash | |
| FRONTEND_URL=http://localhost:5173 # Development | |
| # OR | |
| FRONTEND_URL=https://your-domain.com # Production | |
| ``` | |
| --- | |
| ### Step 6: Database Migration | |
| **If you have existing data:** | |
| - The new schema will be created automatically | |
| - Existing `extractions` table needs `user_id` column | |
| - You may need to assign existing records to a default user | |
| **For fresh start (recommended for development):** | |
| - Delete `data/app.db` (if exists) | |
| - Restart application - tables will be recreated | |
| --- | |
| ### Step 7: Test the Implementation | |
| 1. **Start Backend:** | |
| ```bash | |
| cd backend | |
| uvicorn app.main:app --reload --port 7860 | |
| ``` | |
| 2. **Start Frontend:** | |
| ```bash | |
| cd frontend | |
| npm run dev | |
| ``` | |
| 3. **Test Firebase Login:** | |
| - Navigate to http://localhost:5173 | |
| - Click "Google Sign In" tab | |
| - Sign in with business Google account | |
| - Should redirect to dashboard | |
| 4. **Test OTP Login:** | |
| - Click "Email / OTP" tab | |
| - Enter business email | |
| - Click "Send OTP" | |
| - Check email for OTP code | |
| - Enter OTP and verify | |
| - Should redirect to dashboard | |
| 5. **Test Business Email Validation:** | |
| - Try personal Gmail account β Should be blocked | |
| - Try OTP with personal email β Should be blocked | |
| --- | |
| ## π Environment Variables Checklist | |
| ### Backend (.env or system environment) | |
| - [ ] `FIREBASE_SERVICE_ACCOUNT_JSON` or `FIREBASE_SERVICE_ACCOUNT_KEY` | |
| - [ ] `BREVO_API_KEY` | |
| - [ ] `BREVO_SENDER_EMAIL` | |
| - [ ] `BREVO_SENDER_NAME` | |
| - [ ] `JWT_SECRET_KEY` | |
| - [ ] `FRONTEND_URL` | |
| ### Frontend (.env) | |
| - [ ] `VITE_FIREBASE_API_KEY` | |
| - [ ] `VITE_FIREBASE_AUTH_DOMAIN` | |
| - [ ] `VITE_FIREBASE_PROJECT_ID` | |
| - [ ] `VITE_FIREBASE_STORAGE_BUCKET` | |
| - [ ] `VITE_FIREBASE_MESSAGING_SENDER_ID` | |
| - [ ] `VITE_FIREBASE_APP_ID` | |
| - [ ] `VITE_API_BASE_URL` | |
| --- | |
| ## π Security Reminders | |
| 1. β Never commit API keys or secrets to git | |
| 2. β Use `.env` files (add to `.gitignore`) | |
| 3. β Business email validation is enforced on both frontend and backend | |
| 4. β JWT tokens expire after 7 days | |
| 5. β OTP codes expire after 10 minutes | |
| 6. β Maximum 5 OTP verification attempts | |
| --- | |
| ## π Documentation | |
| - **Firebase Setup:** See `FIREBASE_OTP_SETUP.md` for detailed instructions | |
| - **Brevo API:** https://developers.brevo.com/reference/sendtransacemail | |
| --- | |
| ## β οΈ Important Notes | |
| 1. **Database Schema Change:** | |
| - User model changed from `google_id` (required) to `firebase_uid` (optional) | |
| - If you have existing users, you'll need to migrate the data | |
| - For development, deleting `data/app.db` is the easiest option | |
| 2. **Business Email Validation:** | |
| - Personal email domains are blocked (Gmail, Yahoo, Outlook, etc.) | |
| - Validation happens on both frontend and backend | |
| - Users must use their work/corporate email addresses | |
| 3. **OTP Storage:** | |
| - Currently stored in memory (works for single server) | |
| - For production with multiple servers, consider using Redis | |
| --- | |
| ## π You're All Set! | |
| Once you complete the setup steps above, your application will have: | |
| - β Firebase Google Sign-in (no OAuth credentials needed!) | |
| - β Email/OTP authentication via Brevo | |
| - β Business email validation | |
| - β User-specific data isolation | |
| - β Secure JWT token authentication | |
| Good luck! π | |
| >>>>>>> daae7a900bd14d0802e4f04b99edb85493053f1d | |