Skip to content

Commit 03b9ca9

Browse files
⚡ config: Update rate limits; increase hourly caps
1 parent 1545439 commit 03b9ca9

9 files changed

Lines changed: 16 additions & 16 deletions

File tree

api/v1/alert.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737

3838
@router.get("/alertme/{user_email}", response_model=AlertResponse)
39-
@custom_rate_limiter("50 per day;5 per hour;2 per second")
39+
@custom_rate_limiter("50 per day;25 per hour;2 per second")
4040
async def subscribe_to_alert_me(
4141
user_email: str,
4242
request: Request,
@@ -135,7 +135,7 @@ async def subscribe_to_alert_me(
135135

136136

137137
@router.get("/verifyme/{verification_token}")
138-
@custom_rate_limiter("50 per day;5 per hour;2 per second")
138+
@custom_rate_limiter("50 per day;25 per hour;2 per second")
139139
async def alert_me_verification(verification_token: str, request: Request):
140140
"""Verify alert-me subscription and send initial leaks if any."""
141141
try:
@@ -215,7 +215,7 @@ async def alert_me_verification(verification_token: str, request: Request):
215215

216216

217217
@router.get("/send_verification", response_model=VerificationResponse)
218-
@custom_rate_limiter("50 per day;10 per hour;2 per second")
218+
@custom_rate_limiter("50 per day;25 per hour;2 per second")
219219
async def send_verification(
220220
token: str = "None", email: str = None, request: Request = None
221221
):

api/v1/analytics.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ async def get_news_feed(request: Request) -> PulseNewsResponse:
110110
404: {"model": DomainAlertErrorResponse},
111111
},
112112
)
113-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
113+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
114114
async def domain_alert(
115115
request: Request, user_email: str
116116
) -> Union[DomainAlertResponse, DomainAlertErrorResponse]:
@@ -215,7 +215,7 @@ async def domain_alert(
215215
404: {"content": {"text/html": {}}},
216216
},
217217
)
218-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
218+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
219219
async def domain_verify(request: Request, verification_token: str) -> HTMLResponse:
220220
"""
221221
Verify domain alerts using token and return dashboard access.
@@ -703,7 +703,7 @@ async def send_domain_breaches(
703703
404: {"model": ShieldActivationErrorResponse},
704704
},
705705
)
706-
@custom_rate_limiter("50 per day;10 per hour;2 per second")
706+
@custom_rate_limiter("50 per day;25 per hour;2 per second")
707707
async def activate_shield(
708708
request: Request, email: str
709709
) -> Union[ShieldActivationResponse, ShieldActivationErrorResponse]:
@@ -794,7 +794,7 @@ async def activate_shield(
794794
404: {"content": {"text/html": {}}},
795795
},
796796
)
797-
@custom_rate_limiter("50 per day;10 per hour;2 per second")
797+
@custom_rate_limiter("50 per day;25 per hour;2 per second")
798798
async def verify_shield(request: Request, token_shield: str) -> HTMLResponse:
799799
"""
800800
Verify privacy shield for public searches and return status.

api/v1/api_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class APIKeyResponse(BaseResponse):
2323

2424

2525
@router.get("/create-api-key/{token}", response_model=APIKeyResponse)
26-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
26+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
2727
async def create_api_key(token: str, request: Request):
2828
"""Generates or renews an API key for a user identified by a provided token."""
2929
try:

api/v1/breaches.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444

4545
@router.get("/breaches", response_model=BreachListResponse)
46-
@custom_rate_limiter("2 per second;5 per hour;100 per day")
46+
@custom_rate_limiter("2 per second;50 per hour;100 per day")
4747
async def get_xposed_breaches(
4848
request: Request,
4949
domain: Optional[str] = None,
@@ -482,7 +482,7 @@ async def search_email(
482482

483483

484484
@router.get("/domain-breach-summary", response_model=DomainBreachSummaryResponse)
485-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
485+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
486486
async def get_domain_breach_summary(
487487
request: Request,
488488
d: Optional[str] = Query(None, description="Domain to search for breaches"),

api/v1/domain_breaches.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class DomainBreachesResponse(BaseResponse):
7272
response_model=DomainBreachesResponse,
7373
dependencies=[Depends(csrf_exempt)],
7474
)
75-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
75+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
7676
async def protected(
7777
request: Request,
7878
x_api_key: str = Header(..., description="API key for authentication"),

api/v1/enterprise_validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class EnterpriseValidationResponse(BaseModel):
2020

2121

2222
@router.post("/validate-enterprise-key", response_model=EnterpriseValidationResponse)
23-
@custom_rate_limiter("2 per second;10 per hour;50 per day")
23+
@custom_rate_limiter("2 per second;25 per hour;50 per day")
2424
async def validate_enterprise_key(
2525
request: Request,
2626
x_api_key: str = Header(..., description="Enterprise API key"),

api/v1/monthly_digest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ async def debug_redis_state(
438438

439439
@router.post("/debug/redis-clear")
440440
@custom_rate_limiter(
441-
"2 per minute;10 per hour", message="Redis clear endpoint is rate limited"
441+
"2 per minute;25 per hour", message="Redis clear endpoint is rate limited"
442442
)
443443
async def debug_clear_redis(
444444
request: Request, # pylint: disable=unused-argument

config/limiter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""Centralized rate limiter configuration."""
22

33
# Define specific rate limits for different types of routes
4-
RATE_LIMIT_HELP = "50 per day;10 per hour" # For help/documentation routes
4+
RATE_LIMIT_HELP = "50 per day;25 per hour" # For help/documentation routes
55
RATE_LIMIT_UNBLOCK = "24 per day;2 per hour;2 per second" # For unblock operations
66
RATE_LIMIT_BREACHES = "2 per second;5 per hour;100 per day" # For breach listing
77
RATE_LIMIT_CHECK_EMAIL = "2 per second;5 per hour;100 per day" # For email checks
88
RATE_LIMIT_ANALYTICS = (
99
"5 per minute;100 per hour;500 per day" # For analytics endpoints
1010
)
1111
RATE_LIMIT_DOMAIN = (
12-
"2 per second;10 per hour;50 per day" # For domain-related endpoints
12+
"2 per second;25 per hour;50 per day" # For domain-related endpoints
1313
)

config/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
# Rate Limiting
6060
RATE_LIMIT_DEFAULT = "2 per second;50 per hour;100 per day"
6161
RATE_LIMIT_ANALYTICS = "5 per minute;100 per hour;500 per day"
62-
RATE_LIMIT_DOMAIN = "2 per second;10 per hour;50 per day"
62+
RATE_LIMIT_DOMAIN = "2 per second;25 per hour;50 per day"
6363

6464
# Security
6565
MAX_EMAIL_LENGTH = 254

0 commit comments

Comments
 (0)