]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - html/cgi-bin/mail.cgi
Hardcode theme to ipfire
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / mail.cgi
CommitLineData
9c7b9020
AM
1#!/usr/bin/perl
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
d07286de 5# Copyright (C) 2007-2020 IPFire Team <info@ipfire.org> #
9c7b9020
AM
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
21
22use MIME::Lite;
23
24#enable only the following on debugging purpose
25#use warnings;
26#use CGI::Carp 'fatalsToBrowser';
27
28require '/var/ipfire/general-functions.pl';
29require "${General::swroot}/lang.pl";
30require "${General::swroot}/header.pl";
31
32#Initialize variables and hashes
33my $dmafile="${General::swroot}/dma/dma.conf";
34my $authfile="${General::swroot}/dma/auth.conf";
35my $mailfile="${General::swroot}/dma/mail.conf";
36my %dma=();
37my %auth=();
38my %mail=();
39my %mainsettings=();
40my %cgiparams=();
41my $errormessage='';
42
43#Read all parameters for site
44&Header::getcgihash(\%cgiparams);
45&General::readhash("${General::swroot}/main/settings", \%mainsettings);
8186b372 46&General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color);
9c7b9020
AM
47
48#Show Headers
49&Header::showhttpheaders();
50
51#Check configfiles
52if ( -f $dmafile){
53 open (FILE, "<", $dmafile) or die $!;
54 foreach my $line (<FILE>) {
55 $line =~ m/^([A-Z]+)\s+?(.*)?$/;
56 my $key = $1;
57 my $val = $2;
58 $dma{$key}=$val;
59 }
60}else{
61 open(FILE, ">$dmafile") or die $!;
62}
63close FILE;
64
65if (exists $dma{'AUTHPATH'}){
66 open (FILE, "<", $dma{'AUTHPATH'}) or die "$dma{'AUTHPATH'} nicht gefunden $! ";
67 my $authline;
68 foreach my $line (<FILE>) {
69 $authline = $line;
70 }
71 my @part1 = split(/\|/,$authline);
72 my @part2 = split(/\:/,$part1[1]);
73 $auth{'AUTHNAME'} = $part1[0];
74 $auth{'AUTHHOST'} = $part2[0];
75 $auth{'AUTHPASS'} = $part2[1];
76}
77
78if ( -f $mailfile){
79 &General::readhash($mailfile, \%mail);
80}
81
82#ACTIONS
83if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}"){ #SaveButton on configsite
0a340fbe
MT
84 # Check fields
85 $errormessage = &checkmailsettings();
86
87 if (!$errormessage) {
9c7b9020
AM
88 #clear hashes
89 %auth=();
90 %dma=();
91 %mail=();
92
93 #clear configfiles
94 open (TXT, ">$dmafile") or die("Could not open /var/ipfire/dma/dma.conf: $!\n");
2799b3d9
AM
95 open (TXT1, ">$authfile") or die("Could not open /var/ipfire/dma/auth.conf: $!\n");
96 open (TXT2, ">$mailfile") or die("Could not open /var/ipfire/dma/mail.conf: $!\n");
9c7b9020
AM
97 close TXT2;
98
99 #Fill hashes with actual values
100 $mail{'USEMAIL'} = $cgiparams{'USEMAIL'};
101 $mail{'SENDER'} = $cgiparams{'txt_mailsender'};
102 $mail{'RECIPIENT'} = $cgiparams{'txt_recipient'};
103
4bfec109
AM
104 if ($cgiparams{'txt_mailuser'} && $cgiparams{'txt_mailpass'}) {
105 $auth{'AUTHNAME'} = $cgiparams{'txt_mailuser'};
106 $auth{'AUTHPASS'} = $cgiparams{'txt_mailpass'};
107 $auth{'AUTHHOST'} = $cgiparams{'txt_mailserver'};
108 print TXT1 "$auth{'AUTHNAME'}|$auth{'AUTHHOST'}:$auth{'AUTHPASS'}\n";
109 }
9c7b9020
AM
110
111 $dma{'SMARTHOST'} = $cgiparams{'txt_mailserver'};
112 $dma{'PORT'} = $cgiparams{'txt_mailport'};
d07286de
PM
113 $dma{'STARTTLS'} = '' if ($cgiparams{'mail_tls'} eq 'explicit');
114 $dma{'SECURETRANSFER'} = '' if ($cgiparams{'mail_tls'} eq 'explicit' || $cgiparams{'mail_tls'} eq 'implicit');
9c7b9020
AM
115 $dma{'SPOOLDIR'} = "/var/spool/dma";
116 $dma{'FULLBOUNCE'} = '';
117 $dma{'MAILNAME'} = "$mainsettings{'HOSTNAME'}.$mainsettings{DOMAINNAME}";
118 $dma{'AUTHPATH'} = "$authfile" if exists $auth{'AUTHNAME'};
119
120 #Create new configfiles
121 &General::writehash("$mailfile", \%mail);
122 while ( ($k,$v) = each %dma ) {
123 print TXT "$k $v\n";
124 }
125 close TXT;
4bfec109 126 close TXT1;
9c7b9020
AM
127 close TXT2;
128
129 }else{
130 $cgiparams{'update'}='on';
131 &configsite;
132 }
133}
134if ($cgiparams{'ACTION'} eq "$Lang::tr{'email testmail'}"){ #Testmail button on configsite
135 &testmail;
136}
137
138#Show site
139&configsite;
140
141#FUNCTIONS
142sub configsite{
9c7b9020
AM
143 #If update set fieldvalues new
144 if($cgiparams{'update'} eq 'on'){
70defeb0
AM
145 $mail{'USEMAIL'} = 'on';
146 $mail{'SENDER'} = $cgiparams{'txt_mailsender'};
147 $mail{'RECIPIENT'} = $cgiparams{'txt_recipient'};
9c7b9020
AM
148 $dma{'SMARTHOST'} = $cgiparams{'txt_mailserver'};
149 $dma{'PORT'} = $cgiparams{'txt_mailport'};
70defeb0 150 $auth{'AUTHNAME'} = $cgiparams{'txt_mailuser'};
9c7b9020
AM
151 $auth{'AUTHHOST'} = $cgiparams{'txt_mailserver'};
152 $auth{'AUTHPASS'} = $cgiparams{'txt_mailpass'};
70defeb0 153 $dma{'STARTTLS'} = $cgiparams{'mail_tls'};
9c7b9020
AM
154 }
155 #find preselections
156 $checked{'usemail'}{$mail{'USEMAIL'}} = 'CHECKED';
d07286de
PM
157 $selected{'mail_tls'}{'explicit'} = 'selected' if exists $dma{'STARTTLS'};
158 $selected{'mail_tls'}{'implicit'} = 'selected' if (exists $dma{'SECURETRANSFER'}) and (not exists $dma{'STARTTLS'});
159 $selected{'mail_tls'}{'disabled'} = 'selected' if (not exists $dma{'SECURETRANSFER'}) and (not exists $dma{'STARTTLS'});
9c7b9020
AM
160
161 #Open site
162 &Header::openpage($Lang::tr{'email settings'}, 1, '');
163 &Header::openbigbox('100%', 'center');
164 &error;
165 &info;
166 &Header::openbox('100%', 'left', $Lang::tr{'email config'});
167
168 #### JAVA SCRIPT ####
169 print<<END;
170<script>
171 \$(document).ready(function() {
172 // Show/Hide elements when USEMAIL checkbox is checked.
173 if (\$("#MAIL").attr("checked")) {
174 \$(".MAILSRV").show();
175 } else {
176 \$(".MAILSRV").hide();
177 }
178
179 // Toggle MAIL elements when "USEMAIL" checkbox is clicked
180 \$("#MAIL").change(function() {
181 \$(".MAILSRV").toggle();
182 });
183 });
184</script>
185END
186 ##### JAVA SCRIPT END ####
187 my $col="style='background-color:$color{'color22'}'";
188 print<<END;
189 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
190 <table style='width:100%' border='0'>
191 <tr>
192 <th colspan='3'></th>
193 </tr>
194 <tr>
195 <td style='width:24em'>$Lang::tr{'email usemail'}</td>
196 <td><label><input type='checkbox' name='USEMAIL' id='MAIL' $checked{'usemail'}{'on'}></label></td>
197 <td></td>
198 </tr>
199 </table><br>
200
201 <div class="MAILSRV">
202 <table style='width:100%;'>
203 <tr>
afd6e193
AM
204 <td>$Lang::tr{'email mailsender'}<img src='/blob.gif' alt='*' /></td>
205 <td><input type='text' name='txt_mailsender' value='$mail{'SENDER'}' style='width:22em;'></td>
206 </tr>
207 <tr>
208 <td>$Lang::tr{'email mailrcpt'}<img src='/blob.gif' alt='*' /></td>
209 <td><input type='text' name='txt_recipient' value='$mail{'RECIPIENT'}' style='width:22em;'></td>
210 </tr>
211 <tr>
212 <td style='width:24em'>$Lang::tr{'email mailaddr'}<img src='/blob.gif' alt='*' /></td>
9c7b9020
AM
213 <td><input type='text' name='txt_mailserver' value='$dma{'SMARTHOST'}' style='width:22em;'></td>
214 </tr>
215 <tr>
afd6e193 216 <td>$Lang::tr{'email mailport'}<img src='/blob.gif' alt='*' /></td>
9c7b9020
AM
217 <td><input type='text' name='txt_mailport' value='$dma{'PORT'}' size='3'></td>
218 </tr>
219 <tr>
afd6e193 220 <td>$Lang::tr{'email mailuser'}</td>
9c7b9020
AM
221 <td><input type='text' name='txt_mailuser' value='$auth{'AUTHNAME'}' style='width:22em;'></td>
222 </tr>
223 <tr>
afd6e193 224 <td>$Lang::tr{'email mailpass'}</td>
9c7b9020
AM
225 <td><input type='password' name='txt_mailpass' value='$auth{'AUTHPASS'}' style='width:22em;' ></td>
226 </tr>
227 <tr>
228 <td>$Lang::tr{'email tls'}</td>
d07286de
PM
229 <td>
230 <select name='mail_tls'>
231 <option value='implicit' $selected{'mail_tls'}{'implicit'}>$Lang::tr{'email tls implicit'}</option>
232 <option value='explicit' $selected{'mail_tls'}{'explicit'}>$Lang::tr{'email tls explicit'}</option>
233 <option value='disabled' $selected{'mail_tls'}{'disabled'}>$Lang::tr{'disabled'}</option>
234 </select>
235 </td>
9c7b9020 236 </tr>
9c7b9020 237END
70defeb0 238 if (! -z $dmafile && $mail{'USEMAIL'} eq 'on' && !$errormessage){
9c7b9020
AM
239 print "<tr>";
240 print "<td></td>";
241 print "<td><input type='submit' name='ACTION' value='$Lang::tr{'email testmail'}'></td>";
242 print "</tr>";
243 }
244 print<<END;;
245 <tr>
246 <td colspan='2'>&nbsp;</td>
247 </tr>
248 </table>
249 </div>
250
251 <table style='width:100%;'>
252 <tr>
253 <td colspan='3' display:inline align='right'><input type='submit' name='ACTION' value='$Lang::tr{'save'}'></td>
254 </tr>
255 </table>
256 <br>
257 </form>
258END
259 &Header::closebox();
260 &Header::closebigbox();
261 &Header::closepage();
262 exit 0;
263}
264
265sub checkmailsettings {
266 #Check if mailserver is an ip address or a domain
267 if ($cgiparams{'txt_mailserver'} =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/){
268 if (! &General::validip($cgiparams{'txt_mailserver'})){
095bf494 269 $errormessage .= $Lang::tr{'email invalid mailip'} . "<br>";
9c7b9020
AM
270 }
271 }elsif(! &General::validfqdn($cgiparams{'txt_mailserver'})){
095bf494 272 $errormessage .= $Lang::tr{'email invalid mailfqdn'} . "<br>";
9c7b9020
AM
273 }
274 #Check valid mailserverport
275 if($cgiparams{'txt_mailport'} < 1 || $cgiparams{'txt_mailport'} > 65535){
095bf494 276 $errormessage .= $Lang::tr{'email invalid mailport'} . "<br>";
9c7b9020
AM
277 }
278 #Check valid sender
279 if(! $cgiparams{'txt_mailsender'}){
095bf494 280 $errormessage .= $Lang::tr{'email empty field'} . "<br>";
9c7b9020
AM
281 }else{
282 if (! &General::validemail($cgiparams{'txt_mailsender'})){
095bf494 283 $errormessage .= "$Lang::tr{'email invalid'} $Lang::tr{'email mailsender'}<br>";
9c7b9020
AM
284 }
285 }
286 return $errormessage;
287}
288
289sub testmail {
290 ### Create a new multipart message:
291 $msg = MIME::Lite->new(
292 From => $mail{'SENDER'},
293 To => $mail{'RECIPIENT'},
294 #Cc => 'some@other.com, some@more.com',
295 Subject => 'IPFire Testmail',
296 Type => 'multipart/mixed'
297 );
298
299 ### Add parts (each "attach" has same arguments as "new"):
300 $msg->attach(
301 Type => 'TEXT',
302 Data => "This is the IPFire test mail."
303 );
304
305 ### Add attachment for testing
306 #$msg->attach(
307 # Type => 'application/txt',
308 # Encoding => 'base64',
309 # Path => '/var/ipfire/dma/dma.conf',
310 # Filename => 'dma.conf',
311 # Disposition => 'attachment'
312 #);
313
314 $msg->send_by_sendmail;
315}
316
317sub info {
318 if ($infomessage) {
319 &Header::openbox('100%', 'left', $Lang::tr{'info messages'});
320 print "<class name='base'>$infomessage\n";
321 print "&nbsp;</class>\n";
322 &Header::closebox();
323 }
324}
325
326sub error {
327 if ($errormessage) {
328 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
329 print "<class name='base'>$errormessage\n";
330 print "&nbsp;</class>\n";
331 &Header::closebox();
332 }
333}