<?php

namespace App\Console\Commands;

use App\Services\Terminal\ServerIdentity;
use Illuminate\Console\Command;

/**
 * Die öffentliche Hälfte der Serverkennung, eine Zeile, sonst nichts.
 *
 * Gerufen von `/usr/local/sbin/clupilot-host-step install-server-terminal` —
 * der root-eigenen Hälfte auf dem Wirt, die daraus einen Eintrag in
 * `/root/.ssh/authorized_keys` macht. Nach demselben Muster wie
 * `apply-proxy-hosts`: der privilegierte Schritt HOLT sich den Wert selbst,
 * statt ihn vom Dienstkonto gereicht zu bekommen, und prüft ihn dann hart.
 *
 * Nur die öffentliche Hälfte. Ausgabe eines Kommandos wandert in Protokolle
 * und Terminalverläufe; was hier herauskommt, stünde ohnehin in jeder
 * authorized_keys.
 *
 * Kein Erzeugen auf Zuruf: gibt es keine Kennung, endet das Kommando mit 3 und
 * einem Satz, der sagt, wo sie entsteht. Ein Kommando, das im Vorbeigehen einen
 * Schlüssel mintet, täte es unter niemandes Namen — und der Tresor hält fest,
 * WER einen Wert gesetzt hat.
 */
class ServerTerminalKey extends Command
{
    protected $signature = 'clupilot:server-terminal-key';

    protected $description = 'Print the public half of the server terminal SSH identity';

    public function handle(): int
    {
        $publicKey = ServerIdentity::publicKey();

        if ($publicKey === null) {
            $this->getOutput()->writeln(
                '<error>Für den Server ist keine SSH-Kennung erzeugt. In der Konsole unter Einstellungen → Terminal zum Server anlegen.</error>',
            );

            return 3;
        }

        // Nur die Zeile, ohne Rahmen und ohne Farbe: der Aufrufer ist ein
        // Skript, das sie zeichengenau weiterverarbeitet.
        $this->getOutput()->writeln($publicKey);

        return self::SUCCESS;
    }
}
