From fe7fb0971dab64b502b70e7bdb33407397d88ebd Mon Sep 17 00:00:00 2001 From: "MH.Dmitrii" Date: Sun, 28 Sep 2025 15:34:42 +0300 Subject: [PATCH] http midleware --- server/backend/endpoints.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/server/backend/endpoints.py b/server/backend/endpoints.py index dd73dc2..bf8a04e 100644 --- a/server/backend/endpoints.py +++ b/server/backend/endpoints.py @@ -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")