The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
package Arepa::Web::Keys;

use strict;
use warnings;

use base 'Arepa::Web::Base';

use English qw(-no_match_vars);
use Encode;

sub index {
    my ($self) = @_;

    my $gpg_homedir = $self->config->get_key('web_ui:gpg_homedir');
    my $gpg_list_keys_cmd = "gpg --homedir '$gpg_homedir' " .
                                "--no-default-keyring --list-keys 2>&1";
    my $gpg_list_keys_output = `$gpg_list_keys_cmd`;
    $self->show_view({ cmd    => $gpg_list_keys_cmd,
                       output => $gpg_list_keys_output });
}

sub import {
    my ($self) = @_;

    $self->_only_if_admin(sub {
        my $gpg_homedir = $self->config->get_key('web_ui:gpg_homedir');
        my $gpg_import_cmd = "gpg --homedir '$gpg_homedir' " .
                                "--no-default-keyring --import";
        my $r = open F, "| $gpg_import_cmd";
        if ($r) {
            print F $self->param("gpgkeys");
            close F;

            $self->redirect_to('generic', controller => 'keys',
                                          action => 'index');
        }
        else {
            $self->show_view({ error => $! });
        }
    });
}

1;