App-Siesh
view release on metacpan or search on metacpan
#!/usr/bin/perl
use strict;
use warnings;
use App::Siesh;
use Getopt::Long;
use IO::Prompt;
use Config::Find;
use Pod::Usage;
use IO::Interactive qw(is_interactive);
use IO::Handle;
use IO::File;
my (%config, %configfile, %commandline);
my $result = GetOptions( \%commandline,
'debug',
'user=s',
'host=s',
'port=s',
'tls=s',
'password=s',
'command=s@',
'file=s',
'config=s',
'help|?',
'man',
) or pod2usage( -verbose => 0);
pod2usage( -verbose => 0, -exitval => 0 ) if $commandline{'help'};
pod2usage( -verbose => 2, -exitval => 0 ) if $commandline{'man'};
%configfile = %{ App::Siesh->read_config($commandline{'config'}) };
%config = ( %configfile, %commandline );
if(!$config{password}) {
$config{password} = prompt( "Password: ", -e => '*' );
}
if ( !is_interactive(*STDIN) ) {
$config{file} = IO::Handle->new_from_fd( *STDIN, 'r' );
}
elsif ( $config{command} and not $config{file} ) {
my $fh = IO::File->new_tmpfile();
for my $command ( @{ $config{command} } ) {
print {$fh} $command . "\n";
}
$fh->flush();
$fh->seek( 0, 0 );
$config{file} = $fh;
delete $config{command}
} elsif ( $config{file} ) {
$config{file} = IO::File->new($config{file},'r');
}
App::Siesh->run(%config);
0;
__END__
=head1 NAME
siesh - interactive sieve shell
=head1 SYNOPSIS
siesh
--debug
--user USER
--host SERVER
--tls {require|auto|off}
--port PORT
--password PASSWORD
--command COMMAND
--file FILE
--config FILE
--help
--man
=head1 DESCRIPTION
Siesh provides a shell-like interface for manipulating sieve scripts
using the ManageSieve protocol.
The documentation for L<App::Siesh> provides more details on how
to use this probram interactively.
=head1 OPTIONS
=over 4
=item B<--debug>|B<-d>
Enable debugging.
=item B<--user>|B<-u> USERNAME
Specifies the username to use when logging into the sieve server. This
option defaults to the value of the environment variable C<USER>.
=item B<--host>|B<-h> HOST
Specifies the machine to connect to. Defaults to C<imap>.
=item B<--port>|B<-p> PORT
Specifies the remote port to connect to. Defaults to C<2000>.
=item B<--tls>|B<-t> {require|auto|off}
Specifies whether TLS is required ("require"), optional
("auto"), or disabled ("off"). Defaults to "auto".
=item B<--password> PASSWORD
Specifies the password to login.
=item B<--file> FILE
The commands in FILE are executed as they were entered on the shell
prompt. This options is ignored when batch commands are provided on
STDIN.
=item B<--command> COMMAND
COMMAND is a acceptable command as entered on the shell prompt. This
option maybe provided more than once. It it ignored if batch commands
are passed in via --file or STDIN.
=item B<--config> FILE
If specified, configuration options are read from this file instead
of that returned by L<Config::Find>.
=item B<--help>
Print a brief help message and exits.
=item B<--man>
Prints the manual page and exits.
=back
=head1 CONFIGURATION FILE
When siesh is invoked, it first reads configurations variables from
F</etc/siesh.conf> or F<~/.siesh.conf> (or whatever L<Config::Find>
returns) if one of these files exist. The file is structured as a
set of lines with name and values seperated by an equal sign.
user = mario
host = sieve.example.com
port = 2000
tls = require
debug = 1
password = secret
Currently only these six options are recognized. Values are overriden
by options specified on the command line.
=head1 SEE ALSO
L<App::Siesh>, L<Net::ManageSieve::Siesh>, L<Net::ManageSieve>
=head1 COPYRIGHT & LICENSE
Copyright 2008 Mario Domgoergen, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
( run in 1.132 second using v1.01-cache-2.11-cpan-6aa56a78535 )