Skip to content

Commit 19637ef

Browse files
authored
Merge pull request #47 from PythonFloripa/feature/#34
Feature/#34
2 parents 2ca1c36 + 42852dd commit 19637ef

File tree

5 files changed

+172
-2
lines changed

5 files changed

+172
-2
lines changed

app/main.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
from contextlib import asynccontextmanager
33

44
from fastapi import FastAPI
5+
from slowapi import _rate_limit_exceeded_handler
56

67
from app.routers.router import setup_router as setup_router_v2
78
from app.services.database.database import AsyncSessionLocal, init_db
9+
from app.services.limiter import limiter
810

911
logger = logging.getLogger(__name__)
1012

@@ -27,6 +29,9 @@ async def lifespan(app: FastAPI):
2729
)
2830

2931

32+
app.state.limiter = limiter
33+
app.add_exception_handler(429, _rate_limit_exceeded_handler)
34+
3035
app.include_router(setup_router_v2(), prefix="/api")
3136

3237
logger.info("PyNews Server Starter")

app/routers/authentication.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from app.services import auth
1111
from app.services.database.models import Community as DBCommunity
1212
from app.services.database.orm.community import get_community_by_username
13+
from app.services.limiter import limiter
1314

1415
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/authentication/token")
1516

@@ -89,6 +90,7 @@ async def create_community(request: Request):
8990
# Teste
9091

9192
@router.post("/token", response_model=Token)
93+
@limiter.limit("60/minute")
9294
async def login_for_access_token(
9395
request: Request, form_data: OAuth2PasswordRequestForm = Depends()
9496
):
@@ -110,7 +112,9 @@ async def login_for_access_token(
110112
}
111113

112114
@router.get("/me", response_model=Community)
115+
@limiter.limit("60/minute")
113116
async def read_community_me(
117+
request: Request,
114118
current_community: Annotated[
115119
DBCommunity, Depends(get_current_active_community)
116120
],

app/services/limiter.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from slowapi import Limiter
2+
from slowapi.util import get_remote_address
3+
4+
limiter = Limiter(key_func=get_remote_address)

poetry.lock

Lines changed: 158 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pre-commit = "^4.2.0"
2020
python-multipart = "^0.0.20"
2121
pyjwt = "^2.10.1"
2222
bcrypt = "^4.3.0"
23+
slowapi = "^0.1.9"
2324

2425
[tool.poetry.group.dev.dependencies]
2526
pytest = "^8.3.2"

0 commit comments

Comments
 (0)