smeserver-wbl/root/usr/share/smanager/lib/SrvMngr/Controller/Wbl.pm

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;