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