69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
from fastapi import APIRouter,Depends
|
|
from fastapi.responses import JSONResponse
|
|
from fastapi import HTTPException
|
|
from db_setup import get_session
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from pydantic import BaseModel, EmailStr
|
|
from forget_password.views import ForgetPassword
|
|
from forget_password.permissions import ResetCredentials
|
|
from forget_password.serializers import serialize_reset_token
|
|
from users.plugins import create_reset_token
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class ForgetPasswordRequest(BaseModel):
|
|
email: EmailStr
|
|
|
|
|
|
class ForgetPasswordVerify(BaseModel):
|
|
email: EmailStr
|
|
code: str
|
|
|
|
|
|
class ForgetPasswordNew(BaseModel):
|
|
password: str
|
|
|
|
|
|
@router.post("/users/forget-password")
|
|
async def request_reset_code(payload: ForgetPasswordRequest,session: AsyncSession = Depends(get_session)):
|
|
try:
|
|
service=ForgetPassword(session=session)
|
|
data=await service.request_code(payload.email)
|
|
return JSONResponse(content={"data":data,"status_code":200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500,detail=str(e))
|
|
|
|
|
|
@router.post("/users/forget-password/verify-code")
|
|
async def verify_reset_code(payload: ForgetPasswordVerify,session: AsyncSession = Depends(get_session)):
|
|
try:
|
|
service=ForgetPassword(session=session)
|
|
email,code_id=await service.verify_code(payload.email,payload.code)
|
|
tokens=serialize_reset_token(create_reset_token(email,code_id=code_id),email)
|
|
return JSONResponse(content={**tokens,"status_code":200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500,detail=str(e))
|
|
|
|
|
|
@router.post("/users/forget-password/new-password")
|
|
async def set_new_password(
|
|
payload: ForgetPasswordNew,
|
|
credentials: ResetCredentials,
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service=ForgetPassword(session=session)
|
|
data=await service.set_new_password(credentials.credentials,payload.password)
|
|
return JSONResponse(content={"data":data,"status_code":200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500,detail=str(e))
|