Add table-based legacy design

This commit is contained in:
Roscoe 2025-08-10 02:54:16 +01:00
commit 57bb0e03a3
Signed by: RoscoeDaWah
SSH key fingerprint: SHA256:Hqn452XQ1ETzUt/FthJu6+OFkS4NBxCv5VQSEvuk7CE
35 changed files with 886 additions and 526 deletions

View file

@ -0,0 +1,15 @@
<?php
if (!function_exists('isLegacy')) {
/**
* Checks if the current hostname should return the legacy site
* @return bool
*/
function isLegacy(): bool {
return (
request()->getHost() === "legacy.wah.moe" || // Accessed via legacy.wah.moe domain
str_starts_with(request()->getHost(), "192.168") || // Accessed via local IP address
!request()->hasHeader("Host") // Browser does not send Host header (e.g. NCSA MOSAIC)
);
}
}

View file

@ -8,7 +8,11 @@
class RoscoLekoController extends Controller { class RoscoLekoController extends Controller {
public function getImages(): array { public function getImages(): array {
$images = []; $images = [];
foreach (File::glob(public_path('images/pandamonium').'/*') as $path) { $path = 'images/pandamonium';
if (isLegacy()) {
$path = 'images/pandamonium-legacy';
}
foreach (File::glob(public_path($path).'/*') as $path) {
$image_data = []; $image_data = [];
try { try {
$exif = exif_read_data($path); $exif = exif_read_data($path);

View file

@ -24,7 +24,7 @@ public static function insertGuestbookEntry(Request $request) {
$newEntry->message = $request->get('message'); $newEntry->message = $request->get('message');
$newEntry->ip = $request->ip(); $newEntry->ip = $request->ip();
$newEntry->agent = $request->userAgent(); $newEntry->agent = $request->userAgent();
$newEntry->admin = auth()->check(); $newEntry->legacy_flagged = isLegacy();
$newEntry->save(); $newEntry->save();
} }

View file

@ -8,11 +8,18 @@
class LastFMCurrent extends Component { class LastFMCurrent extends Component {
public $track; public $track;
public $artUrl;
/** /**
* Create a new component instance. * Create a new component instance.
*/ */
public function __construct($track) { public function __construct($track) {
$this->track = $track; $this->track = $track;
if (isLegacy()) {
$path = parse_url($track["image"], PHP_URL_PATH);
$this->artUrl = "//".request()->getHttpHost()."/proxy/lastfm/".basename($path);
} else {
$this->artUrl = $track["image"];
}
} }
/** /**

View file

@ -17,9 +17,15 @@ public function __construct() {}
* Get the view / contents that represent the component. * Get the view / contents that represent the component.
*/ */
public function render(): View|Closure|string { public function render(): View|Closure|string {
return view('components.layout', [ if (isLegacy()) {
'isChristmas' => $this->isItChristmas() return view('components.layout-legacy', [
]); 'isChristmas' => $this->isItChristmas()
]);
} else {
return view('components.layout', [
'isChristmas' => $this->isItChristmas()
]);
}
} }
public function isItChristmas() : bool { public function isItChristmas() : bool {

View file

@ -17,6 +17,17 @@ public function __construct() {}
public function getWah(): string { public function getWah(): string {
if (isLegacy()) {
try {
$response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
$data = $response->json();
if ($data == null) return "";
$path = parse_url("https://api.tinyfox.dev" . $data["loc"], PHP_URL_PATH);
return "//".request()->getHttpHost()."/proxy/wah/".basename($path);
} catch (Exception $ex) {
return "";
}
}
try { try {
$response = Http::get('https://api.tinyfox.dev/img.json?animal=wah'); $response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
$data = $response->json(); $data = $response->json();
@ -26,7 +37,6 @@ public function getWah(): string {
} catch (Exception $ex) { } catch (Exception $ex) {
return ""; return "";
} }
} }
/** /**

View file

@ -6,6 +6,8 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.1", "php": "^8.1",
"ext-exif": "*",
"browner12/helpers": "^3.7",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"intervention/image": "^3.9", "intervention/image": "^3.9",
"laravel/framework": "^10.10", "laravel/framework": "^10.10",
@ -13,8 +15,7 @@
"scrivo/highlight.php": "v9.18.1.10", "scrivo/highlight.php": "v9.18.1.10",
"spatie/laravel-honeypot": "^4.3", "spatie/laravel-honeypot": "^4.3",
"spatie/laravel-html": "^3.4", "spatie/laravel-html": "^3.4",
"ua-parser/uap-php": "^3.9.14", "ua-parser/uap-php": "^3.9.14"
"ext-exif": "*"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",

1100
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
return [ return [
'name' => env('APP_NAME', 'wah.moe'), 'name' => env('APP_NAME', 'wah.moe'),
'version' => '2025.06.12', 'version' => '2025.08.10-dev',
'env' => env('APP_ENV', 'production'), 'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false), 'debug' => (bool) env('APP_DEBUG', false),
'url' => env('APP_URL', 'http://localhost'), 'url' => env('APP_URL', 'http://localhost'),
@ -25,6 +25,7 @@
App\Providers\AuthServiceProvider::class, App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class, App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class, App\Providers\RouteServiceProvider::class,
browner12\helpers\HelperServiceProvider::class
])->toArray(), ])->toArray(),
'aliases' => Facade::defaultAliases()->merge([ 'aliases' => Facade::defaultAliases()->merge([
])->toArray(), ])->toArray(),

View file

@ -99,7 +99,7 @@ body {
color: var(--foreground); color: var(--foreground);
min-height: 100%; min-height: 100%;
background-color: hsla(0, 0%, 0%, 0); background-color: hsla(0, 0%, 0%, 0);
padding: 10px; padding: 5px;
font-family: "PT Serif"; font-family: "PT Serif";
} }
@ -170,7 +170,7 @@ div.page-container > div:last-child {
header { header {
display: grid; display: grid;
grid-template-columns: 66px 1fr; grid-template-columns: 80px 1fr;
grid-template-rows: 1fr; grid-template-rows: 1fr;
grid-column-gap: 15px; grid-column-gap: 15px;
grid-row-gap: 0; grid-row-gap: 0;
@ -178,8 +178,6 @@ header {
} }
header img { header img {
filter: drop-shadow(2px 2px hsl(0, 0%, 66%));
margin-right: 10px;
image-rendering: pixelated; image-rendering: pixelated;
} }

BIN
public/images/logo-v2.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
public/images/roscoe_tile.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
public/images/separator.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

View file

@ -16,7 +16,7 @@
<hr> <hr>
<ul> <ul>
@foreach($sites as $site) @foreach($sites as $site)
<li><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</li> <li><a href="{{ $site->url }}"><font color="#000000">{{ $site->name }}</font></a> - {{ $site->description }}</li>
@endforeach @endforeach
</ul> </ul>
</div> </div>

View file

@ -1,10 +1,23 @@
@if (isLegacy())
<table border="0" cellpadding="0" cellspacing="0"><tr>
<td><img src="{{ $artUrl }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}"></td>
<td width="10px">&nbsp;</td>
<td>
<h2>{{ $track["header"] }}:</h2>
<a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
by {{ $track["artist"] }}<br>
</td>
</tr></table>
<br>
@else
<div class="current-track"> <div class="current-track">
<div> <div>
<img src="{{ $track["image"] }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}"> <img src="{{ $artUrl }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}">
</div> </div>
<div> <div>
<h2>{{ $track["header"] }}:</h2> <h2>{{ $track["header"] }}:</h2>
<a href="{{ $track["url"] }}">{{ $track["title"] }}</a><br> <a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
by {{ $track["artist"] }}<br> by {{ $track["artist"] }}<br>
</div> </div>
</div> </div>
@endif

View file

@ -1,7 +1,12 @@
@if (isLegacy())
<table border="1" cellspacing="0" cellpadding="5">
<font size="+2"><b>Top 10 Tracks (Last 30 days):</b></font>
@else
<table class="music-top10"> <table class="music-top10">
<caption> <caption>
<h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2> <h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2>
</caption> </caption>
@endif
<tr> <tr>
<th><b>#</b></th> <th><b>#</b></th>
<th><b>Track</b></th> <th><b>Track</b></th>

View file

@ -1,6 +1,6 @@
<tr> <tr>
<td>{{ $count }}</td> <td>{{ $count }}</td>
<td><a href="{{ $track["url"] }}">{{ $track["title"] }}</a></td> <td><a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a></td>
<td>{{ $track["artist"] }}</td> <td>{{ $track["artist"] }}</td>
<td>{{ $track["plays"] }}</td> <td>{{ $track["plays"] }}</td>
</tr> </tr>

View file

@ -0,0 +1,102 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--suppress ALL -->
<html>
<head>
<meta charset="utf-8">
<title>wah! (dot moe) - {{ $title }}</title>
</head>
<body background="/images/roscoe_tile.jpg" bgcolor="#6595fb" text="#000000" link="#FFFFFF" alink="#999999" vlink="#FFFFFF">
<table bgcolor="#6595fb" width="850px" cellpadding="0" cellspacing="0" border="0">
<!-- HEADER -->
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" class="nopad">
<tr>
<td width="90px">
<img src="/images/logo-v2.gif">
</td>
<td valign="middle"><font color="#FFFFFF" face="sans-serif">
<font size="+10"><b><i>wah! (dot moe)</i></b></font><br>
<i>"i mean it looks alright, but then you realise its all tables" ~ alice</i>
</font></td>
</tr>
</table>
</td>
</tr>
<!-- HEADER END -->
<!-- TOP NAV -->
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#3366FF">&nbsp;</td>
<td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
<x-navigation></x-navigation>
</font></td>
<td width="5px" bgcolor="#3366FF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<!-- TOP NAV END -->
<!-- CONTENT -->
<tr><td height="5px" bgcolor="#FFFFFF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#FFFFFF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#FFFFFF">&nbsp;</td>
<td bgcolor="#ffffff" width="100%"><font face="sans-serif">
{{ $slot }}
</font></td>
<td width="5px" bgcolor="#FFFFFF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#FFFFFF"><font size="-2">&nbsp;</font></td></tr>
<!-- CONTENT END -->
<!-- BOTTOM NAV -->
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#3366FF">&nbsp;</td>
<td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
<x-navigation></x-navigation>
</font></td>
<td width="5px" bgcolor="#3366FF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<!-- BOTTOM NAV END -->
<!-- FOOTER -->
<tr><td height="5px"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px">&nbsp;</td>
<td width="100%"><font face="sans-serif" color="#FFFFFF">
&copy; RoscoeDaWah 2021-2025
</font></td>
<td width="5px">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px"><font size="-2">&nbsp;</font></td></tr>
<!-- FOOTER END -->
</table>
</body>
</html>

View file

@ -27,7 +27,7 @@
<div id="header"> <div id="header">
<header> <header>
<div> <div>
<img src="{{ asset('/images/logo.png') }}" width="65" alt="A pixel art depiction of a paw, in three alternating shades of orange."> <img src="{{ asset('/images/wah-paw-v2.gif') }}" width="84" alt="A pixel art depiction of a paw, in three alternating shades of orange.">
</div> </div>
<div> <div>
<h1>wah!</h1> <h1>wah!</h1>
@ -41,6 +41,7 @@
<div id="content"> <div id="content">
<main> <main>
{{ $slot }} {{ $slot }}
<div class="clear"></div>
</main> </main>
</div> </div>
<div> <div>

View file

@ -1,9 +1,12 @@
<nav> <nav>
<strong>Pages:</strong> <strong>Pages:</strong>
<a href="/">home</a> | <a href="/">home</a> |
@if(!isLegacy())
<a href="//wiki.wah.moe">wah-ki</a> | <a href="//wiki.wah.moe">wah-ki</a> |
@endif
<a href="//git.wah.moe">git</a> | <a href="//git.wah.moe">git</a> |
<a href="/pub">files</a> | <a href="/pub">files</a> |
<a href="gopher://wah.moe">gopher</a> |
<a href="/bookmarks">bookmarks</a> | <a href="/bookmarks">bookmarks</a> |
<a href="/guestbook">guestbook</a> | <a href="/guestbook">guestbook</a> |
<a href="/music">music</a> | <a href="/music">music</a> |

View file

@ -1,3 +1,4 @@
@if(!isLegacy())
<div class="wah"> <div class="wah">
<h3>Random Wah!</h3> <h3>Random Wah!</h3>
@if ($wah !== "") @if ($wah !== "")
@ -8,3 +9,4 @@
<p>Unable to retrieve image</p> <p>Unable to retrieve image</p>
@endif @endif
</div> </div>
@endif

View file

@ -5,7 +5,7 @@
<td> <td>
<form method="POST" action="/guestbook"> <form method="POST" action="/guestbook">
@csrf @csrf
<x-honeypot/> @if(!isLegacy())<x-honeypot/>@endif
<table class="form" role="presentation"> <table class="form" role="presentation">
<tr> <tr>
<td> <td>
@ -32,7 +32,16 @@
<tr> <tr>
<td></td> <td></td>
<td> <td>
@if(isLegacy())
<input type="submit" name="Submit" VALUE="Submit">
@else
<button type="submit">Submit</button> <button type="submit">Submit</button>
@endif
</td>
</tr>
<tr>
<td></td>
<td>
</td> </td>
</tr> </tr>
</table> </table>
@ -44,12 +53,52 @@
<li>You can submit an entry <u>once every hour</u>.</li> <li>You can submit an entry <u>once every hour</u>.</li>
<li>Your IP address is logged but <u>not</u> publicly displayed.</li> <li>Your IP address is logged but <u>not</u> publicly displayed.</li>
<li>Any entries that appear to be spam <u>will</u> be removed.</li> <li>Any entries that appear to be spam <u>will</u> be removed.</li>
@if (isLegacy())
<li>This form is broken in super-old browsers.</li>
<li>Entries submitted on this site are flagged for manual review.</li>
@endif
</ul> </ul>
</td> </td>
</tr> </tr>
</table> </table>
@if (isLegacy())
<font size="+2"><b>Entries ({{ count($entries) }} total)</b></font>
<table cellspacing="10" cellpadding="0" border="0">
@foreach ($entries as $entry)
{{-- Skip entries flagged as legacy --}}
@if($entry->legacy_flagged) @php continue @endphp @endif
@php
$user_agent = $parser->parse($entry->agent);
@endphp
<tr>
<td>
<table cellspacing="2" cellpadding="5" border="1" width="100%">
<tr><td>
Submitted by <b>{{ $entry->name }}</b>
on <b>{{ $entry->created_at->format('Y-m-d') }}</b>
at <b>{{ $entry->created_at->format('h:i:s A (e)') }}</b>
</td></tr>
<tr><td>{{ $entry->message }}</td></tr>
<tr><td>
@if($entry->agent === "Agent Unavailable")
<i>Agent unavailable</i>
@else
@if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
<i>Posted using <b>{{ $entry->agent }}</b></i>
@else
<i>Posted using <b>{{ $user_agent->ua->toString() }}</b>
on <b>{{ $user_agent->os->toString() }}</b></i>
@endif
@endif
</td></tr>
</table>
</td>
</tr>
@endforeach
</table>
@else
<hr> <hr>
<h2>Entries <small>({{ count($entries) }} total)</small></h2> <h2>Entries <small>({{ count($entries) }} total)</small></h2>
@foreach ($entries as $entry) @foreach ($entries as $entry)
@ -66,10 +115,15 @@
@if($entry->agent === "Agent Unavailable") @if($entry->agent === "Agent Unavailable")
<address>Agent unavailable</address> <address>Agent unavailable</address>
@else @else
<address>Posted using <strong>{{ $user_agent->ua->toString() }}</strong> @if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
on <strong>{{ $user_agent->os->toString() }}</strong></address> <address>Posted using <strong>{{ $entry->agent }}</strong></address>
@else
<address>Posted using <strong>{{ $user_agent->ua->toString() }}</strong>
on <strong>{{ $user_agent->os->toString() }}</strong></address>
@endif
@endif @endif
</div> </div>
<br> <br>
@endforeach @endforeach
@endif
</x-layout> </x-layout>

View file

@ -5,25 +5,29 @@
<p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide
<strong>W</strong>eb. <strong>W</strong>eb.
</p> </p>
<br> @if(!isLegacy())
<br>
@endif
<p>Some quick facts about me:</p> <p>Some quick facts about me:</p>
<ul> <ul>
<li>{{ $age }} y/o, he/him, British</li> <li>{{ $age }} y/o, he/him, British</li>
<li>Theatre Technician and &quot;Web Developer&quot;</li> <li>Theatre Technician and &quot;Web Developer&quot;</li>
<li>Loves ETC desks, prefers Generics to LEDs for some reason</li> <li>Loves ETC desks, prefers Generics to LEDs for some reason</li>
<li>Spends way too much time on his computer</li> <li>Spends way too much time on his computer</li>
<li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/">OneShot</a>, <li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/"><font color="#000000">OneShot</font></a>,
Minecraft, Stardew Valley, N++ and Starbound</li> Minecraft, Stardew Valley, N++ and Starbound</li>
<li><a href="http://wxqa.com/">CWOP</a> member</li> <li><a href="http://wxqa.com/"><font color="#000000">CWOP</font></a> member</li>
</ul> </ul>
<br> @if(!isLegacy())
<br>
@endif
<p>Interests:</p> <p>Interests:</p>
<ul> <ul>
<li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc.</li> <li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc.</li>
<li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a <li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a
href="https://github.com/RoscoeDaWah">GitHub</a>)</li> href="https://github.com/RoscoeDaWah"><font color="#000000">GitHub</font></a>)</li>
<li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/">Flickr</a></li> <li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/"><font color="#000000">Flickr</font></a></li>
<li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/">Steam Profile</a> <li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/"><font color="#000000">Steam Profile</font></a>
</li> </li>
</ul> </ul>
</x-layout> </x-layout>

View file

@ -2,7 +2,16 @@
<x-slot:title>Absolute Pandamonium!</x-slot:title> <x-slot:title>Absolute Pandamonium!</x-slot:title>
<x-slot:cardImage>{{ asset('/images/embeds/pandamonium.png') }}</x-slot:cardImage> <x-slot:cardImage>{{ asset('/images/embeds/pandamonium.png') }}</x-slot:cardImage>
<x-slot:cardDescription>Follow the adventures of Rosco, Leko, Viz and AJ!</x-slot:cardDescription> <x-slot:cardDescription>Follow the adventures of Rosco, Leko, Viz and AJ!</x-slot:cardDescription>
<div class="rosco-leko-gallery"> @if (isLegacy())
<p><i>Click images for full-size version (56k no!)</i></p>
@foreach($images as $image)
<a href="{{ str_replace('-legacy', '', $image["path"]) }}"><img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif></a>
@if(isset($image["description"]))
<p>{{$image["description"]}}</p>
@endif
@endforeach
@else
<div class="rosco-leko-gallery">
@foreach($images as $image) @foreach($images as $image)
<div> <div>
<img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif> <img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif>
@ -11,5 +20,6 @@
@endif @endif
</div> </div>
@endforeach @endforeach
</div> </div>
@endif
</x-layout> </x-layout>

View file

@ -26,3 +26,19 @@
Route::post('/guestbook', [GuestbookController::class, 'addEntry']) Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
->middleware('validator') ->middleware('validator')
->middleware('rate_limit'); ->middleware('rate_limit');
Route::get('/proxy/wah/{image}', function (string $image) {
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.tinyfox.dev/hourly/wahs/'.$image);
return response($response->getBody())
->header('Content-Type', $response->getHeader('Content-Type'));
});
Route::get('/proxy/lastfm/{image}', function (string $image) {
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://lastfm.freetls.fastly.net/i/u/174s/'.$image);
return response($response->getBody())
->header('Content-Type', $response->getHeader('Content-Type'));
});