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 .routers import users, token
from .routers import users, token, mail
from .dependencies import user_add
app = FastAPI()
app.include_router(users.router)
app.include_router(token.router)
app.include_router(mail.router)
@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 ..dependencies import users_token, permissions_checker, database, mail
from ..models import users, email
from ..dependencies import users_token, permissions_checker, database
from ..models import users
from typing import Annotated
from bson import ObjectId
from fastapi.responses import JSONResponse
from fastapi_mail import MessageSchema, MessageType, FastMail
import random
router = APIRouter()
@ -105,37 +102,4 @@ async def read_users_id(authorize: Annotated[bool, Depends(permissions_checker.P
user.roles = userSingle.roles
user.email = userSingle.email
user_repository.save(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"})
return user

View File

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