Spaces:
Runtime error
Runtime error
import uuid | |
import os | |
from typing import Optional | |
from fastapi import Depends, Request | |
from fastapi_users import BaseUserManager, FastAPIUsers, UUIDIDMixin | |
from fastapi_users.authentication import ( | |
AuthenticationBackend, | |
BearerTransport, | |
JWTStrategy, | |
) | |
from fastapi_users.db import SQLAlchemyUserDatabase | |
from app.db import User, get_user_db | |
from dotenv import load_dotenv | |
# Get the current environment from the environment variable | |
current_environment = os.getenv("APP_ENV", "dev") | |
# Load the appropriate .env file based on the current environment | |
if current_environment == "dev": | |
load_dotenv(".env.dev") | |
elif current_environment == "test": | |
load_dotenv(".env.test") | |
elif current_environment == "prod": | |
load_dotenv(".env.prod") | |
else: | |
raise ValueError("Invalid environment specified") | |
SECRET = os.getenv("APP_SECRET") | |
class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): | |
reset_password_token_secret = SECRET | |
verification_token_secret = SECRET | |
async def on_after_register(self, user: User, request: Optional[Request] = None): | |
print(f"User {user.id} has registered.") | |
async def on_after_forgot_password( | |
self, user: User, token: str, request: Optional[Request] = None | |
): | |
print(f"User {user.id} has forgot their password. Reset token: {token}") | |
async def on_after_request_verify( | |
self, user: User, token: str, request: Optional[Request] = None | |
): | |
print(f"Verification requested for user {user.id}. Verification token: {token}") | |
async def get_user_manager(user_db: SQLAlchemyUserDatabase = Depends(get_user_db)): | |
yield UserManager(user_db) | |
bearer_transport = BearerTransport(tokenUrl="auth/jwt/login") | |
seconds_in_day = 60 * 60 * 24 | |
seconds_in_month = seconds_in_day * 31 | |
seconds_in_six_months = seconds_in_month * 6 | |
def get_jwt_strategy() -> JWTStrategy: | |
return JWTStrategy(secret=SECRET, lifetime_seconds=seconds_in_six_months) | |
auth_backend = AuthenticationBackend( | |
name="jwt", | |
transport=bearer_transport, | |
get_strategy=get_jwt_strategy, | |
) | |
fastapi_users = FastAPIUsers[User, uuid.UUID](get_user_manager, [auth_backend]) | |
current_active_user = fastapi_users.current_user(active=True) | |