34 lines
1.4 KiB
PHP
34 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
/**
|
|
* Der Signaturschlüssel des aktiven Betriebsmodus.
|
|
*
|
|
* Beide Werte bleiben in der `.env`, nicht im Tresor (siehe Kopfkommentar von
|
|
* App\Services\Secrets\SecretVault): dieser Wert wird bei jedem eingehenden
|
|
* Zahlungsereignis gelesen, und ein Datenbankproblem würde die
|
|
* Signaturprüfung still fehlschlagen lassen — die eine Fehlerart, die laut
|
|
* bleiben muss.
|
|
*
|
|
* Die AUSWAHL fragt allerdings die Datenbank (OperatingMode::current()), was
|
|
* diese Abhängigkeit auf einem Umweg wieder einführt. Entschärft durch die
|
|
* Richtung des Ausfalls: `Settings::get()` liefert bei unerreichbarer Tabelle
|
|
* seinen Vorgabewert `live`, also wird der Live-Schlüssel benutzt. Ein echtes
|
|
* Zahlungsereignis wird weiter korrekt geprüft, ein Testereignis scheitert
|
|
* laut. Andersherum wäre es die gefährliche Richtung.
|
|
*
|
|
* Eigene Klasse statt einer privaten Methode auf dem Controller: die Auswahl
|
|
* selbst ist der Prüfgegenstand (siehe StripeWebhookSecretByModeTest), und ein
|
|
* Test soll dafür nicht per Reflection ins Controller-Innere greifen müssen.
|
|
*/
|
|
final class StripeWebhookSecret
|
|
{
|
|
public static function current(): string
|
|
{
|
|
return OperatingMode::current()->isTest()
|
|
? (string) config('services.stripe.webhook_secret_test')
|
|
: (string) config('services.stripe.webhook_secret');
|
|
}
|
|
}
|