users #3

Merged
v4l3n71n merged 17 commits from users into master 2023-10-17 12:05:43 +00:00
4 changed files with 47 additions and 41 deletions
Showing only changes of commit dc4043acd9 - Show all commits

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()
@ -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"})

View File

@ -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