WIP checkpoint: Enforce 18+ age gate at account registration

This commit is contained in:
2026-08-18 15:32:16 +00:00
parent ef646a8e54
commit 62889f39f1
2 changed files with 68 additions and 28 deletions
+14 -4
View File
@@ -1,6 +1,6 @@
"""Authentication router - login, register, token refresh."""
from datetime import datetime, timedelta, timezone
from datetime import date, datetime, timedelta, timezone
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
@@ -77,9 +77,19 @@ def hash_password(password: str) -> str:
return pwd_context.hash(password)
def calculate_age(birth_date: datetime) -> int:
"""Calculate age in years from a birth date."""
today = datetime.now(timezone.utc).date()
def calculate_age(birth_date: date, today: date | None = None) -> int:
"""Calculate age in years from a birth date.
Args:
birth_date: The person's date of birth.
today: The reference date. Defaults to today's date (UTC).
Returns:
Age in whole years as of the reference date.
"""
if today is None:
today = datetime.now(timezone.utc).date()
age = today.year - birth_date.year
# Adjust if birthday hasn't occurred yet this year
if (today.month, today.day) < (birth_date.month, birth_date.day):