+#!/usr/bin/perl
+#
+# This code is distributed under the terms of the GPL
+#
+# Copyright (c) 2005 Achim Weber
+#
+# $Id: trafficadm.cgi,v 1.21 2006/12/31 14:33:18 dotzball Exp $
+#
+
+use strict;
+
+# enable only the following on debugging purpose
+use warnings;
+use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+require "${General::swroot}/net-traffic/net-traffic-admin.pl";
+
+my %cgiparams;
+my $errormessage = '';
+my $infomessage = '';
+my $saveerror = 0;
+my @days = ( 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 );
+my @warnLevels = ( 50,60,70,80,90,100 );
+
+my @dummy = ($NETTRAFF::settingsfile, ${Header::colourred});
+undef(@dummy);
+
+&Header::showhttpheaders();
+
+# Init parameters
+$cgiparams{'MONTHLY_VOLUME_ON'} = 'off';
+$cgiparams{'MONTHLY_VOLUME'} = '';
+$cgiparams{'STARTDAY'} = '1';
+$cgiparams{'WARN_ON'} = 'off';
+$cgiparams{'WARN'} = '80';
+$cgiparams{'CALC_INTERVAL'} = '60';
+$cgiparams{'SHOW_AT_HOME'} = 'off';
+$cgiparams{'SEND_EMAIL_ON'} = 'off';
+$cgiparams{'EMAIL_TO'} = '';
+$cgiparams{'EMAIL_FROM'} = '';
+$cgiparams{'EMAIL_USR'} = '';
+$cgiparams{'EMAIL_PW'} = '';
+$cgiparams{'EMAIL_SERVER'} = '';
+$cgiparams{'VERSION_CHECK_ON'} = 'off';
+
+
+&Header::getcgihash(\%cgiparams);
+
+if ($cgiparams{'ACTION'} eq $Lang::tr{'save'})
+{
+ &validSave();
+
+ if ($errormessage) {
+ $saveerror = 1;
+ }
+ else { # no error, all right, save new settings
+ &General::writehash($NETTRAFF::settingsfile, \%cgiparams);
+ # calculate traffic
+ `/usr/local/bin/monitorTraff --force < /dev/null > /dev/null 2>&1 &`;
+ }
+} # end if ($cgiparams{'ACTION'} eq $Lang::tr{'save'})
+
+
+# if user want to save settings and get a errormessage, we don´t
+# overwrite users input
+unless ($saveerror) {
+
+ &NETTRAFF::readSettings();
+
+ $cgiparams{'MONTHLY_VOLUME_ON'} = $NETTRAFF::settings{'MONTHLY_VOLUME_ON'};
+ $cgiparams{'MONTHLY_VOLUME'} = $NETTRAFF::settings{'MONTHLY_VOLUME'};
+ $cgiparams{'STARTDAY'} = $NETTRAFF::settings{'STARTDAY'};
+ $cgiparams{'WARN_ON'} = $NETTRAFF::settings{'WARN_ON'};
+ $cgiparams{'WARN'} = $NETTRAFF::settings{'WARN'};
+ $cgiparams{'CALC_INTERVAL'} = $NETTRAFF::settings{'CALC_INTERVAL'};
+ $cgiparams{'SHOW_AT_HOME'} = $NETTRAFF::settings{'SHOW_AT_HOME'};
+ $cgiparams{'SEND_EMAIL_ON'} = $NETTRAFF::settings{'SEND_EMAIL_ON'};
+ $cgiparams{'EMAIL_TO'} = $NETTRAFF::settings{'EMAIL_TO'};
+ $cgiparams{'EMAIL_FROM'} = $NETTRAFF::settings{'EMAIL_FROM'};
+ $cgiparams{'EMAIL_USR'} = $NETTRAFF::settings{'EMAIL_USR'};
+ $cgiparams{'EMAIL_PW'} = $NETTRAFF::settings{'EMAIL_PW'};
+ $cgiparams{'EMAIL_SERVER'} = $NETTRAFF::settings{'EMAIL_SERVER'};
+ $cgiparams{'VERSION_CHECK_ON'} = $NETTRAFF::settings{'VERSION_CHECK_ON'};
+
+} # end unless ($saveerror)
+
+
+if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'})
+{
+ # send test email
+ my $return = `/usr/local/bin/monitorTraff --testEmail`;
+
+ if($return =~ /Email was sent successfully!/)
+ {
+ $infomessage = "$Lang::tr{'test email was sent'}<br/>";
+ }
+ else
+ {
+ $errormessage = "$Lang::tr{'test email could not be sent'}:<br/>";
+ $errormessage .= "$return <br />";
+ }
+
+
+} # end if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'})
+
+
+
+my %selected;
+$selected{'CALC_INTERVAL'}{'5'} = '';
+$selected{'CALC_INTERVAL'}{'10'} = '';
+$selected{'CALC_INTERVAL'}{'15'} = '';
+$selected{'CALC_INTERVAL'}{'30'} = '';
+$selected{'CALC_INTERVAL'}{'60'} = '';
+$selected{'CALC_INTERVAL'}{$cgiparams{'CALC_INTERVAL'}} = "selected='selected'";
+
+my %checked;
+$checked{'MONTHLY_VOLUME_ON'}{'off'} = '';
+$checked{'MONTHLY_VOLUME_ON'}{'on'} = '';
+$checked{'MONTHLY_VOLUME_ON'}{$cgiparams{'MONTHLY_VOLUME_ON'}} = "checked='checked'";
+
+$checked{'WARN_ON'}{'off'} = '';
+$checked{'WARN_ON'}{'on'} = '';
+$checked{'WARN_ON'}{$cgiparams{'WARN_ON'}} = "checked='checked'";
+
+$checked{'SHOW_AT_HOME'}{'off'} = '';
+$checked{'SHOW_AT_HOME'}{'on'} = '';
+$checked{'SHOW_AT_HOME'}{$cgiparams{'SHOW_AT_HOME'}} = "checked='checked'" ;
+
+$checked{'SEND_EMAIL_ON'}{'off'} = '';
+$checked{'SEND_EMAIL_ON'}{'on'} = '';
+$checked{'SEND_EMAIL_ON'}{$cgiparams{'SEND_EMAIL_ON'}} = "checked='checked'" ;
+
+$checked{'VERSION_CHECK_ON'}{'off'} = '';
+$checked{'VERSION_CHECK_ON'}{'on'} = '';
+$checked{'VERSION_CHECK_ON'}{$cgiparams{'VERSION_CHECK_ON'}} = "checked='checked'" ;
+
+
+my $btnTestmailDisabled = "";
+$btnTestmailDisabled = "disabled='disabled'" if($cgiparams{'SEND_EMAIL_ON'} ne 'on');
+
+&Header::openpage($Lang::tr{'traffic monitor'}, 1, '');
+&Header::openbigbox('100%', 'left');
+
+if ($errormessage) {
+ &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+ print "<class name='base'><font color='${Header::colourred}'>$errormessage\n</font>";
+ print " </class>\n";
+ &Header::closebox();
+}
+
+if($infomessage) {
+ &Header::openbox('100%', 'left', "$Lang::tr{'traffic info messages'}:");
+ print "<class name='base'>$infomessage\n";
+ print " </class>\n";
+ &Header::closebox();
+}
+
+&Header::openbox('100%', 'left', "$Lang::tr{'net-traffic configuration'}:");
+
+print <<END;
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <table width='100%'>
+ <tr>
+ <td align='left' class='base' width='1%'>
+ <input type="checkbox" name="SHOW_AT_HOME" $checked{'SHOW_AT_HOME'}{'on'} />
+ </td>
+ <td align='left' class='base' nowrap='nowrap' colspan="3">
+ $Lang::tr{'display traffic at home'}
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base'>
+ <input type="checkbox" name="MONTHLY_VOLUME_ON" $checked{'MONTHLY_VOLUME_ON'}{'on'} />
+ </td>
+ <td align='left' class='base' nowrap='nowrap' colspan="2">
+ $Lang::tr{'monthly volume'} (MByte):
+ </td>
+ <td align='left' class='base' >
+ <input type='text' name='MONTHLY_VOLUME' value='$cgiparams{'MONTHLY_VOLUME'}' size='20' maxlength='17' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"></td>
+ <td align='left' class='base' nowrap='nowrap' >
+ $Lang::tr{'monthly volume start day'}:
+ </td>
+ <td align='left' class='base' >
+ <select name='STARTDAY'>
+END
+
+foreach my $day (@days)
+{
+ print " <option ";
+ if ($day == $cgiparams{'STARTDAY'}) {
+ print 'selected=\'selected\' '; }
+ print "value='$day'>$day</option>\n";
+}
+print <<END;
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' width='1%'></td>
+ <td align='left' class='base' width='1%'>
+ <input type="checkbox" name="WARN_ON" $checked{'WARN_ON'}{'on'} />
+ </td>
+ <td align='left' class='base' width='20%' nowrap='nowrap'>
+ $Lang::tr{'warn when traffic reaches'}:
+ </td>
+ <td align='left' class='base' width='78%'>
+ <select name='WARN'>
+END
+
+foreach my $level (@warnLevels)
+{
+ print " <option ";
+ if ($level == $cgiparams{'WARN'}) {
+ print 'selected=\'selected\' '; }
+ print "value='$level'>$level</option>\n";
+}
+print <<END;
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"></td>
+ <td align='left' class='base' nowrap='nowrap' >
+ $Lang::tr{'calc traffic all x minutes'}:
+ </td>
+ <td align='left' class='base' >
+ <select name='CALC_INTERVAL'>
+ <option value='5' $selected{'CALC_INTERVAL'}{'5'} > 5</option>
+ <option value='10' $selected{'CALC_INTERVAL'}{'10'}>10</option>
+ <option value='15' $selected{'CALC_INTERVAL'}{'15'}>15</option>
+ <option value='30' $selected{'CALC_INTERVAL'}{'30'}>30</option>
+ <option value='60' $selected{'CALC_INTERVAL'}{'60'}>60</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base'> </td>
+ <td align='left' class='base'>
+ <input type="checkbox" name="SEND_EMAIL_ON" $checked{'SEND_EMAIL_ON'}{'on'} />
+ </td>
+ <td align='left' class='base' colspan="2" nowrap='nowrap' >
+ $Lang::tr{'send email notification'}:
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' nowrap='nowrap'>
+ $Lang::tr{'to email adr'}:
+ </td>
+ <td align='left' class='base' >
+ <input type='text' name='EMAIL_TO' value='$cgiparams{'EMAIL_TO'}' size='25' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' nowrap='nowrap'>
+ $Lang::tr{'from email adr'}:
+ </td>
+ <td align='left' class='base' >
+ <input type='text' name='EMAIL_FROM' value='$cgiparams{'EMAIL_FROM'}' size='25' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' nowrap='nowrap'>
+ $Lang::tr{'from email user'}:
+ </td>
+ <td align='left' class='base' >
+ <input type='text' name='EMAIL_USR' value='$cgiparams{'EMAIL_USR'}' size='25' />
+ <img src='/blob.gif' alt='*' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' nowrap='nowrap'>
+ $Lang::tr{'from email pw'}:
+ </td>
+ <td align='left' class='base' >
+ <input type='password' name='EMAIL_PW' value='$cgiparams{'EMAIL_PW'}' size='25' />
+ <img src='/blob.gif' alt='*' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' nowrap='nowrap'>
+ $Lang::tr{'from email server'}:
+ </td>
+ <td align='left' class='base' >
+ <input type='text' name='EMAIL_SERVER' value='$cgiparams{'EMAIL_SERVER'}' size='25' />
+ </td>
+ </tr>
+ <tr>
+ <td align='left' class='base' colspan="2"> </td>
+ <td align='left' class='base' colspan="2">
+ <input type='submit' name='ACTION' value='$Lang::tr{'send test mail'}' $btnTestmailDisabled />
+ </td>
+ </tr>
+ </table>
+ <hr />
+ <table width='100%'>
+ <tr>
+ <td align='left' class='base' nowrap='nowrap' width='2%'>
+ <img src='/blob.gif' alt ='*' align='top' />
+ <font class='base'>$Lang::tr{'this field may be blank'}</font>
+ </td>
+ <td align='center' class='base' width='48%'>
+ <input type='submit' name='ACTION' value='$Lang::tr{'save'}' />
+END
+
+ # if user input cause an error
+ # and user want a reset, we re-read settings from settingsfile
+ if ($errormessage ne '') {
+ print "<input type='submit' name='ACTION' value='$Lang::tr{'reset'}' />";
+ }
+ else {
+ print "<input type='reset' name='ACTION' value='$Lang::tr{'reset'}' />";
+ }
+
+print <<END;
+ </td>
+ <td align='left' class='base' nowrap='nowrap' width='50%'> </td>
+ </tr>
+ </table>
+ </form>
+ <hr />
+ <table width='100%'>
+ <tr>
+ <td align='left' class='base' width='2%'>
+
+ </td>
+ <td align='left' class='base' width='98%'>
+ <form method='post' action='/cgi-bin/traffic.cgi'>
+ <input type='submit' name='ACTION' value='$Lang::tr{'traffic back'}' />
+ </form>
+ </td>
+ </tr>
+ </table>
+END
+
+&Header::closebox();
+&Header::closebigbox();
+&Header::closepage();
+
+
+sub validSave
+{
+ if ($cgiparams{'SHOW_AT_HOME'} ne 'on' ) {
+ $cgiparams{'SHOW_AT_HOME'} = 'off';
+ }
+
+ if ($cgiparams{'MONTHLY_VOLUME_ON'} ne 'on' ) {
+ $cgiparams{'MONTHLY_VOLUME_ON'} = 'off';
+ }
+
+ if($cgiparams{'MONTHLY_VOLUME_ON'} eq 'on')
+ {
+ if($cgiparams{'MONTHLY_VOLUME'} !~ /^\d+$/ || $cgiparams{'MONTHLY_VOLUME'} < 1) {
+ $errormessage .= "$Lang::tr{'monthly traffic bad'}<br/>";
+ }
+
+ if($cgiparams{'STARTDAY'} < 1 || 31 < $cgiparams{'STARTDAY'}) {
+ $errormessage .= "$Lang::tr{'monthly start day bad'}<br/>";
+ }
+
+ if ($cgiparams{'WARN_ON'} ne 'on' ) {
+ $cgiparams{'WARN_ON'} = 'off';
+ }
+
+ if($cgiparams{'WARN_ON'} eq 'on' && $cgiparams{'WARN'} !~ /^\d+$/) {
+ $errormessage .= "$Lang::tr{'traffic warn level bad'}<br/>";
+ }
+
+ if($cgiparams{'CALC_INTERVAL'} < 5 || 60 < $cgiparams{'CALC_INTERVAL'}) {
+ $errormessage .= "$Lang::tr{'traffic calc time bad'}<br/>";
+ }
+
+ if ($cgiparams{'SEND_EMAIL_ON'} ne 'on' ) {
+ $cgiparams{'SEND_EMAIL_ON'} = 'off';
+ }
+
+ if($cgiparams{'SEND_EMAIL_ON'} eq 'on' )
+ {
+ if($cgiparams{'EMAIL_TO'} eq '' || (! &General::validemail($cgiparams{'EMAIL_TO'})) ) {
+ $errormessage .= "$Lang::tr{'to warn email bad'}<br/>";
+ }
+
+ if($cgiparams{'EMAIL_FROM'} eq '' || (! &General::validemail($cgiparams{'EMAIL_FROM'}))) {
+ $errormessage .= "$Lang::tr{'from warn email bad'}<br/>";
+ }
+
+ if($cgiparams{'EMAIL_SERVER'} eq '') {
+ $errormessage .= "$Lang::tr{'email server can not be empty'}<br/>";
+ }
+ }
+ } # monthly volumne == on
+
+ if ($cgiparams{'VERSION_CHECK_ON'} ne 'on' ) {
+ $cgiparams{'VERSION_CHECK_ON'} = 'off';
+ }
+}