index.cgi
changeset 4 857a7dcea41c
parent 3 17ddf9a1e376
child 6 641140d445ca
equal deleted inserted replaced
3:17ddf9a1e376 4:857a7dcea41c
    23 
    23 
    24 delete @ENV{grep /PATH$/ => keys %ENV};
    24 delete @ENV{grep /PATH$/ => keys %ENV};
    25 $ENV{PATH} = "/usr/bin:/usr/sbin:/bin:/sbin";
    25 $ENV{PATH} = "/usr/bin:/usr/sbin:/bin:/sbin";
    26 
    26 
    27 my $DSN = "DBI:SQLite:var/db.sqlite3";
    27 my $DSN = "DBI:SQLite:var/db.sqlite3";
    28 my $SECRET = slurp "./secret"; chomp($SECRET);
    28 my $SECRET = slurp "conf/secret"; chomp($SECRET);
       
    29 my $SELF = slurp "conf/self";     chomp($SELF);
    29 my $EXPIRATION = 60;		    # the link is valid for XX minutes only
    30 my $EXPIRATION = 60;		    # the link is valid for XX minutes only
    30 my $SUBJECT = "Retter packen";	    # ASCII only! *used for mail subject*
    31 my $SUBJECT = "Retter packen";	    # ASCII only! *used for mail subject*
    31 my %FIELDS = (
    32 my %FIELDS = (
    32     MAN => [qw[givenname surname mail]],
    33     MAN => [qw[givenname surname mail]],
    33     OPT => [qw[tel]]
    34     OPT => [qw[tel]]
    77 		sendmail(To => scalar(param("mail")),
    78 		sendmail(To => scalar(param("mail")),
    78 		         From => "hs+retter\@schlittermann.de",
    79 		         From => "hs+retter\@schlittermann.de",
    79 			 Sender => "hs\@schlittermann.de",
    80 			 Sender => "hs\@schlittermann.de",
    80 			 Subject => "[$SUBJECT] Link zur Online-Anmeldung",
    81 			 Subject => "[$SUBJECT] Link zur Online-Anmeldung",
    81 			 Message => "Bitte benutze den folgenden Link, um zum Anmeldeformular zu gelangen:\n"
    82 			 Message => "Bitte benutze den folgenden Link, um zum Anmeldeformular zu gelangen:\n"
    82 			    . url(-query => 0) . "/$xxx.tmp\n"
    83 			    . "$SELF/$xxx.tmp\n"
    83 			    . "\n-- \nHeiko Schlittermann\n");
    84 			    . "\n-- \nHeiko Schlittermann\n");
    84 		    
    85 		    
    85 		$sent = param("mail");
    86 		$sent = param("mail");
    86 	    }
    87 	    }
    87 	}
    88 	}
   107 	    $time =~ /^\d+$/ or die "FORMAT ERROR";
   108 	    $time =~ /^\d+$/ or die "FORMAT ERROR";
   108 	    time() - $time < (60 * $EXPIRATION) or die "EXPIRED";
   109 	    time() - $time < (60 * $EXPIRATION) or die "EXPIRED";
   109 	};
   110 	};
   110 	if ($@) {
   111 	if ($@) {
   111 	    $tt->process("denied.tpl", {
   112 	    $tt->process("denied.tpl", {
   112 		url => url(-path => 0),
   113 		url => $SELF,
   113 	    }) or die $tt->error();
   114 	    }) or die $tt->error();
   114 	    exit 0;
   115 	    exit 0;
   115 	}
   116 	}
   116     }
   117     }
   117 
   118 
   174 		     From => "hs\@schlittermann.de",
   175 		     From => "hs\@schlittermann.de",
   175 		     "Content-Type" => "text/plain; charset=\"UTF-8\"",
   176 		     "Content-Type" => "text/plain; charset=\"UTF-8\"",
   176 		     Subject => "[$SUBJECT] Bitte die Anmeldung bestaetigen.",
   177 		     Subject => "[$SUBJECT] Bitte die Anmeldung bestaetigen.",
   177 		     Message => <<_EOF);
   178 		     Message => <<_EOF);
   178 
   179 
   179 Bitte bestätige Deine Anmeldung. Dazu mußt Du folgenden Link in Deinem
   180 Bitte bestaetige Deine Anmeldung. Dazu mußt Du folgenden Link in Deinem
   180 Browser öffnen:
   181 Browser oeffnen:
   181 
   182 
   182 @{[url(-path_info => 0, -query => 0)]}/$r{uuid}.user?confirm=yes
   183 $SELF/$r{uuid}.user?confirm=yes
   183 
   184 
   184 Wenn alles nur ein Irrtum war, dann kannst Du Deine Daten wieder
   185 Wenn alles nur ein Irrtum war, dann kannst Du Deine Daten wieder
   185 AUSTRAGEN und wir vergessen Deine Anmeldung. Hier ist der Link zum
   186 AUSTRAGEN und wir vergessen Deine Anmeldung. Hier ist der Link zum
   186 AUSTRAGEN:
   187 AUSTRAGEN:
   187 
   188 
   188 @{[url(-path_info => 0, -query => 0)]}/$r{uuid}.user?confirm=no
   189 $SELF/$r{uuid}.user?confirm=no
   189 
   190 
   190 _EOF
   191 _EOF
   191 	    $tt->process("ack.tpl", {
   192 	    $tt->process("form.ack.tpl", {
   192 		value => \%value,
   193 		value => \%value,
   193 		timestamp => $r{timestamp},
   194 		timestamp => $r{timestamp},
   194 		uuid => $r{uuid},
   195 		uuid => $r{uuid},
   195 	    }) or die $tt->error();
   196 	    }) or die $tt->error();
   196 	    exit 0;
   197 	    exit 0;
   211 }
   212 }
   212 
   213 
   213 sub insert(\%) {
   214 sub insert(\%) {
   214     my %value = %{$_[0]};
   215     my %value = %{$_[0]};
   215     my $uuid = sha1_hex($SECRET . 
   216     my $uuid = sha1_hex($SECRET . 
   216 	join "\0" => @value{@FIELDS{MAN}});
   217 	join "\0" => @value{@{$FIELDS{MAN}}});
   217 
   218 
   218     $DBH->begin_work;
   219     $DBH->begin_work;
   219 	my $sth;
   220 	my $sth;
   220 	$sth = $DBH->prepare("SELECT timestamp FROM db WHERE uuid = ?");
   221 	$sth = $DBH->prepare("SELECT timestamp FROM db WHERE uuid = ?");
   221 	$sth->execute($uuid);
   222 	$sth->execute($uuid);