#!/usr/bin/perl
use strict;
use Capture::Tiny qw(capture);
use IO::Socket qw(AF_INET SOCK_STREAM);
use File::Temp;

my @cmd = qw(/usr/local/bin/sq key list-attestations);
$|=1;

my $server = IO::Socket->new(
    Domain =>  AF_INET,
    Type => SOCK_STREAM,
    Proto => 'tcp',
    LocalHost => '0.0.0.0',
    LocalPort => 3333,
    ReusePort => 1,
    Listen => 5,
) || die "Can't open socket: $IO::Socket::errstr";

while (1) {
    my ($conn, $buf, $keyfile, $filename, $out, $err, $exited);
    $conn = $server->accept();

    $keyfile = File::Temp->new();
    $filename = $keyfile->filename;

    while ($buf = <$conn>) {
	print $keyfile $buf;
	last if $buf =~ /END PGP/
    }
    $keyfile->flush;

    ($out, $err, $exited) = capture { system @cmd, $filename };
    if ($exited) {
	warn "Error running «@cmd $filename»: $exited";
	warn $err;
    }
    print $conn $out;
}

$server->close();
