CluPilotCloud/app/Mail/SecurityBlockMail.php

68 lines
2.3 KiB
PHP

<?php
namespace App\Mail;
use App\Mail\Concerns\RidesALane;
use App\Mail\Concerns\SendsFromMailbox;
use App\Models\SecurityBlock;
use App\Services\Mail\MailPurpose;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
/**
* "Eine Adresse wurde wegen Anmeldeversuchen an Ihrer Instanz gesperrt."
*
* Aus dem SYSTEM-Postfach, genau wie NewDeviceSignInMail: das ist kein
* Gespräch, und eine Antwort darauf soll kein Ticket öffnen.
*
* Die Drossel — höchstens eine Mail je Instanz und Stunde — sitzt in
* BlockAddress, nicht hier: diese Klasse weiß nichts davon, ob sie gerade die
* erste oder die zehnte Sperre dieser Stunde beschreibt, und muss es auch
* nicht wissen.
*
* Der Link führt auf die Sicherheitsseite des Portals (Aufgabe 6, `portal.
* security`), wo die Sperre eingesehen und vorzeitig aufgehoben werden kann.
* Eine Warnung, deren einziger Rat "handeln Sie" ist, ist eine Warnung ohne
* Handgriff.
*/
class SecurityBlockMail extends Mailable implements ShouldQueue
{
use Queueable, RidesALane, SendsFromMailbox, SerializesModels;
public function __construct(public SecurityBlock $block)
{
$this->mailer('cp_'.MailPurpose::SYSTEM);
}
public function envelope(): Envelope
{
return $this->mailboxEnvelope(
MailPurpose::SYSTEM,
__('security.mail_subject'),
'security-block',
);
}
public function content(): Content
{
// instance() statt eines eigenen Customer-Parameters: der Aufrufer
// (BlockAddress) hat ohnehin nur den Datensatz, und ein zweiter Weg,
// an dieselbe Instanz zu kommen, wäre eine zweite Stelle, an der der
// Name veralten könnte.
$customer = $this->block->instance?->customer;
return new Content(view: 'mail.security-block', with: [
'name' => (string) ($customer?->contact_name ?: $customer?->name ?: ''),
'ip' => $this->block->ip,
'attempts' => $this->block->attempts,
'blockedAt' => $this->block->blocked_at,
'expiresAt' => $this->block->expires_at,
'securityUrl' => route('portal.security'),
]);
}
}