add router mail

This commit is contained in:
Valentin CZERYBA 2023-10-15 16:17:37 +02:00
parent f32fa3e5b9
commit dc4043acd9
4 changed files with 47 additions and 41 deletions

View File

@ -1,12 +1,13 @@
from fastapi import FastAPI from fastapi import FastAPI
from .routers import users, token from .routers import users, token, mail
from .dependencies import user_add from .dependencies import user_add
app = FastAPI() app = FastAPI()
app.include_router(users.router) app.include_router(users.router)
app.include_router(token.router) app.include_router(token.router)
app.include_router(mail.router)
@app.on_event("startup") @app.on_event("startup")

40
app/routers/mail.py Normal file
View File

@ -0,0 +1,40 @@
from fastapi import APIRouter, HTTPException, status
from ..dependencies import users_token, database, mail
from ..models import users, email
from fastapi.responses import JSONResponse
from fastapi_mail import MessageSchema, MessageType, FastMail
import random
router = APIRouter()
@router.post("/mail",tags=["mail"])
async def read_users_me(userSingle: users.UserCreate | None = None):
if userSingle is None:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Body request is empty"
)
user_repository = users.UserRepository(database=database.database)
user = user_repository.find_one_by({"username": {'$eq': userSingle.username}})
if user is not None:
raise HTTPException(
status_code=status.HTTP_204_NO_CONTENT,
detail="User is already exist"
)
fm = FastMail(mail.conf)
numberkey = str(random.Random())
key_hashed = users_token.get_password_hash(numberkey)
email_body = {"key":key_hashed, "username":userSingle.username}
email_schema = email.EmailSchema(email=[userSingle.email], body=email_body)
message = MessageSchema(
subject="Fastapi-Mail module",
recipients=email_schema.dict().get("email"),
template_body=email_schema.dict().get("body"),
subtype=MessageType.html,
)
await fm.send_message(message, template_name="mailer.html")
current_user = users.User(username=userSingle.username, password=users_token.get_password_hash(userSingle.password), email=userSingle.email)
user_repository.save(current_user)
return JSONResponse(status_code=200, content={"message": "email has been sent"})

View File

@ -1,11 +1,8 @@
from fastapi import APIRouter, Depends, HTTPException, status from fastapi import APIRouter, Depends, HTTPException, status
from ..dependencies import users_token, permissions_checker, database, mail from ..dependencies import users_token, permissions_checker, database
from ..models import users, email from ..models import users
from typing import Annotated from typing import Annotated
from bson import ObjectId from bson import ObjectId
from fastapi.responses import JSONResponse
from fastapi_mail import MessageSchema, MessageType, FastMail
import random
router = APIRouter() router = APIRouter()
@ -106,36 +103,3 @@ async def read_users_id(authorize: Annotated[bool, Depends(permissions_checker.P
user.email = userSingle.email user.email = userSingle.email
user_repository.save(user) user_repository.save(user)
return user return user
@router.post("/users",tags=["users"])
async def read_users_me(userSingle: users.UserCreate | None = None):
if userSingle is None:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Body request is empty"
)
user_repository = users.UserRepository(database=database.database)
user = user_repository.find_one_by({"username": {'$eq': userSingle.username}})
if user is not None:
raise HTTPException(
status_code=status.HTTP_204_NO_CONTENT,
detail="User is already exist"
)
fm = FastMail(mail.conf)
numberkey = str(random.Random())
key_hashed = users_token.get_password_hash(numberkey)
email_body = {"key":key_hashed, "username":userSingle.username}
email_schema = email.EmailSchema(email=[userSingle.email], body=email_body)
message = MessageSchema(
subject="Fastapi-Mail module",
recipients=email_schema.dict().get("email"),
template_body=email_schema.dict().get("body"),
subtype=MessageType.html,
)
await fm.send_message(message, template_name="mailer.html")
current_user = users.User(username=userSingle.username, password=users_token.get_password_hash(userSingle.password), email=userSingle.email)
user_repository.save(current_user)
return JSONResponse(status_code=200, content={"message": "email has been sent"})

View File

@ -5,3 +5,4 @@ python-jose[cryptography]
passlib[bcrypt] passlib[bcrypt]
python-multipart python-multipart
fastapi-mail fastapi-mail
redis