lemonldap-ng/lemonldap-ng-common/lib/Lemonldap/NG/Common/Cli.pm

109 lines
2.6 KiB
Perl

package Lemonldap::NG::Common::Cli;
use strict;
use Mouse;
use Lemonldap::NG::Common::Conf;
use Lemonldap::NG::Common::EmailTransport;
our $VERSION = '2.0.8';
extends 'Lemonldap::NG::Common::PSGI::Cli::Lib';
has confAccess => (
is => 'rw',
builder => sub {
my $res = Lemonldap::NG::Common::Conf->new( { (
ref $_[0] && $_[0]->{iniFile}
? ( confFile => $_[0]->{iniFile} )
: ()
)
}
);
die $Lemonldap::NG::Common::Conf::msg unless ($res);
return $res;
},
);
has cfgNum => (
is => 'rw',
isa => 'Int',
);
sub info {
my ($self) = @_;
my $conf =
$self->confAccess->getConf( { cfgNum => $self->cfgNum, raw => 1 } )
or die $Lemonldap::NG::Common::Conf::msg;
$conf->{cfgAuthorIP} ||= "No IP provided";
$conf->{cfgDate} ||= 0;
$conf->{cfgLog} ||= "No log provided";
print qq{
Num : $conf->{cfgNum}
Author : $conf->{cfgAuthor}
Author IP: $conf->{cfgAuthorIP}
Date : } . localtime( $conf->{cfgDate} ) . qq{
Version : $conf->{cfgVersion}
Log : $conf->{cfgLog}
};
}
sub updateCache {
my $self = shift;
my $conf = $self->confAccess->getConf( { noCache => 2 } );
die "Must not be launched as root" unless ($>);
print STDERR
qq{Cache updated to configuration $conf->{cfgNum} for user $>\n};
}
sub testEmail {
my $self = shift;
my $dest = shift;
die "Must specify destination" unless ($dest);
my $conf = $self->confAccess->getConf();
eval {
Lemonldap::NG::Common::EmailTransport::sendTestMail( $conf, $dest );
};
my $error = $@;
if ($error) {
die $error;
}
else {
print STDERR "Test email successfully sent to $dest\n";
}
}
sub run {
my $self = shift;
# Options simply call corresponding accessor
my $args = {};
while ( $_[0] =~ s/^--?// ) {
my $k = shift;
my $v = shift;
if ( ref $self ) {
eval { $self->$k($v) };
if ($@) {
die "Unknown option -$k or bad value ($@)";
}
}
else {
$args->{$k} = $v;
}
}
unless ( ref $self ) {
$self = $self->new($args);
}
unless (@_) {
die 'nothing to do, aborting';
}
$self->confAccess()->lastCfg() unless ( $self->cfgNum );
my $action = shift;
unless ( $action =~ /^(?:info|update-cache|test-email)$/ ) {
die "unknown action $action. Only info or update are accepted";
}
$action =~ s/\-([a-z])/uc($1)/e;
$self->$action(@_);
}
1;