554 lines
14 KiB
Perl
554 lines
14 KiB
Perl
package SrvMngr::Controller::Wbl;
|
|
|
|
#----------------------------------------------------------------------
|
|
# heading : System
|
|
# description : E-mail WBL
|
|
# navigation : 4000 550
|
|
|
|
# name : wbl, method : get, url : /wbl, ctlact : wbl#main
|
|
# name : wbldis, method : post, url : /wbl, ctlact : wbl#do_display
|
|
# name : wblupc, method : get, url : /wbl2, ctlact : wbl#do_update
|
|
# name : wblupd, method : post, url : /wbl2, ctlact : wbl#do_update
|
|
#
|
|
# routes : end
|
|
#----------------------------------------------------------------------
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Mojo::Base 'Mojolicious::Controller';
|
|
|
|
use Locale::gettext;
|
|
use SrvMngr::I18N;
|
|
|
|
use SrvMngr qw( theme_list init_session );
|
|
|
|
use Exporter;
|
|
our @EXPORT_OK = qw(
|
|
get_contrib_desc
|
|
get_contrib_routes
|
|
);
|
|
|
|
our $db = esmith::ConfigDB->open() or die "Couldn't open ConfigDB\n";
|
|
our $wdb = esmith::ConfigDB->open('wbl') or die "Couldn't open wbl dbase\n";
|
|
our $sdb = esmith::ConfigDB->open('spamassassin') or die "Couldn't open spamassassin dbase\n";
|
|
|
|
|
|
sub main {
|
|
|
|
my $c = shift;
|
|
$c->app->log->info($c->log_req);
|
|
|
|
my %wbl_datas = ();
|
|
my $title = $c->l('wbl_FORM_TITLE');
|
|
|
|
$wbl_datas{'trt'} = 'CHOICE';
|
|
|
|
$c->stash( title => $title, wbl_datas => \%wbl_datas);
|
|
$c->render_maybe('wbl') or $c->render('wbl');
|
|
};
|
|
|
|
|
|
sub do_display {
|
|
|
|
my $c = shift;
|
|
$c->app->log->info($c->log_req);
|
|
|
|
my $trt = $c->param('list') || 'CHOICE';
|
|
|
|
my %wbl_datas = ();
|
|
my $title = $c->l('wbl_FORM_TITLE');
|
|
|
|
$wbl_datas{'trt'} = $trt;
|
|
|
|
if ( $trt eq 'RBL' ) {
|
|
|
|
# dnsbl - returns 'enabled/disabled
|
|
$wbl_datas{'dnsbl'} = get_dnsbl();
|
|
|
|
# rhsbl - returns 'enabled/disabled
|
|
$wbl_datas{'rhsbl'} = get_rhsbl();
|
|
|
|
# uribl - returns 'enabled/disabled
|
|
$wbl_datas{'uribl'} = get_uribl();
|
|
}
|
|
|
|
if ( $trt eq 'BLACK' ) {
|
|
# For Black List
|
|
}
|
|
|
|
if ( $trt eq 'WHITE' ) {
|
|
# For WBL List
|
|
}
|
|
|
|
if ( $trt eq 'CHOICE' ) {
|
|
#
|
|
}
|
|
|
|
$c->stash( title => $title, wbl_datas => \%wbl_datas );
|
|
$c->render( template => 'wbl' );
|
|
|
|
};
|
|
|
|
|
|
sub do_update {
|
|
|
|
my $c = shift;
|
|
$c->app->log->info($c->log_req);
|
|
|
|
my %wbl_datas = ();
|
|
my ($res, $result) = "";
|
|
|
|
my $title = $c->l('wbl_FORM_TITLE');
|
|
|
|
my $trt = ($c->param('trt') || '???');
|
|
$wbl_datas{'trt'} = $trt;
|
|
|
|
#### $wbl_datas{'dnsbl'} = get_dnsbl(); etc...
|
|
if ($trt eq 'RBL') {
|
|
|
|
# controls, validate
|
|
#if (xxx) {
|
|
# $result .= $c->l('XXXXXXX');
|
|
#}
|
|
|
|
##$result .= ' ** Blocked for testing ** !';
|
|
|
|
if ( ! $result ) {
|
|
$res = $c->create_modify_rbl();
|
|
$result .= $res unless $res eq 'OK';
|
|
if ( ! $result ) {
|
|
$wbl_datas{trt} = 'SUC';
|
|
$result = $c->l('SUCCESS').' RBL';
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if ($trt eq 'BLACK') {
|
|
|
|
# controls, validate
|
|
#if (xxx) {
|
|
# $result .= $c->l('XXXXXXX');
|
|
#}
|
|
|
|
##$result .= ' ** Blocked for testing ** !';
|
|
|
|
if ( ! $result ) {
|
|
$res = $c->create_modify_black();
|
|
$result .= $res unless $res eq 'OK';
|
|
if ( ! $result ) {
|
|
$wbl_datas{trt} = 'SUC';
|
|
$result = $c->l('SUCCESS').' BLACK';
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
if ($trt eq 'WHITE') {
|
|
|
|
# controls, validate
|
|
#if (xxx) {
|
|
# $result .= $c->l('XXXXXXX');
|
|
#}
|
|
|
|
##$result .= ' ** Blocked for testing ** !';
|
|
|
|
if ( ! $result ) {
|
|
$res = $c->create_modify_white();
|
|
$result .= $res unless $res eq 'OK';
|
|
if ( ! $result ) {
|
|
$wbl_datas{trt} = 'SUC';
|
|
$result = $c->l('SUCCESS').' WHITE';
|
|
}
|
|
}
|
|
}
|
|
|
|
# common part
|
|
$c->stash( title => $title, wbl_datas => \%wbl_datas );
|
|
if ($wbl_datas{trt} ne 'SUC') {
|
|
$c->flash(error => $result);
|
|
$wbl_datas{'trt'} = $trt;
|
|
return $c->render(template => 'wbl');
|
|
}
|
|
|
|
# successfully terminated
|
|
my $message = $trt . ' updates DONE';
|
|
$c->app->log->info($message);
|
|
$c->flash(success => $result);
|
|
|
|
#return to 'wbl' route !!!
|
|
$c->redirect_to('wbl');
|
|
|
|
}
|
|
|
|
|
|
sub get_dnsbl {
|
|
return ($db->get_prop('qpsmtpd', 'DNSBL') || 'disabled');
|
|
}
|
|
|
|
|
|
sub get_rhsbl {
|
|
return ($db->get_prop('qpsmtpd', 'RHSBL') || 'disabled');
|
|
}
|
|
|
|
|
|
sub get_uribl {
|
|
return ($db->get_prop('qpsmtpd', 'URIBL') || 'disabled');
|
|
}
|
|
|
|
|
|
sub get_sbllist {
|
|
|
|
my $sbllistform = $db->get_prop('qpsmtpd', 'SBLList') || '';
|
|
my @list = (split /,/, $sbllistform);
|
|
return \@list;
|
|
}
|
|
|
|
|
|
sub get_rbllist {
|
|
|
|
my $rbllistform = $db->get_prop('qpsmtpd', 'RBLList') || '';
|
|
my @list = (split /,/, $rbllistform);
|
|
return \@list;
|
|
}
|
|
|
|
|
|
sub get_ubllist {
|
|
|
|
my $ubllistform = $db->get_prop('qpsmtpd', 'UBLList') || '';
|
|
my @list = ($ubllistform);
|
|
return \@list;
|
|
}
|
|
|
|
|
|
sub get_wbllist {
|
|
|
|
my $c = shift;
|
|
return [[$c->l('wbl_RBL_LIST') => 'RBL'],
|
|
[$c->l('wbl_BLACK_LIST') => 'BLACK'],
|
|
[$c->l('wbl_WHITE_LIST') => 'WHITE']];
|
|
}
|
|
|
|
|
|
sub get_badhelo {
|
|
|
|
my %list = $wdb->get('badhelo')->props;
|
|
|
|
my @badhelo = ();
|
|
my ($parameter, $value) = "";
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @badhelo, $parameter if ($value eq "Black");
|
|
}
|
|
my @badh = sort(@badhelo);
|
|
return \@badh;
|
|
}
|
|
|
|
|
|
sub get_badmailfrom {
|
|
|
|
my %list = $wdb->get('badmailfrom')->props;
|
|
|
|
my @badmailfrom = ();
|
|
my ($parameter, $value) = "";
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @badmailfrom, $parameter if ($value eq "Black");
|
|
}
|
|
my @badmf = sort(@badmailfrom);
|
|
return \@badmf;
|
|
}
|
|
|
|
|
|
sub get_blacklistfrom {
|
|
|
|
my %list = $sdb->get('wbl.global')->props;
|
|
|
|
my @blacklistfrom = ();
|
|
my ($parameter, $value) = "";
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @blacklistfrom, $parameter if ($value eq "Black");
|
|
}
|
|
my @blacklf = sort(@blacklistfrom);
|
|
return \@blacklf;
|
|
}
|
|
|
|
|
|
sub get_whitelisthosts {
|
|
|
|
my %list = $wdb->get('whitelisthosts')->props;
|
|
|
|
my @whitelisthosts = ();
|
|
my ($parameter, $value) = "";
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @whitelisthosts, $parameter if ($value eq "White");
|
|
}
|
|
my @whitelh = sort(@whitelisthosts);
|
|
return \@whitelh;
|
|
}
|
|
|
|
|
|
sub get_whitelisthelo {
|
|
|
|
my %list = $wdb->get('whitelisthelo')->props;
|
|
|
|
my @whitelisthelo = ();
|
|
my ($parameter, $value) = "";
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @whitelisthelo, $parameter if ($value eq "White");
|
|
}
|
|
my @whitelh = sort(@whitelisthelo);
|
|
return \@whitelh;
|
|
}
|
|
|
|
|
|
sub get_whitelistsenders {
|
|
|
|
my %list = $wdb->get('whitelistsenders')->props;
|
|
|
|
my @whitelistsenders = ();
|
|
my ($parameter, $value) = "";
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @whitelistsenders, $parameter if ($value eq "White");
|
|
}
|
|
my @whitels = sort(@whitelistsenders);
|
|
return \@whitels;
|
|
}
|
|
|
|
|
|
sub get_whitelistfrom {
|
|
|
|
my %list = $sdb->get('wbl.global')->props;
|
|
|
|
my @whitelistfrom = ();
|
|
my ($parameter, $value) = "";
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
push @whitelistfrom, $parameter if ($value eq "White");
|
|
}
|
|
my @whitels = sort(@whitelistfrom);
|
|
return \@whitels;
|
|
}
|
|
|
|
|
|
sub create_modify_rbl {
|
|
|
|
my $c = shift;
|
|
|
|
my $dnsbl = $c->param('Dnsbl');
|
|
$db->set_prop('qpsmtpd', 'DNSBL', "$dnsbl");
|
|
|
|
my $rhsbl = $c->param('Rhsbl');
|
|
$db->set_prop('qpsmtpd', 'RHSBL', "$rhsbl");
|
|
|
|
|
|
my $sbllistcgi = $c->param('Sbllist');
|
|
my @sbllistcgi = split /\s{2,}/, $sbllistcgi;
|
|
my $sbllistdb = '';
|
|
foreach (@sbllistcgi) { $sbllistdb = $sbllistdb . ',' . $_; }
|
|
$sbllistdb =~ s/^,//;
|
|
|
|
$db->set_prop('qpsmtpd', 'SBLList', "$sbllistdb");
|
|
|
|
my $rbllistcgi = $c->param('Rbllist');
|
|
my @rbllistcgi = split /\s{2,}/, $rbllistcgi;
|
|
my $rbllistdb = '';
|
|
foreach (@rbllistcgi) { $rbllistdb = $rbllistdb . ',' . $_; }
|
|
$rbllistdb =~ s/^,//;
|
|
|
|
$db->set_prop('qpsmtpd', 'RBLList', "$rbllistdb");
|
|
|
|
#Update email settings
|
|
unless ( system ("/sbin/e-smith/signal-event", "wbl-update") == 0 ){
|
|
return 'RBL : ' . $c->l('wbl_ERROR_UPDATING');
|
|
}
|
|
|
|
return 'OK';
|
|
}
|
|
|
|
|
|
sub create_modify_black {
|
|
|
|
my $c = shift;
|
|
|
|
#-------------------------------
|
|
# qmail badhelo
|
|
#-------------------------------
|
|
my %list = $wdb->get('badhelo')->props;
|
|
my ($parameter, $value) = '';
|
|
|
|
while (($parameter,$value) = each(%list)) {
|
|
next if ($parameter eq "type");
|
|
if ($value eq "Black") {
|
|
$wdb->get_prop_and_delete('badhelo', "$parameter");
|
|
}
|
|
}
|
|
|
|
my $BadHelo = $c->param("Badhelo");
|
|
$BadHelo =~ s/\r\n/,/g;
|
|
my @BadHelo = sort(split /,/, $BadHelo);
|
|
foreach $BadHelo (@BadHelo) {
|
|
$wdb->set_prop('badhelo', "$BadHelo", 'Black');
|
|
}
|
|
|
|
#-------------------------------
|
|
# qmail badmailfrom
|
|
#-------------------------------
|
|
my %list_badmailfrom = $wdb->get('badmailfrom')->props;
|
|
my ($parameter_badmailfrom, $value_badmailfrom) = "";
|
|
|
|
while (($parameter_badmailfrom,$value_badmailfrom) = each(%list_badmailfrom)) {
|
|
next if ($parameter_badmailfrom eq "type");
|
|
if ($value_badmailfrom eq "Black") {
|
|
$wdb->get_prop_and_delete('badmailfrom', "$parameter_badmailfrom");
|
|
}
|
|
}
|
|
|
|
my $BadMailFrom = $c->param("Badmailfrom");
|
|
$BadMailFrom =~ s/\r\n/,/g;
|
|
my @BadMailFrom = sort(split /,/, $BadMailFrom);
|
|
foreach $BadMailFrom (@BadMailFrom){
|
|
$wdb->set_prop('badmailfrom', "$BadMailFrom", 'Black');
|
|
}
|
|
#-------------------------------
|
|
# spamassassin blacklist_from
|
|
#-------------------------------
|
|
my %list_wblglobal = $sdb->get('wbl.global')->props;
|
|
my ($parameter_wblglobal, $value_wblglobal) = "";
|
|
|
|
while (($parameter_wblglobal,$value_wblglobal) = each(%list_wblglobal)) {
|
|
next if ($parameter_wblglobal eq "type");
|
|
if ($value_wblglobal eq "Black") {
|
|
$sdb->get_prop_and_delete('wbl.global', "$parameter_wblglobal");
|
|
}
|
|
}
|
|
|
|
my $BlacklistFrom = $c->param("Blacklistfrom");
|
|
$BlacklistFrom =~ s/\r\n/,/g;
|
|
my @BlacklistFrom = sort(split /,/, $BlacklistFrom);
|
|
foreach $BlacklistFrom (@BlacklistFrom){
|
|
$sdb->set_prop('wbl.global', "$BlacklistFrom", 'Black');
|
|
}
|
|
|
|
#Update email settings
|
|
unless ( system ("/sbin/e-smith/signal-event", "wbl-update") == 0 ) {
|
|
return 'BLACK: '. $c->l('wbl_ERROR_UPDATING');
|
|
}
|
|
|
|
return 'OK';
|
|
}
|
|
|
|
|
|
sub create_modify_white {
|
|
|
|
my $c = shift;
|
|
|
|
#-------------------------------
|
|
# qpsmtpd whitelisthosts
|
|
#-------------------------------
|
|
my %list = $wdb->get('whitelisthosts')->props;
|
|
my $parameter = "";
|
|
my $value = "";
|
|
while (($parameter,$value) = each(%list)) {
|
|
if ($parameter eq "type") {next;}
|
|
|
|
if ($value eq "White") {
|
|
$wdb->get_prop_and_delete('whitelisthosts', "$parameter");
|
|
}
|
|
}
|
|
|
|
my $WhitelistHosts = $c->param("Whitelisthosts");
|
|
$WhitelistHosts =~ s/\r\n/,/g;
|
|
my @WhitelistHosts = sort(split /,/, $WhitelistHosts);
|
|
foreach $WhitelistHosts (@WhitelistHosts)
|
|
{
|
|
$wdb->set_prop('whitelisthosts', "$WhitelistHosts", 'White');
|
|
}
|
|
|
|
#-------------------------------
|
|
# qpsmtpd whitelisthelo
|
|
#-------------------------------
|
|
my %list_whitelisthelo = $wdb->get('whitelisthelo')->props;
|
|
my $parameter_whitelisthelo = "";
|
|
my $value_whitelisthelo = "";
|
|
while (($parameter_whitelisthelo,$value_whitelisthelo) = each(%list_whitelisthelo)) {
|
|
if ($parameter_whitelisthelo eq "type") {next;}
|
|
|
|
if ($value_whitelisthelo eq "White") {
|
|
$wdb->get_prop_and_delete('whitelisthelo', "$parameter_whitelisthelo");
|
|
}
|
|
}
|
|
|
|
my $WhitelistHelo = $c->param("Whitelisthelo");
|
|
$WhitelistHelo =~ s/\r\n/,/g;
|
|
my @WhitelistHelo = sort(split /,/, $WhitelistHelo);
|
|
foreach $WhitelistHelo (@WhitelistHelo)
|
|
{
|
|
$wdb->set_prop('whitelisthelo', "$WhitelistHelo", 'White');
|
|
}
|
|
|
|
#-------------------------------
|
|
# qpsmtpd whitelistsenders
|
|
#-------------------------------
|
|
my %list_whitelistsenders = $wdb->get('whitelistsenders')->props;
|
|
my $parameter_whitelistsenders = "";
|
|
my $value_whitelistsenders = "";
|
|
while (($parameter_whitelistsenders,$value_whitelistsenders) = each(%list_whitelistsenders)) {
|
|
if ($parameter_whitelistsenders eq "type") {next;}
|
|
|
|
if ($value_whitelistsenders eq "White") {
|
|
$wdb->get_prop_and_delete('whitelistsenders', "$parameter_whitelistsenders");
|
|
}
|
|
}
|
|
|
|
my $WhitelistSenders = $c->param("Whitelistsenders");
|
|
$WhitelistSenders =~ s/\r\n/,/g;
|
|
my @WhitelistSenders = sort(split /,/, $WhitelistSenders);
|
|
foreach $WhitelistSenders (@WhitelistSenders)
|
|
{
|
|
$wdb->set_prop('whitelistsenders', "$WhitelistSenders", 'White');
|
|
}
|
|
|
|
#-------------------------------
|
|
# spamassassin whitelist_from
|
|
#-------------------------------
|
|
my %list_wblglobal = $sdb->get('wbl.global')->props;
|
|
my $parameter_wblglobal = "";
|
|
my $value_wblglobal = "";
|
|
while (($parameter_wblglobal,$value_wblglobal) = each(%list_wblglobal)) {
|
|
if ($parameter_wblglobal eq "type") {next;}
|
|
|
|
if ($value_wblglobal eq "White") {
|
|
$sdb->get_prop_and_delete('wbl.global', "$parameter_wblglobal");
|
|
}
|
|
}
|
|
|
|
my $WhitelistFrom = $c->param("Whitelistfrom");
|
|
$WhitelistFrom =~ s/\r\n/,/g;
|
|
my @WhitelistFrom = sort(split /,/, $WhitelistFrom);
|
|
foreach $WhitelistFrom (@WhitelistFrom){
|
|
$sdb->set_prop('wbl.global', "$WhitelistFrom", 'White');
|
|
}
|
|
|
|
#Update email settings
|
|
unless ( system ("/sbin/e-smith/signal-event", "wbl-update") == 0 ) {
|
|
return 'WHITE: '. $c->l('wbl_ERROR_UPDATING');
|
|
}
|
|
|
|
return 'OK';
|
|
}
|
|
|
|
|
|
1;
|
|
|