Quelltext des aktuellen Standes
#!/usr/bin/env php
<?php
/**
* VAPID-Schluessel fuer Web Push Benachrichtigungen generieren (CLI-Alternative).
*
* Die Schluessel koennen alternativ direkt im Admin-Panel unter
* Admin → Einstellungen → PWA & Push generiert werden.
*
* Verwendung:
* php bin/generate-vapid-keys.php
*
* Die generierten Schluessel werden in config/runtime.php gespeichert.
*/
declare(strict_types=1);
require_once dirname(__DIR__) . '/vendor/autoload.php';
require_once dirname(__DIR__) . '/bootstrap.php';
use Minishlink\WebPush\VAPID;
$runtimeFile = dirname(__DIR__) . '/config/runtime.php';
// Bestehende runtime.php laden oder leeres Array
$config = [];
if (file_exists($runtimeFile)) {
$config = include $runtimeFile;
}
if (!empty($config['vapid']['public_key'])) {
echo "VAPID-Schluessel existieren bereits in config/runtime.php" . PHP_EOL;
echo "Public Key: " . $config['vapid']['public_key'] . PHP_EOL;
echo "Zum Neu-Generieren bitte im Admin-Panel unter Einstellungen → PWA & Push regenerieren." . PHP_EOL;
exit(0);
}
echo "Generiere VAPID-Schluessel..." . PHP_EOL;
try {
$keys = VAPID::createVapidKeys();
$config['vapid']['public_key'] = $keys['publicKey'];
// Wie im Admin-Panel: der private Schluessel wird verschluesselt abgelegt.
$config['vapid']['private_key'] = \OpenNIT\Security\CredentialCrypto::encrypt(
$keys['privateKey'],
(string)($_ENV['APP_KEY'] ?? $config['app']['key'] ?? '')
);
$config['vapid']['subject'] = $config['vapid']['subject'] ?? 'mailto:admin@localhost';
$content = "<?php\n\nreturn " . var_export($config, true) . ";\n";
file_put_contents($runtimeFile, $content, LOCK_EX);
echo "Schluessel erfolgreich gespeichert in config/runtime.php!" . PHP_EOL;
echo PHP_EOL;
echo "Public Key: " . $keys['publicKey'] . PHP_EOL;
echo "Private Key: " . substr($keys['privateKey'], 0, 8) . "... (gespeichert)" . PHP_EOL;
echo PHP_EOL;
echo "Naechster Schritt: Absender in Admin → Einstellungen → PWA & Push eintragen." . PHP_EOL;
} catch (\Exception $e) {
echo "Fehler: " . $e->getMessage() . PHP_EOL;
exit(1);
}