#!/usr/bin/perl # # Hacky script to manage temporary throwaway email addresses. # # Ian Chard # use strict; use warnings; use CGI qw/:all/; use DBI; ### Tweakables my $DB_DSN='DBI:Pg:database=tempaddress;host=localhost'; my $DBUSER='tempaddress'; my $DBPASS='tempaddress'; ### Globals my $dbh; ### Error reporting sub error { print center(h1(font({-color=>"red"}, $_[0]))); print end_html; exit; } sub database_error { error $_[0]; } ### PROGRAM ENTRY POINT ### print header(-expires=>'now'); print start_html(-lang=>'en_GB', -title=>'tempaddress administration'); $dbh=DBI->connect($DB_DSN, $DBUSER, $DBPASS, {'HandleError'=>\&database_error}); print center(h1(a({-href=>'?'}, 'tempaddress administration'))); print p, hr, p; if(param()) { if(param('action')) { my @line; if(param('action') eq 'delete') { $dbh->do('delete from addresses where username=\''.param('username').'\''); } else { error "unknown action $line[0]"; } } if(param('add')) { error 'Username cannot be blank' if(!param('username')); error 'No white space allowed in username' if(param('username')=~/\s/); error 'No special characters allowed in username' if(param('username')=~/[@<>\[\]%\(\)!{}'"~]/); $dbh->do('insert into addresses (username, local_user, description) values (\''.param('username').'\', \''.param('local_user').'\', \''.param('description').'\')'); } } my $light=0; my $local_users=$dbh->selectall_arrayref('select local_user from local_users order by local_user'); my $addresses=$dbh->selectall_arrayref('select username, local_user, create_time, expires, last_used, description from addresses order by last_used'); my @table=thead(Tr({-bgcolor=>'yellow'}, td(strong('Address')), td(strong('Destination')), td(strong('Created')), td(strong('Expires')), td(strong('Last seen')), td(strong('Description')), td(strong('Actions')))); foreach my $i (@$addresses) { push @table, Tr({-bgcolor=>$light? '#D3D3D3' : '#A9A9A9'}, td(@$i[0]), td(@$i[1]), td(@$i[2]), td(@$i[3]), td(@$i[4]), td(escapeHTML(@$i[5])), td(a({-href=>'?action=delete&username='.@$i[0]}, 'Delete'))); $light=!$light; } push @table, Tr({-bgcolor=>$light? '#D3D3D3' : '#A9A9A9'}, td(textfield(-name=>'username', -size=>8, -maxlength=>32)), td(popup_menu(-name=>'local_user', -values=>@$local_users)), td(''), td(''), td(''), td(textfield(-name=>'description', -size=>32)), td(submit(-name=>'add'))); print start_form(-method=>'POST'); print center(table({-border=>1}, @table)); print end_form; print end_html;