'Pressemitteilung verwalten', 'eyebrow' => 'Zugang für Pressekontakte', 'topRightLabel' => 'Konto vorhanden?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component { #[Validate('required|string|email')] public string $email = ''; // Honeypot gegen einfache Bots – muss leer bleiben. public string $website = ''; public function requestAccess(ContactAccessService $contactAccess): void { $this->validate(); if ($this->website !== '') { // Bot: identische neutrale Antwort, keine Aktion. $this->sent(); return; } $this->ensureIsNotRateLimited(); RateLimiter::hit($this->throttleKey(), 600); $contactAccess->requestAccess($this->email, request()->ip()); $this->sent(); } private function sent(): void { $this->reset('email'); session()->flash('status', __('Falls für diese E-Mail-Adresse ein Pressekontakt hinterlegt ist, haben wir Ihnen einen Zugangslink geschickt.')); } protected function ensureIsNotRateLimited(): void { if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { return; } $seconds = RateLimiter::availableIn($this->throttleKey()); throw ValidationException::withMessages([ 'email' => __('Zu viele Anfragen. Bitte versuchen Sie es in :minutes Minuten erneut.', ['minutes' => ceil($seconds / 60)]), ]); } protected function throttleKey(): string { return 'contact-access|'.Str::transliterate(Str::lower($this->email).'|'.request()->ip()); } }; ?>
Sind Sie als Pressekontakt einer Firma hinterlegt? Geben Sie Ihre E-Mail-Adresse ein – wir senden Ihnen einen Link, mit dem Sie die Pressemitteilungen Ihrer Firma verwalten können.