Add comprehensive database integration, authentication, and admin dashboard
This commit introduces major enhancements to Talk2Me: ## Database Integration - PostgreSQL support with SQLAlchemy ORM - Redis integration for caching and real-time analytics - Automated database initialization scripts - Migration support infrastructure ## User Authentication System - JWT-based API authentication - Session-based web authentication - API key authentication for programmatic access - User roles and permissions (admin/user) - Login history and session tracking - Rate limiting per user with customizable limits ## Admin Dashboard - Real-time analytics and monitoring - User management interface (create, edit, delete users) - System health monitoring - Request/error tracking - Language pair usage statistics - Performance metrics visualization ## Key Features - Dual authentication support (token + user accounts) - Graceful fallback for missing services - Non-blocking analytics middleware - Comprehensive error handling - Session management with security features ## Bug Fixes - Fixed rate limiting bypass for admin routes - Added missing email validation method - Improved error handling for missing database tables - Fixed session-based authentication for API endpoints 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		
							
								
								
									
										75
									
								
								admin/templates/base.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								admin/templates/base.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|     <title>{% block title %}Talk2Me Admin Dashboard{% endblock %}</title> | ||||
|      | ||||
|     <!-- Bootstrap CSS --> | ||||
|     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> | ||||
|      | ||||
|     <!-- Font Awesome --> | ||||
|     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | ||||
|      | ||||
|     <!-- Chart.js --> | ||||
|     <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.js"></script> | ||||
|      | ||||
|     <!-- Custom CSS --> | ||||
|     <link rel="stylesheet" href="{{ url_for('admin.static', filename='css/admin.css') }}"> | ||||
|      | ||||
|     {% block extra_css %}{% endblock %} | ||||
| </head> | ||||
| <body> | ||||
|     <!-- Navigation --> | ||||
|     <nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top"> | ||||
|         <div class="container-fluid"> | ||||
|             <a class="navbar-brand" href="{{ url_for('admin.dashboard') }}"> | ||||
|                 <i class="fas fa-language"></i> Talk2Me Admin | ||||
|             </a> | ||||
|             <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"> | ||||
|                 <span class="navbar-toggler-icon"></span> | ||||
|             </button> | ||||
|             <div class="collapse navbar-collapse" id="navbarNav"> | ||||
|                 <ul class="navbar-nav ms-auto"> | ||||
|                     <li class="nav-item"> | ||||
|                         <a class="nav-link" href="{{ url_for('admin.dashboard') }}"> | ||||
|                             <i class="fas fa-tachometer-alt"></i> Dashboard | ||||
|                         </a> | ||||
|                     </li> | ||||
|                     <li class="nav-item"> | ||||
|                         <a class="nav-link" href="{{ url_for('admin.users') }}"> | ||||
|                             <i class="fas fa-users"></i> Users | ||||
|                         </a> | ||||
|                     </li> | ||||
|                     <li class="nav-item"> | ||||
|                         <a class="nav-link" href="#" onclick="exportData('all')"> | ||||
|                             <i class="fas fa-download"></i> Export Data | ||||
|                         </a> | ||||
|                     </li> | ||||
|                     <li class="nav-item"> | ||||
|                         <a class="nav-link" href="{{ url_for('admin.logout') }}"> | ||||
|                             <i class="fas fa-sign-out-alt"></i> Logout | ||||
|                         </a> | ||||
|                     </li> | ||||
|                 </ul> | ||||
|             </div> | ||||
|         </div> | ||||
|     </nav> | ||||
|  | ||||
|     <!-- Main Content --> | ||||
|     <main class="container-fluid mt-5 pt-3"> | ||||
|         {% block content %}{% endblock %} | ||||
|     </main> | ||||
|  | ||||
|     <!-- Bootstrap JS --> | ||||
|     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> | ||||
|      | ||||
|     <!-- jQuery (for AJAX) --> | ||||
|     <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script> | ||||
|      | ||||
|     <!-- Custom JS --> | ||||
|     <script src="{{ url_for('admin.static', filename='js/admin.js') }}"></script> | ||||
|      | ||||
|     {% block extra_js %}{% endblock %} | ||||
| </body> | ||||
| </html> | ||||
		Reference in New Issue
	
	Block a user