aboutsummaryrefslogtreecommitdiff
path: root/app/Http/Middleware
diff options
context:
space:
mode:
authorFrankie B <git@diskfloppy.me>2023-07-16 01:49:09 +0100
committerGitHub <noreply@github.com>2023-07-16 01:49:09 +0100
commit8482a98ca6a767062917747a0b016a9ab4d35f01 (patch)
tree0ab0e8d3baf5b421ab909bc731334e2deff82fe0 /app/Http/Middleware
parent1b267f61029e7d4b824979709434ffb437c347b8 (diff)
feat: add guestbook with rate limiting (#6)
* Re-add guestbook w/ rate limiting * Add guestbook to navbar
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);
+ }
+}