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;