http midleware

This commit is contained in:
2025-09-28 15:34:42 +03:00
parent c4fc002124
commit fe7fb0971d

View File

@@ -1,11 +1,14 @@
from fastapi import FastAPI, HTTPException, status, Depends
from fastapi import FastAPI, HTTPException, status, Depends, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from fastapi.security import OAuth2PasswordRequestForm
from . import pydentic, JWT, password
from datetime import datetime, timedelta
from pydantic import EmailStr
from . import pydentic, JWT, password
from server.database import db
from datetime import datetime, timedelta
import asyncio
api = FastAPI()
@@ -25,18 +28,27 @@ api.add_middleware(
allow_headers=headers,
)
@api.middleware("http") #Логирование заходов перед всеми endpoints
async def log_requests(request: Request, call_next):
ip = request.client.host
ua = request.headers.get("user-agent")
method = request.method
url = str(request.url)
print(f"[{method}] {url} from {ip} ({ua})")
response = await call_next(request)
return response
@api.get("/protected")
async def protected(current_user: str = Depends(JWT.current_user)):
return {"msg": f"Hello, {current_user}"}
@api.get("/", response_model=pydentic.CreateUser)
@api.get("/", response_model=list[pydentic.UsersInfo]) #список!
async def get_all_rows(current_user: str = Depends(JWT.current_user)):
for row in await db.get_all_rows():
if row:
return row
else:
raise HTTPException(status_code=404, detail="The user isn't found")
@api.get("/get_user_by_email/{email}", response_model=pydentic.CreateUser)
users = await db.get_all_rows()
if not users:
raise HTTPException(status_code=404, detail="No users found")
return users
@api.get("/get_user_by_email/{email}", response_model=pydentic.UsersInfo)
async def get_user_by_email(email:str, current_user: str = Depends(JWT.current_user)):
user = await db.get_user_by_email(email)
if user:
@@ -84,7 +96,6 @@ async def login_user(form_data: OAuth2PasswordRequestForm = Depends()):
user = await db.login_user(creds)
if not user:
raise HTTPException(status_code=401, detail="The user isn't found")
access_token = await JWT.AccessToken.create(
{"sub": user.email},
timedelta(minutes=JWT.ACCESS_TOKEN_EXPIRE_MINUTES)
@@ -92,6 +103,7 @@ async def login_user(form_data: OAuth2PasswordRequestForm = Depends()):
return {"access_token": access_token, "token_type": "bearer"}
@api.post("/reset", response_model=pydentic.UsersInfo)
async def reset_user(row:pydentic.UserReset):
user = await db.get_user_by_email(row.email)
if not user:
raise HTTPException(status_code=401, detail="The user isn't found")