#!/usr/bin/perl BEGIN { unshift @INC, qw( /data/custom/webgui_newsletter/lib /data/WebGUI/lib /data/custom/customlib_honeypot/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 || '127.0.0.1'; }; 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; }