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); |