App-Acmeman
view release on metacpan or search on metacpan
lib/App/Acmeman.pm view on Meta::CPAN
package App::Acmeman;
use strict;
use warnings;
use Net::ACME2::LetsEncrypt;
use Crypt::Format;
use Crypt::OpenSSL::PKCS10 qw(:const);
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::X509;
use File::Basename;
use File::Path qw(make_path);
use File::Spec;
use DateTime::Format::Strptime;
use LWP::UserAgent;
use LWP::Protocol::https;
use Socket qw(inet_ntoa);
use Sys::Hostname;
use Pod::Usage;
use Pod::Man;
use Getopt::Long qw(:config gnu_getopt no_ignore_case);
use POSIX qw(strftime time floor);
use App::Acmeman::Config;
use App::Acmeman::Domain qw(:files);
use Data::Dumper;
use Text::ParseWords;
use App::Acmeman::Log qw(:all :sysexits);
use feature 'state';
our $VERSION = '3.10';
my $progdescr = "manages ACME certificates";
our $acme_dir = '/etc/ssl/acme';
our $letsencrypt_root_cert_basename = 'lets-encrypt-root.pem';
our $letsencrypt_root_cert_url =
'https://letsencrypt.org/certs/lets-encrypt-r3-cross-signed.pem';
sub new {
my $class = shift;
my $self = bless {
_progname => basename($0),
_acme_host => 'production',
_command => 'renew',
_option => {
config_file => '/etc/acmeman.conf'
},
_domains => []
}, $class;
GetOptions(
'h' => sub {
pod2usage(-message => "$self->{_progname}: $progdescr",
-exitstatus => EX_OK);
},
'help' => sub {
pod2usage(-exitstatus => EX_OK, -verbose => 2);
},
'usage' => sub {
pod2usage(-exitstatus => EX_OK, -verbose => 0);
},
'debug|d+' => \$self->{_option}{debug},
'dry-run|n' => \$self->{_option}{dry_run},
'stage|s' => sub { $self->{_acme_host} = 'staging' },
'force|F' => \$self->{_option}{force},
'time-delta|D=n' => \$self->{_option}{time_delta},
'setup|S' => sub { $self->{_command} = 'setup' },
'alt-names|a' => \$self->{_option}{check_alt_names},
'config-file|f=s' => \$self->{_option}{config_file},
'version' => sub {
print "$0 version $VERSION\n";
exit(EX_OK)
}
) or exit(EX_USAGE);
++$self->{_option}{debug} if $self->dry_run_option;
debug_level($self->{_option}{debug});
$self->add_selected_domains(@ARGV);
$self->{_cf} = new App::Acmeman::Config($self->option('config_file'));
my $v;
if ($v = $self->option('time_delta')) {
$self->cf->set(qw(core time-delta), $v);
}
if ($v = $self->option('check_alt_names')) {
$self->cf->set(qw(core check-alt-names), $v);
( run in 1.646 second using v1.01-cache-2.11-cpan-39bf76dae61 )