# Product App - Modular Flask Application ## 🏗️ Structure ``` product_app/ ├── app.py # Main application file ├── passenger_wsgi.py # Passenger WSGI entry point for production ├── requirements.txt # Python dependencies ├── blueprints/ # Modular routes organized by feature │ ├── __init__.py │ ├── auth.py # Login/logout/session management │ └── users.py # User CRUD operations ├── templates/ # HTML templates │ ├── login.html │ └── user_manager.html └── data/ # Data storage └── users.json # User accounts with hashed passwords ``` ## 🎯 Features Implemented ### ✅ Authentication System (blueprints/auth.py) - Login with username/password - Session management - Password hashing (PBKDF2-SHA256, 1M iterations) - Login required decorator - Permission checking: `can_user('manage_users')` - User status checking (active/inactive) ### ✅ User Management (blueprints/users.py) - View all users - Add new users - Delete users - Toggle active/inactive status - Change passwords (requires admin verification) - Location-based access control - Permission system (manage_users, create_quotes, etc.) - Download users as JSON ## 🔐 Default Login - **Username:** `Master` - **Password:** `Master` - **Permissions:** Full access (manage_users) ## 🚀 Local Testing ```bash cd product_app python app.py ``` Visit: http://localhost:8080/ ## Routes ### Main Routes - `/` - Home (redirects to login if not authenticated) - `/test` - Test page to verify app is running ### Authentication Routes (auth_bp) - `/login` - Login page - `/logout` - Logout - `/api/login` - POST: Login API - `/api/session` - GET: Current session info ### User Management Routes (users_bp) - `/users/` - User management page - `/users/api` - GET: List all users, POST: Add user - `/users/api/` - DELETE: Delete user - `/users/api//active` - PATCH: Toggle active status - `/users/api//change-password` - POST: Change password - `/users/api/download` - GET: Download users.json ## 📦 Production Deployment ### Upload to Server: `/home/bmdwtjuw/product-finder/` Files to upload: - `app.py` - `passenger_wsgi.py` (or just use existing) - `blueprints/` (entire folder) - `__init__.py` - `auth.py` - `users.py` - `templates/` (entire folder) - `login.html` - `user_manager.html` - `data/users.json` ### Control Panel Settings - **Application startup file:** `passenger_wsgi.py` (or `app.py`) - **Application Entry point:** `application` - **Python version:** 3.13.11 ### Test After Deployment: 1. https://columbiawindows.com/product-finder/test 2. https://columbiawindows.com/product-finder/login 3. Login with Master/Master 4. Test user management ## 🔧 Adding New Features ### Create a New Blueprint 1. Create `blueprints/your_feature.py`: ```python from flask import Blueprint, render_template from blueprints.auth import login_required, can_user your_feature_bp = Blueprint('your_feature', __name__, url_prefix='/your-feature') @your_feature_bp.route('/') @login_required def index(): return render_template('your_feature.html') ``` 2. Register in `app.py`: ```python from blueprints.your_feature import your_feature_bp app.register_blueprint(your_feature_bp) ``` 3. Create `templates/your_feature.html` 4. Test locally, then upload to server ## 📝 Benefits of Blueprint Structure ✅ **Separation of Concerns:** Each feature in its own file ✅ **Easy to Maintain:** Find and edit specific features quickly ✅ **Scalable:** Add new features without touching existing code ✅ **Testable:** Each blueprint can be tested independently ✅ **Reusable:** Share decorators (login_required, permission_required) across blueprints ## 🛠️ Next Steps - Add more blueprints for other features (quotes, products, etc.) - Add more templates as needed - Extend permission system - Add location selection page - Add the main product finder quiz