73 lines
2.6 KiB
PHP
73 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Mail;
|
|
|
|
use App\Mail\Concerns\RidesALane;
|
|
use App\Mail\Concerns\SendsFromMailbox;
|
|
use App\Models\Operator;
|
|
use App\Services\Mail\MailCatalogue;
|
|
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;
|
|
|
|
/**
|
|
* „Sie wurden in die CluPilot-Konsole eingeladen."
|
|
*
|
|
* Diese Mail trägt AUSDRÜCKLICH kein Passwort. Vorher erzeugte die Konsole
|
|
* eines und zeigte es dem Inhaber einmal an, damit er es „sicher weitergibt" —
|
|
* für einen Zugang, der die ganze Flotte und jede Kundeninstanz verwaltet. Ein
|
|
* Passwort, das zwei Menschen kennen, gehört keinem von beiden; und was einmal
|
|
* durch einen Chat gegangen ist, steht dort für immer.
|
|
*
|
|
* Sie trägt deshalb nur zweierlei: den Link, an dem der Eingeladene sein
|
|
* eigenes Passwort vergibt, und den NAMEN dessen, der eingeladen hat. Der Name
|
|
* ist kein Beiwerk: eine Mail, die einem Menschen einen Zugang zu einer Konsole
|
|
* anbietet, ist von aussen nicht von einem Phishing-Versuch zu unterscheiden —
|
|
* ausser dadurch, dass darin steht, wen er gerade danach fragen kann.
|
|
*/
|
|
class OperatorInvitationMail extends Mailable implements ShouldQueue
|
|
{
|
|
use Queueable, RidesALane, SendsFromMailbox, SerializesModels;
|
|
|
|
public function __construct(
|
|
public Operator $operator,
|
|
public string $invitedBy,
|
|
public string $url,
|
|
public int $hours,
|
|
) {
|
|
$this->mailer(MailCatalogue::mailer('operator-invitation'));
|
|
}
|
|
|
|
/**
|
|
* Wie lange der Link in dieser Mail gilt, in Stunden.
|
|
*
|
|
* Aus der Broker-Einstellung gelesen statt danebengeschrieben: die Zahl
|
|
* steht im Text der Mail, im Hinweis unter dem Einladen-Formular und in der
|
|
* Vorschau — drei Orte mit derselben Zahl sind zwei Orte, an denen sie
|
|
* falsch wird. Die Frist selbst ist in config/auth.php begründet.
|
|
*/
|
|
public static function validHours(): int
|
|
{
|
|
return (int) round(((int) config('auth.passwords.operators.expire', 60)) / 60);
|
|
}
|
|
|
|
public function envelope(): Envelope
|
|
{
|
|
return $this->mailboxEnvelope(MailPurpose::SYSTEM, __('operator_invitation.subject'), 'operator-invitation');
|
|
}
|
|
|
|
public function content(): Content
|
|
{
|
|
return new Content(view: 'mail.operator-invitation', with: [
|
|
'name' => $this->operator->name,
|
|
'invitedBy' => $this->invitedBy,
|
|
'url' => $this->url,
|
|
'hours' => $this->hours,
|
|
]);
|
|
}
|
|
}
|