CluPilotCloud/app/Support/StripeWebhookSecret.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');
}
}