67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Mail;
|
|
|
|
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, 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'),
|
|
]);
|
|
}
|
|
}
|