Download Backend/app/api/v1/endpoints/auth.py from aki-008/prepAI: direct link, hf CLI and curl.
- Browser
- Download file 2.58 kB
-
https://huggingface.co/spaces/aki-008/prepAI/resolve/main/Backend/app/api/v1/endpoints/auth.py
- Command line
-
hf download hf://spaces/aki-008/prepAI/Backend/app/api/v1/endpoints/auth.py
-
curl -L -o auth.py https://huggingface.co/spaces/aki-008/prepAI/resolve/main/Backend/app/api/v1/endpoints/auth.py
2.58 kB
| from fastapi import APIRouter, HTTPException, Depends, status | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from sqlalchemy import select | |
| from datetime import timedelta | |
| from app.schema import UserCreate, LoginRequest | |
| from app.schema.models import LoginResponse | |
| from app.models import User | |
| from app.core import verify_password, get_password_hash, create_access_token | |
| from app.api.deps import get_db | |
| from app.config import settings | |
| router = APIRouter() | |
| async def register(user: UserCreate, db: AsyncSession = Depends(get_db)): | |
| try: | |
| result = await db.execute(select(User).filter(User.email == user.email)) | |
| existing_user = result.scalar_one_or_none() | |
| if existing_user: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail='Username already registered' | |
| ) | |
| new_user = User( | |
| username=user.username, | |
| email=user.email, | |
| hashed_password=get_password_hash(user.password) | |
| ) | |
| db.add(new_user) | |
| await db.commit() | |
| return {"message": "User registered sucessfully", "username": user.username} | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail=f'registered failed: {str(e)}' | |
| ) | |
| async def login(request: LoginRequest, db: AsyncSession = Depends(get_db)): | |
| try: | |
| result = await db.execute(select(User).filter(User.email == request.email)) | |
| user = result.scalar_one_or_none() | |
| if not user or not verify_password(request.password, user.hashed_password): | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Incorrect email or password", | |
| headers={"WWW-Authenticate": "Bearer"}, | |
| ) | |
| access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) | |
| access_token = create_access_token( | |
| data={"sub": user.username}, | |
| expires_deltas=access_token_expires | |
| ) | |
| return LoginResponse( | |
| access_token=access_token, | |
| token_type="bearer", | |
| username=user.username | |
| ) | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail=f"Login failed: {str(e)}" | |
| ) |