add router mail
This commit is contained in:
parent
f32fa3e5b9
commit
dc4043acd9
@ -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
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 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()
|
||||||
|
|
||||||
|
|
||||||
@ -105,37 +102,4 @@ async def read_users_id(authorize: Annotated[bool, Depends(permissions_checker.P
|
|||||||
user.roles = userSingle.roles
|
user.roles = userSingle.roles
|
||||||
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"})
|
|
@ -4,4 +4,5 @@ pydantic-mongo
|
|||||||
python-jose[cryptography]
|
python-jose[cryptography]
|
||||||
passlib[bcrypt]
|
passlib[bcrypt]
|
||||||
python-multipart
|
python-multipart
|
||||||
fastapi-mail
|
fastapi-mail
|
||||||
|
redis
|
Loading…
x
Reference in New Issue
Block a user