Password hashing via pwdlib (argon2id), stateless JWT auth (2h expiry) delivered as an Authorization: Bearer token, with an OAuth2PasswordBearer dependency (app/dependencies.py) protecting future routes. Establishes app/routers/ as the convention for feature routes, explicitly registered in main.py (no auto-discovery, unlike app/models/). The first admin user is seeded via an Alembic data migration gated on SUPERUSER_EMAIL/SUPERUSER_PASSWORD env vars (read at migration-run time only, never persisted to .env/git) rather than a script or open endpoint, so a fresh `alembic upgrade head` still succeeds without them. The migration mirrors the users/organization tables locally instead of importing the live SQLModel classes, keeping it a stable schema snapshot; it does import app.core.security.hash_password, a pure utility with no table-shape dependency. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
20 lines
406 B
TOML
20 lines
406 B
TOML
[project]
|
|
name = "vinindkoeb-v2"
|
|
version = "0.1.0"
|
|
description = "Add your description here"
|
|
requires-python = ">=3.13"
|
|
dependencies = [
|
|
"alembic>=1.20.0",
|
|
"fastapi[standard]>=0.141.1",
|
|
"psycopg[binary]>=3.3.6",
|
|
"pwdlib[argon2]>=0.3.1",
|
|
"pydantic-settings>=2.15.0",
|
|
"pyjwt>=2.15.0",
|
|
"sqlmodel>=0.0.47",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"httpx>=0.28.1",
|
|
"pytest>=9.1.1",
|
|
]
|