diff --git a/index.pl b/index.pl index 1af79a4..06318fa 100755 --- a/index.pl +++ b/index.pl @@ -1479,8 +1479,14 @@ post '/delete' => sub { $self->render( 'account', invalid => 'csrf' ); return; } + my $now = DateTime->now( time_zone => 'Europe/Berlin' )->epoch; + if ( $self->param('action') eq 'delete' ) { + if (not $self->authenticate($self->current_user->{name}, $self->param('password'))) { + $self->render( 'account', invalid => 'password' ); + return; + } $self->app->mark_for_deletion_query->execute( $now, $self->current_user->{id} ); } diff --git a/templates/account.html.ep b/templates/account.html.ep index 4917961..17b5e48 100644 --- a/templates/account.html.ep +++ b/templates/account.html.ep @@ -1,3 +1,30 @@ +% if (my $invalid = stash('invalid')) { +
Sind Cookies aktiviert? Ansonsten könnte es sich um einen + Fall von CSRF + handeln.
+ % } + % elsif ($invalid eq 'password') { + Ungültiges Passwort +Aus Sicherheitsgründen kann der Account nur nach Passworteingabe + gelöscht werden.
+ % } + % else { + Unbekannter Fehler +„<%= $invalid %>“
+ % } +