Backend: - OAuth service with pluggable provider architecture (Google + Authentik) - Generic authorize/callback endpoints for any provider - Authentik OIDC integration (configurable base URL) - hashed_password made nullable for OAuth-only users - Migration 009: nullable password column - /auth/switch endpoint returns full AuthResponse for account switching - OAuth-only users get clear error on password login attempt - UserResponse includes oauth_provider + avatar_url Frontend: - OAuth buttons on login form (Google + Authentik) - OAuth callback handler (/auth/callback route) - Multi-account auth store (accounts array, addAccount, switchTo, removeAccount) - Account switcher dropdown in header (hover to see other accounts) - "Add another account" option - English + Russian translations Config: - GOOGLE_CLIENT_ID/SECRET/REDIRECT_URI - AUTHENTIK_CLIENT_ID/SECRET/BASE_URL/REDIRECT_URI Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43 lines
974 B
TOML
43 lines
974 B
TOML
[project]
|
|
name = "ai-assistant-backend"
|
|
version = "0.1.0"
|
|
description = "Personal AI Assistant - Backend"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi>=0.115.0",
|
|
"uvicorn[standard]>=0.30.0",
|
|
"sqlalchemy[asyncio]>=2.0.30",
|
|
"asyncpg>=0.30.0",
|
|
"alembic>=1.13.0",
|
|
"pydantic[email]>=2.9.0",
|
|
"pydantic-settings>=2.5.0",
|
|
"passlib[bcrypt]>=1.7.4",
|
|
"python-jose[cryptography]>=3.3.0",
|
|
"python-multipart>=0.0.9",
|
|
"httpx>=0.27.0",
|
|
"anthropic>=0.40.0",
|
|
"pymupdf>=1.24.0",
|
|
"aiofiles>=24.0.0",
|
|
"apscheduler>=3.10.0",
|
|
"weasyprint>=62.0",
|
|
"jinja2>=3.1.0",
|
|
"python-json-logger>=2.0.0",
|
|
"authlib>=1.3.0",
|
|
"itsdangerous>=2.2.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0.0",
|
|
"pytest-asyncio>=0.24.0",
|
|
"httpx>=0.27.0",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=69.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|