File tree Expand file tree Collapse file tree 5 files changed +172
-2
lines changed Expand file tree Collapse file tree 5 files changed +172
-2
lines changed Original file line number Diff line number Diff line change 2
2
from contextlib import asynccontextmanager
3
3
4
4
from fastapi import FastAPI
5
+ from slowapi import _rate_limit_exceeded_handler
5
6
6
7
from app .routers .router import setup_router as setup_router_v2
7
8
from app .services .database .database import AsyncSessionLocal , init_db
9
+ from app .services .limiter import limiter
8
10
9
11
logger = logging .getLogger (__name__ )
10
12
@@ -27,6 +29,9 @@ async def lifespan(app: FastAPI):
27
29
)
28
30
29
31
32
+ app .state .limiter = limiter
33
+ app .add_exception_handler (429 , _rate_limit_exceeded_handler )
34
+
30
35
app .include_router (setup_router_v2 (), prefix = "/api" )
31
36
32
37
logger .info ("PyNews Server Starter" )
Original file line number Diff line number Diff line change 10
10
from app .services import auth
11
11
from app .services .database .models import Community as DBCommunity
12
12
from app .services .database .orm .community import get_community_by_username
13
+ from app .services .limiter import limiter
13
14
14
15
oauth2_scheme = OAuth2PasswordBearer (tokenUrl = "/authentication/token" )
15
16
@@ -89,6 +90,7 @@ async def create_community(request: Request):
89
90
# Teste
90
91
91
92
@router .post ("/token" , response_model = Token )
93
+ @limiter .limit ("60/minute" )
92
94
async def login_for_access_token (
93
95
request : Request , form_data : OAuth2PasswordRequestForm = Depends ()
94
96
):
@@ -110,7 +112,9 @@ async def login_for_access_token(
110
112
}
111
113
112
114
@router .get ("/me" , response_model = Community )
115
+ @limiter .limit ("60/minute" )
113
116
async def read_community_me (
117
+ request : Request ,
114
118
current_community : Annotated [
115
119
DBCommunity , Depends (get_current_active_community )
116
120
],
Original file line number Diff line number Diff line change
1
+ from slowapi import Limiter
2
+ from slowapi .util import get_remote_address
3
+
4
+ limiter = Limiter (key_func = get_remote_address )
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ pre-commit = "^4.2.0"
20
20
python-multipart = " ^0.0.20"
21
21
pyjwt = " ^2.10.1"
22
22
bcrypt = " ^4.3.0"
23
+ slowapi = " ^0.1.9"
23
24
24
25
[tool .poetry .group .dev .dependencies ]
25
26
pytest = " ^8.3.2"
You can’t perform that action at this time.
0 commit comments