44 lines
1,002 B
PHP
44 lines
1,002 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Actions\RegisterDiscoveredPageAction;
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Support\Facades\RateLimiter;
|
|
use Livewire\Component;
|
|
|
|
class UrlSubmissionForm extends Component
|
|
{
|
|
public string $url = '';
|
|
|
|
public ?string $confirmedUrl = null;
|
|
|
|
public function submit(RegisterDiscoveredPageAction $registerPage): void
|
|
{
|
|
$key = 'submit-url:' . request()->ip();
|
|
|
|
if (RateLimiter::tooManyAttempts($key, 10)) {
|
|
$this->addError('rate_limit', 'Too many submissions, try again shortly.');
|
|
|
|
return;
|
|
}
|
|
|
|
RateLimiter::hit($key, 60);
|
|
|
|
$validated = $this->validate([
|
|
'url' => ['required', 'url:http,https'],
|
|
]);
|
|
|
|
$registerPage($validated['url']);
|
|
|
|
$this->confirmedUrl = $validated['url'];
|
|
$this->reset('url');
|
|
}
|
|
|
|
public function render(): View
|
|
{
|
|
return view('livewire.url-submission-form');
|
|
}
|
|
}
|