OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

generate-vapid-keys.php

2 KB
#!/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);
}