Spaces:
Sleeping
Sleeping
| import uuid | |
| from src.auth.utils import ( | |
| # send_otp_email, | |
| verify_password, | |
| create_refresh_token, | |
| verify_verification_token, | |
| create_access_token, | |
| hash_password, | |
| create_verification_token, | |
| ) | |
| from src.core.models import Users | |
| from sqlmodel import Session, select | |
| from fastapi import HTTPException | |
| from sqlmodel.ext.asyncio.session import AsyncSession | |
| async def create_user(session: AsyncSession, name: str, email: str, password: str): | |
| """Create user without sending email""" | |
| if not email.lower().endswith("@yuvabe.com"): | |
| raise HTTPException(status_code=400, detail="Enter you're Yuvabe email ID") | |
| user = await session.exec(select(Users).where(Users.email_id == email)) | |
| existing_user = user.first() | |
| if existing_user: | |
| raise ValueError("User already exists") | |
| new_user = Users( | |
| user_name=name, | |
| email_id=email, | |
| password=hash_password(password), | |
| is_verified=True, | |
| ) | |
| session.add(new_user) | |
| await session.commit() | |
| await session.refresh(new_user) | |
| access_token = create_access_token( | |
| data={ | |
| "sub": str(new_user.id), | |
| "name": new_user.user_name, | |
| "email": new_user.email_id, | |
| } | |
| ) | |
| refresh_token = create_refresh_token( | |
| data={ | |
| "sub": str(new_user.id), | |
| "name": new_user.user_name, | |
| "email": new_user.email_id, | |
| } | |
| ) | |
| return { | |
| "message": "User created successfully", | |
| "user_id": str(new_user.id), | |
| "access_token": access_token, | |
| "refresh_token": refresh_token, | |
| } | |
| # async def send_verification_link(session: Session, email: str): | |
| # """Send verification email for an existing user.""" | |
| # result = await session.exec(select(Users).where(Users.email_id == email)) | |
| # user = result.first() | |
| # if not user: | |
| # raise HTTPException(status_code=404, detail="User not found") | |
| # if user.is_verified: | |
| # raise HTTPException(status_code=400, detail="User is already verified") | |
| # # Create a token using existing user ID (opaque token) | |
| # token = create_verification_token(str(user.id)) | |
| # try: | |
| # send_verification_email(email, token) | |
| # except Exception as e: | |
| # raise HTTPException( | |
| # status_code=500, detail=f"Failed to send verification email: {str(e)}" | |
| # ) | |
| # return { | |
| # "message": "Verification link sent successfully", | |
| # "user_id": str(user.id), | |
| # "email": user.email_id, | |
| # } | |
| async def verify_email(session: Session, token: str): | |
| try: | |
| user_id = await verify_verification_token(token) | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| user = await session.get(Users, uuid.UUID(user_id)) | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found") | |
| if not user.is_verified: | |
| user.is_verified = True | |
| await session.commit() | |
| access_token = create_access_token( | |
| data={"sub": str(user.id), "name": user.user_name, "email": user.email_id} | |
| ) | |
| refresh_token = create_refresh_token( | |
| data={"sub": str(user.id), "name": user.user_name, "email": user.email_id} | |
| ) | |
| return { | |
| "message": "Email verified successfully!", | |
| "access_token": access_token, | |
| "refresh_token": refresh_token, | |
| "token_type": "bearer", | |
| } | |
| async def login_user(session: Session, email: str, password: str): | |
| if not email.lower().endswith("@yuvabe.com"): | |
| raise HTTPException(status_code=400, detail="Enter you're Yuvabe email ID") | |
| users = await session.exec(select(Users).where(Users.email_id == email)) | |
| user = users.first() | |
| if not user: | |
| raise HTTPException(status_code=400, detail="Invalid email or password") | |
| if not verify_password(password, user.password): | |
| raise HTTPException(status_code=400, detail="Invalid email or password") | |
| if not user.is_verified: | |
| raise HTTPException(status_code=400, detail="Verify email to login") | |
| access_token = create_access_token( | |
| data={"sub": str(user.id), "name": user.user_name, "email": user.email_id} | |
| ) | |
| refresh_token = create_refresh_token( | |
| data={"sub": str(user.id), "name": user.user_name, "email": user.email_id} | |
| ) | |
| return { | |
| "access_token": access_token, | |
| "refresh_token": refresh_token, | |
| "token_type": "bearer", | |
| "user": { | |
| "id": str(user.id), | |
| "name": user.user_name, | |
| "email": user.email_id, | |
| "is_verified": user.is_verified, | |
| }, | |
| } | |