CluPilotCloud/app/Support/StripePublishableKey.php

53 lines
2.2 KiB
PHP

<?php
namespace App\Support;
/**
* Der veröffentlichbare Stripe-Schlüssel (`pk_…`) des aktiven Betriebsmodus.
*
* Stripe gibt einem Betreiber drei Werte: diesen, den Secret Key und das
* Signatur-Secret. Die anderen zwei liegen im Tresor; dieser bewusst NICHT —
* er ist öffentlich. Ihn hinter „wird verschlüsselt gespeichert und nie wieder
* vollständig angezeigt" zu setzen, wäre Theater, und es nähme dem Betreiber
* die Möglichkeit nachzusehen, welcher Schlüssel eigentlich eingetragen ist.
* Also eine gewöhnliche Einstellung, im Klartext sichtbar.
*
* Je Betriebsmodus getrennt, wie die zwei daneben: Stripe stellt ihn je Konto
* eigen aus, und ein `pk_live` im Testplatz ist genau die Verwechslung, die
* beim Einrichten passiert. Sichtbar gemacht wird sie über
* OperatingMode::ofStripeKey(), das dafür `pk_`-Präfixe mitgelernt hat.
*
* **Diese Anwendung liest ihn heute nirgends.** Der Checkout macht
* `redirect()->away()` auf Stripes eigene Bezahlseite; im Browser läuft kein
* Stripe.js, das ihn bräuchte. Er steht hier, weil ein Betreiber beim
* Einrichten drei Werte vor sich hat und nicht raten soll, welcher wohin
* gehört — und weil der Tag, an dem eine eingebettete Bezahlmaske dazukommt,
* ihn ohnehin verlangt. Das ist auf der Karte auch so gesagt, statt es zu
* verschweigen und wie eine wirksame Einstellung aussehen zu lassen.
*/
final class StripePublishableKey
{
private static function settingKey(?OperatingMode $mode = null): string
{
return 'stripe.publishable_key.'.($mode ?? OperatingMode::current())->value;
}
/** Der gespeicherte Wert, sonst der aus der Serverdatei — je Modus die eigene Zeile. */
public static function current(?OperatingMode $mode = null): string
{
$mode ??= OperatingMode::current();
$stored = Settings::get(self::settingKey($mode));
if (filled($stored)) {
return (string) $stored;
}
return (string) config($mode->isTest() ? 'services.stripe.key_test' : 'services.stripe.key');
}
public static function set(string $key, ?OperatingMode $mode = null): void
{
Settings::set(self::settingKey($mode), trim($key));
}
}