'Ohne Passwort anmelden', 'eyebrow' => 'Zugang zu Ihrer Pressemitteilung', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component { #[Locked] public string $token = ''; #[Locked] public string $source = ''; public string $maskedEmail = ''; public string $title = ''; public bool $sent = false; public function mount(MailAccessLink $links, ConversionRecorder $recorder): mixed { $data = $links->decode(request()->query('t')); $pressRelease = $data === null ? null : $this->pressRelease($data['press_release_id']); abort_if($pressRelease === null, 404); $user = auth()->user(); if ($user !== null && mb_strtolower((string) $user->email) === $data['email'] && $user->can('view', $pressRelease)) { return redirect()->route('me.press-releases.show', ['id' => $pressRelease->id]); } $this->token = (string) request()->query('t'); $this->source = $this->sourceFromRequest()->value; $this->maskedEmail = NewsroomClaimService::mask($data['email']); $this->title = (string) $pressRelease->title; $company = $this->company($pressRelease); if ($company !== null) { $recorder->recordManagePageOpened(request(), $company, ConversionSource::parse($this->source), $pressRelease); } return null; } public function requestLink(MailAccessLink $links, ContactAccessService $contactAccess, ConversionRecorder $recorder): void { $data = $links->decode($this->token); $pressRelease = $data === null ? null : $this->pressRelease($data['press_release_id']); if ($pressRelease === null) { return; } $key = 'mail-access|'.hash('sha256', $data['email']); if (RateLimiter::tooManyAttempts($key, 3)) { $this->addError('link', __('Zu viele Anfragen. Bitte versuchen Sie es in :minutes Minuten erneut.', [ 'minutes' => max(1, (int) ceil(RateLimiter::availableIn($key) / 60)), ])); return; } RateLimiter::hit($key, 3600); $source = ConversionSource::parse($this->source); $sent = $contactAccess->requestMagicAccess($data['email'], request()->ip(), $source, $pressRelease->company_id, $pressRelease->id); $company = $this->company($pressRelease); if ($sent && $company !== null) { $recorder->record(ConversionEventType::AccessRequested, $source, $company, $pressRelease); } $this->sent = true; } private function sourceFromRequest(): ConversionSource { $source = ConversionSource::parse((string) request()->query('src')); return in_array($source, [ConversionSource::MailPublish, ConversionSource::MailReject, ConversionSource::MailReview], true) ? $source : ConversionSource::Organic; } private function pressRelease(int $id): ?PressRelease { return PressRelease::query()->withoutGlobalScope(PortalScope::class)->find($id); } private function company(PressRelease $pressRelease): ?Company { return $pressRelease->company_id === null ? null : Company::query()->withoutGlobalScope(PortalScope::class)->find($pressRelease->company_id); } }; ?>
@if ($sent)
{{ __('Wir haben einen Anmeldelink an :email geschickt. Er ist 15 Minuten gültig; nach dem Klick landen Sie direkt bei Ihrer Pressemitteilung.', ['email' => $maskedEmail]) }}
@else

{{ __('Sie brauchen weder ein Konto noch ein Passwort. Wir schicken einen Anmeldelink an die Adresse, an die unsere Mail ging:') }}

{{ $maskedEmail }}

{{ __('Pressemitteilung:') }} {{ $title }}

@error('link')

{{ $message }}

@enderror @endif

{{ __('Nach der Anmeldung können Sie die Meldung ansehen und korrigieren, eine abgelehnte Meldung überarbeiten und erneut einreichen, die Aufrufe verfolgen und den Newsroom Ihrer Firma pflegen. Das ist kostenlos.') }}