Skip to content

Commit 816d1fb

Browse files
committed
Rate limit bases and handle report multiple report
1 parent 10360b4 commit 816d1fb

File tree

8 files changed

+963
-209
lines changed

8 files changed

+963
-209
lines changed

config/rate_limiting.php

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
<?php
2+
3+
/**
4+
* Rate limiting configuration
5+
*
6+
* This file contains the default rate limiting settings for Cypht.
7+
* Administrators can modify these settings to customize rate limiting behavior.
8+
*/
9+
10+
return [
11+
/*
12+
|--------------------------------------------------------------------------
13+
| Enable Rate Limiting
14+
|--------------------------------------------------------------------------
15+
|
16+
| Set to true to enable rate limiting for API endpoints.
17+
| Default: true
18+
|
19+
*/
20+
'enabled' => env('RATE_LIMITING_ENABLED', true),
21+
22+
/*
23+
|--------------------------------------------------------------------------
24+
| Default Rate Limits
25+
|--------------------------------------------------------------------------
26+
|
27+
| Default rate limiting configuration for all endpoints.
28+
|
29+
*/
30+
'defaults' => [
31+
'window_size' => env('RATE_LIMIT_WINDOW_SIZE', 3600), // 1 hour in seconds
32+
'max_requests' => env('RATE_LIMIT_MAX_REQUESTS', 100), // 100 requests per hour
33+
'burst_limit' => env('RATE_LIMIT_BURST_LIMIT', 10), // 10 requests per burst window
34+
'burst_window' => env('RATE_LIMIT_BURST_WINDOW', 60), // 1 minute burst window
35+
'penalty_duration' => env('RATE_LIMIT_PENALTY_DURATION', 3600), // 1 hour penalty
36+
],
37+
38+
/*
39+
|--------------------------------------------------------------------------
40+
| Endpoint-Specific Rate Limits
41+
|--------------------------------------------------------------------------
42+
|
43+
| Configure rate limits for specific endpoints.
44+
| These settings override the default limits.
45+
|
46+
*/
47+
'endpoints' => [
48+
'ajax_imap_report_spam' => [
49+
'window_size' => env('SPAM_REPORT_WINDOW_SIZE', 3600), // 1 hour
50+
'max_requests' => env('SPAM_REPORT_MAX_REQUESTS', 50), // 50 spam reports per hour
51+
'burst_limit' => env('SPAM_REPORT_BURST_LIMIT', 5), // 5 reports per minute
52+
'burst_window' => env('SPAM_REPORT_BURST_WINDOW', 60), // 1 minute
53+
'penalty_duration' => env('SPAM_REPORT_PENALTY_DURATION', 7200), // 2 hour penalty
54+
],
55+
56+
'ajax_imap_message_action' => [
57+
'window_size' => env('MESSAGE_ACTION_WINDOW_SIZE', 3600),
58+
'max_requests' => env('MESSAGE_ACTION_MAX_REQUESTS', 200),
59+
'burst_limit' => env('MESSAGE_ACTION_BURST_LIMIT', 20),
60+
'burst_window' => env('MESSAGE_ACTION_BURST_WINDOW', 60),
61+
],
62+
63+
'ajax_imap_search' => [
64+
'window_size' => env('SEARCH_WINDOW_SIZE', 3600),
65+
'max_requests' => env('SEARCH_MAX_REQUESTS', 300),
66+
'burst_limit' => env('SEARCH_BURST_LIMIT', 30),
67+
'burst_window' => env('SEARCH_BURST_WINDOW', 60),
68+
],
69+
70+
'ajax_imap_message_list' => [
71+
'window_size' => env('MESSAGE_LIST_WINDOW_SIZE', 3600),
72+
'max_requests' => env('MESSAGE_LIST_MAX_REQUESTS', 500),
73+
'burst_limit' => env('MESSAGE_LIST_BURST_LIMIT', 50),
74+
'burst_window' => env('MESSAGE_LIST_BURST_WINDOW', 60),
75+
],
76+
77+
'ajax_imap_folder_display' => [
78+
'window_size' => env('FOLDER_DISPLAY_WINDOW_SIZE', 3600),
79+
'max_requests' => env('FOLDER_DISPLAY_MAX_REQUESTS', 200),
80+
'burst_limit' => env('FOLDER_DISPLAY_BURST_LIMIT', 20),
81+
'burst_window' => env('FOLDER_DISPLAY_BURST_WINDOW', 60),
82+
],
83+
],
84+
85+
/*
86+
|--------------------------------------------------------------------------
87+
| Rate Limiting Storage
88+
|--------------------------------------------------------------------------
89+
|
90+
| Configure the storage backend for rate limiting data.
91+
| Options: 'cache', 'redis', 'memcached'
92+
|
93+
*/
94+
'storage' => env('RATE_LIMITING_STORAGE', 'cache'),
95+
96+
/*
97+
|--------------------------------------------------------------------------
98+
| Rate Limiting Headers
99+
|--------------------------------------------------------------------------
100+
|
101+
| Enable/disable rate limiting headers in responses.
102+
| Headers include: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
103+
|
104+
*/
105+
'headers' => env('RATE_LIMITING_HEADERS', true),
106+
107+
/*
108+
|--------------------------------------------------------------------------
109+
| Exempt IP Addresses
110+
|--------------------------------------------------------------------------
111+
|
112+
| IP addresses that are exempt from rate limiting.
113+
| Useful for monitoring, admin access, or trusted services.
114+
|
115+
*/
116+
'exempt_ips' => [
117+
// Add exempt IP addresses here
118+
// '127.0.0.1',
119+
// '::1',
120+
],
121+
122+
/*
123+
|--------------------------------------------------------------------------
124+
| Exempt User Agents
125+
|--------------------------------------------------------------------------
126+
|
127+
| User agents that are exempt from rate limiting.
128+
| Useful for monitoring tools or trusted applications.
129+
|
130+
*/
131+
'exempt_user_agents' => [
132+
// Add exempt user agents here
133+
// 'MonitoringBot/1.0',
134+
// 'HealthCheck/1.0',
135+
],
136+
137+
/*
138+
|--------------------------------------------------------------------------
139+
| Logging
140+
|--------------------------------------------------------------------------
141+
|
142+
| Enable logging of rate limit violations.
143+
|
144+
*/
145+
'logging' => [
146+
'enabled' => env('RATE_LIMITING_LOGGING', true),
147+
'level' => env('RATE_LIMITING_LOG_LEVEL', 'warning'), // debug, info, warning, error
148+
],
149+
];

0 commit comments

Comments
 (0)