105 lines
3.1 KiB
Perl
Executable file
105 lines
3.1 KiB
Perl
Executable file
#!/data/wre/prereqs/bin/perl
|
|
|
|
BEGIN {
|
|
unshift @INC, qw(
|
|
/data/custom/webgui_newsletter/lib
|
|
/data/WebGUI/lib
|
|
);
|
|
}
|
|
|
|
use strict;
|
|
use warnings;
|
|
use 5.010;
|
|
|
|
use WebGUI::MailCommand;
|
|
use List::MoreUtils qw{ any };
|
|
use WebGUI::Config;
|
|
use Getopt::Long;
|
|
use Readonly;
|
|
|
|
Readonly my $WRONG_USAGE => 64;
|
|
Readonly my $DATA_ERROR => 65;
|
|
Readonly my $NO_SUCH_USER => 67;
|
|
Readonly my $UNKNOWN_HOST => 68;
|
|
Readonly my $CONFIG_ERROR => 78;
|
|
|
|
my $webguiRoot = '/data/WebGUI';
|
|
|
|
#---------------------------------------------------------------
|
|
# Startup
|
|
{
|
|
my ( $configFile, $command, $id, $sender, $senderIp ) = getCredentials();
|
|
|
|
if ( WebGUI::MailCommand::isValidCommand( $command ) ) {
|
|
my $session = openSession( $webguiRoot, $configFile );
|
|
no warnings 'once';
|
|
*{ WebGUI::Session::Env::getIp } = sub {
|
|
return $senderIp;
|
|
};
|
|
|
|
$session->log->warn( "IP is : [$senderIp][" .$session->env->getIp ."]");
|
|
|
|
WebGUI::MailCommand::processCommand( $session, $command, $id, $sender );
|
|
|
|
closeSession( $session );
|
|
}
|
|
else {
|
|
warn "Not a valid command [$command].";
|
|
exit( $NO_SUCH_USER );
|
|
#die "Not a valid command [$command].";
|
|
}
|
|
|
|
exit(0);
|
|
}
|
|
|
|
#-----------------------------------------------------------------------------
|
|
sub getCredentials {
|
|
my ( $domain, $user, $sender, $senderIp );
|
|
|
|
GetOptions(
|
|
'domain=s' => \$domain,
|
|
'user=s' => \$user,
|
|
'sender=s' => \$sender,
|
|
'senderIp=s'=> \$senderIp,
|
|
);
|
|
warn "--domain parameter is required" && exit( $WRONG_USAGE ) unless $domain;
|
|
warn "--user parameter is required" && exit( $WRONG_USAGE ) unless $user;
|
|
warn "--sender parameter is required" && exit( $WRONG_USAGE ) unless $sender;
|
|
warn "--senderIp parameter is required" && exit( $WRONG_USAGE ) unless $senderIp;
|
|
|
|
my $dispatch = WebGUI::Config->new( $webguiRoot, 'mailing_dispatch.config' )
|
|
|| warn "Cannot open $webguiRoot/etc/mailing_dispatch.config" && exit( $CONFIG_ERROR );
|
|
|
|
my $configFile = $dispatch->get( $domain )
|
|
|| warn "Received mail for domain [$domain] which is not configured!" && exit( $UNKNOWN_HOST );
|
|
|
|
# Format is mailId-command
|
|
my ( $id, $command ) = $user =~ m{ ^ (.+) - ([^-]+) $ }ix;
|
|
|
|
print "Received mail addressed to [$user\@$domain] which contains no id" && exit( $NO_SUCH_USER ) unless $id;
|
|
print "Received mail addressed to [$user\@$domain] which contains no command" && exit( $NO_SUCH_USER ) unless $command;
|
|
|
|
|
|
return ( $configFile, $command, $id, $sender, $senderIp );
|
|
}
|
|
|
|
#-----------------------------------------------------------------------------
|
|
sub openSession {
|
|
my $webguiRoot = shift;
|
|
my $configFile = shift;
|
|
|
|
# Require WebGUI:Session rather than use it to save compilation of it when invalid commands are passed.
|
|
require WebGUI::Session;
|
|
|
|
my $session = WebGUI::Session->open( $webguiRoot, $configFile );
|
|
|
|
return $session;
|
|
}
|
|
|
|
#-----------------------------------------------------------------------------
|
|
sub closeSession {
|
|
my $session = shift;
|
|
|
|
$session->close;
|
|
}
|
|
|