add confirm mail
This commit is contained in:
@@ -1,12 +1,18 @@
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
from fastapi import APIRouter, HTTPException, status, Request
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from ..dependencies import users_token, database, mail
|
||||
from ..models import users, email
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi.responses import JSONResponse, HTMLResponse
|
||||
from fastapi_mail import MessageSchema, MessageType, FastMail
|
||||
import random
|
||||
import random, os
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# Assurer que le chemin vers "templates" est correct
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
templates = Jinja2Templates(directory=os.path.join(BASE_DIR, "templates"))
|
||||
|
||||
|
||||
@router.post("/mail",tags=["mail"])
|
||||
async def create_user(userSingle: users.UserCreate | None = None):
|
||||
if userSingle is None:
|
||||
@@ -41,21 +47,26 @@ async def create_user(userSingle: users.UserCreate | None = None):
|
||||
database.connect_redis.set(userSingle.username, key_hashed)
|
||||
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": "email has been sent"})
|
||||
|
||||
@router.get("/mail",tags=["mail"])
|
||||
async def confirm_user(key: str | None = None, username: str | None = None):
|
||||
@router.get("/mail", tags=["mail"])
|
||||
async def confirm_user(request: Request, key: str | None = None, username: str | None = None):
|
||||
if key is None or username is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Parameter key or/and username is empty"
|
||||
)
|
||||
|
||||
user_repository = users.UserRepository(database=database.database)
|
||||
user = user_repository.find_one_by({"username": {'$eq': username}})
|
||||
key_hashed = database.connect_redis.get(username)
|
||||
|
||||
if key_hashed != key:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Key is invalid"
|
||||
)
|
||||
|
||||
user.status = 1
|
||||
user_repository.save(user)
|
||||
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": "user account confirmed"})
|
||||
|
||||
# Rendre la page HTML avec Jinja2 et passer la variable username
|
||||
return templates.TemplateResponse("confirm.html", {"request": request, "username": username})
|
Reference in New Issue
Block a user