add router mail
This commit is contained in:
parent
f32fa3e5b9
commit
dc4043acd9
@ -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
40
app/routers/mail.py
Normal 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"})
|
@ -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()
|
||||
|
||||
|
||||
@ -106,36 +103,3 @@ async def read_users_id(authorize: Annotated[bool, Depends(permissions_checker.P
|
||||
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"})
|
@ -5,3 +5,4 @@ python-jose[cryptography]
|
||||
passlib[bcrypt]
|
||||
python-multipart
|
||||
fastapi-mail
|
||||
redis
|
Loading…
x
Reference in New Issue
Block a user