aboutsummaryrefslogtreecommitdiff
path: root/app/Http/Middleware
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Middleware')
-rw-r--r--app/Http/Middleware/RateLimiter.php32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/Http/Middleware/RateLimiter.php b/app/Http/Middleware/RateLimiter.php
new file mode 100644
index 0000000..c81da43
--- /dev/null
+++ b/app/Http/Middleware/RateLimiter.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Cache;
+use Symfony\Component\HttpFoundation\Response;
+
+class RateLimiter
+{
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+ */
+ public function handle(Request $request, Closure $next): Response
+ {
+ $ipAddress = $request->ip();
+ $cacheKey = 'rate_limit_' . $ipAddress;
+
+ if (Cache::has($cacheKey)) {
+ // If the cache key exists, the IP has submitted an entry within the last hour
+ return response()->view('errors.ratelimit-guestbook', [], 429);
+ }
+
+ // Add the IP address to the cache and set the expiration time to one hour
+ Cache::put($cacheKey, true, 60);
+
+ return $next($request);
+ }
+}