From e677261be5d3da008960b961f0da7634faf0d30a Mon Sep 17 00:00:00 2001 From: Valentin CZERYBA Date: Mon, 10 Feb 2025 23:14:00 +0100 Subject: [PATCH] add confirm mail --- app/routers/mail.py | 23 ++++++++++---- app/templates/confirm.html | 58 ++++++++++++++++++++++++++++++++++++ app/templates/mailer.html | 61 +++++++++++++++++++++++++++++++++++--- 3 files changed, 132 insertions(+), 10 deletions(-) create mode 100644 app/templates/confirm.html diff --git a/app/routers/mail.py b/app/routers/mail.py index c3bc2a1..5e2c83c 100644 --- a/app/routers/mail.py +++ b/app/routers/mail.py @@ -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"}) \ No newline at end of file + + # Rendre la page HTML avec Jinja2 et passer la variable username + return templates.TemplateResponse("confirm.html", {"request": request, "username": username}) \ No newline at end of file diff --git a/app/templates/confirm.html b/app/templates/confirm.html new file mode 100644 index 0000000..418568b --- /dev/null +++ b/app/templates/confirm.html @@ -0,0 +1,58 @@ + + + + + Votre compte est activé + + + +
+

Félicitations, {{ username }} ! 🎉

+

Votre compte a été activé avec succès.

+

Vous pouvez maintenant vous connecter et profiter pleinement de nos services.

+ +
+ + diff --git a/app/templates/mailer.html b/app/templates/mailer.html index 011f049..2f6e51c 100644 --- a/app/templates/mailer.html +++ b/app/templates/mailer.html @@ -1,6 +1,59 @@ + -Email -

Voici un lien https://localhost:8080/api/mail?key={{ key }}&username={{ username }} -

- + + + Confirmation de votre compte + + + +
+

Bienvenue, {{ username }} ! 🎉

+

Merci de vous être inscrit sur notre plateforme.

+

Pour finaliser votre inscription, veuillez confirmer votre compte en cliquant sur le bouton ci-dessous :

+ Confirmer mon compte + +
+ -- 2.47.2