feat: add guestbook with rate limiting (#6)

* Re-add guestbook w/ rate limiting
* Add guestbook to navbar
This commit is contained in:
Frankie B 2023-07-16 01:49:09 +01:00 committed by GitHub
commit 94133ec0f7
12 changed files with 329 additions and 91 deletions

View file

@ -0,0 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Error 429: Overclocking Detected!</title>
<link rel="stylesheet" href="{{ URL::asset ('css/minimal.css') }}"/>
</head>
<body>
<h1>Error 429: Overclocking Detected!</h1>
<hr/>
<p>Whoa there! Your submissions are going at warp speed.</p>
<p>Remember you can only submit an entry <u>once every hour</u>!</p>
<br/>
Click <a href="/guestbook">here</a> to go back to the guestbook.
</body>
</html>

View file

@ -6,6 +6,7 @@
<a href="/projects/">projects</a> |
<a href="/calculators/">calculators</a> |
<a href="/computers/">computers</a> |
<a href="/bookmarks/">bookmarks</a>
<a href="/bookmarks/">bookmarks</a> |
<a href="/guestbook/">guestbook</a>
</div>
</nav>

View file

@ -0,0 +1,53 @@
@extends('layouts.default')
@section('title', 'guestbook')
@section('content')
<br/>
<form method="POST" action="/guestbook">
@csrf
<x-honeypot />
<table class="gb_entryform">
<tr>
<td>
<label for="name">Name:</label>
</td>
<td>
<input name="name" type="text" id="name" placeholder="John Doe">
</td>
<td>
<span class="text-danger">{{ $errors->first('name') }}</span>
</td>
</tr>
<tr>
<td>
<label for="message">Message:</label>
</td>
<td>
<textarea name="message" id="message" rows="3"></textarea>
</td>
<td>
<span class="text-danger">{{ $errors->first('message') }}</span>
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit">Submit</button>
</td>
</tr>
</table>
</form>
<p>You can submit an entry <u>once every hour</u>.</p>
<p>Your IP address <u>will</u> be logged but <u>will not</u> be publically displayed.</p>
<hr/>
@php
$entries = DB::select('SELECT name, timestamp, message FROM guestbook_entries ORDER BY id DESC');
@endphp
<h1>Entries <small>({{ count($entries) }} total)</small></h1>
@foreach ($entries as $entry)
<table class="gb_entry"><tr><td>
Name:&nbsp;{{ $entry->name }}<br/>
Date:&nbsp;{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}<br/><br/>
{{ htmlspecialchars($entry->message) }}
</td></tr></table>
@endforeach
@stop