Implemented simple authentication for testing and admin panel for user management: Backend: - Add simple email/password login for test users (admin@test.local, user@test.local) - Implement RBAC (Role-Based Access Control) with Permission enum - Create admin endpoints for user management and system analytics - Add bcrypt password hashing for test users - Create script to generate test users in database Frontend: - Add SimpleLogin component for test authentication - Create AdminPanel with user management and system analytics - Add role-based navigation (Admin tab visible only for admins) - Update AuthContext to support both MSAL and simple login - Add API methods for admin operations Features: - Admins can view all users, manage roles, activate/deactivate accounts - Admins can view system-wide analytics (users, conversations, tokens, costs) - Regular users only see their own chats and usage - Role badges in UI show user role (user/admin/superadmin) Note: Simple authentication is for testing only. Production uses Azure AD MSAL. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
67 lines
1.3 KiB
Python
67 lines
1.3 KiB
Python
"""
|
|
Authentication Schemas
|
|
|
|
Pydantic models for authentication requests and responses
|
|
"""
|
|
|
|
from pydantic import BaseModel, EmailStr
|
|
from typing import Optional
|
|
|
|
|
|
class MSALCallbackRequest(BaseModel):
|
|
"""MSAL callback request with ID token"""
|
|
id_token: str
|
|
|
|
|
|
class SimpleLoginRequest(BaseModel):
|
|
"""Simple login request with email and password (for test users)"""
|
|
email: EmailStr
|
|
password: str
|
|
ip_address: Optional[str] = None
|
|
user_agent: Optional[str] = None
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
"""Login request with Azure AD token"""
|
|
id_token: str
|
|
ip_address: Optional[str] = None
|
|
user_agent: Optional[str] = None
|
|
|
|
|
|
class LoginResponse(BaseModel):
|
|
"""Login response with tokens and user info"""
|
|
access_token: str
|
|
refresh_token: str
|
|
token_type: str
|
|
expires_in: int
|
|
user: dict
|
|
|
|
|
|
class RefreshTokenRequest(BaseModel):
|
|
"""Refresh token request"""
|
|
refresh_token: str
|
|
|
|
|
|
class RefreshTokenResponse(BaseModel):
|
|
"""Refresh token response"""
|
|
access_token: str
|
|
token_type: str
|
|
expires_in: int
|
|
|
|
|
|
class UserInfo(BaseModel):
|
|
"""Current user information"""
|
|
id: str
|
|
email: EmailStr
|
|
display_name: str
|
|
role: str
|
|
is_active: bool
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class LogoutResponse(BaseModel):
|
|
"""Logout response"""
|
|
message: str
|
|
success: bool
|