Loading index.pl +34 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ app->attr( ); } ); app->attr( mark_for_deletion_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ update users set deletion_requested = ? where id = ?; } ); } ); app->attr( checkin_query => sub { my ($self) = @_; Loading Loading @@ -614,6 +625,11 @@ helper 'get_user_data' => sub { time_zone => 'Europe/Berlin' ), deletion_requested => $row[7] ? DateTime->from_epoch( epoch => $row[7], time_zone => 'Europe/Berlin' ) : undef, }; } return undef; Loading Loading @@ -1243,6 +1259,24 @@ get '/export.json' => sub { ); }; post '/delete' => sub { my ($self) = @_; if ( $self->validation->csrf_protect->has_error('csrf_token') ) { $self->render( 'account', invalid => 'csrf' ); return; } my $now = DateTime->now( time_zone => 'Europe/Berlin' )->epoch; if ( $self->param('action') eq 'delete' ) { $self->app->mark_for_deletion_query->execute( $now, $self->current_user->{id} ); } else { $self->app->mark_for_deletion_query->execute( undef, $self->current_user->{id} ); } $self->redirect_to('account'); }; post '/logout' => sub { my ($self) = @_; if ( $self->validation->csrf_protect->has_error('csrf_token') ) { Loading templates/_deletion_note.html.ep 0 → 100644 +24 −0 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <div class="card red darken-4"> <div class="card-content white-text"> <span class="card-title">Account wird gelöscht</span> <p> Dein Account wird am <%= $timestamp->clone->add(days => 3)->strftime('%d.%m.%Y ab %H:%M') %> Uhr gelöscht, da er am <%= $timestamp->strftime('%d.%m.%Y um %H:%M') %> Uhr zum Löschen vorgemerkt wurde. </p> <p> Falls du dich umentschieden hast, kannst du den Löschauftrag hier zurücknehmen. %= form_for 'delete' => begin %= csrf_field <button class="btn-flat waves-effect waves-light white black-text" type="submit" name="action" value="undelete"> Account Nicht löschen </button> %= end </p> </div> </div> </div> </div> templates/account.html.ep +27 −9 Original line number Diff line number Diff line Loading @@ -32,15 +32,6 @@ <div class="col s1 m1 l3"> </div> </div> <div class="row"> <div class="col s1 m1 l3"> </div> <div class="col s10 m10 l6 center-align"> „Account löschen“ wird bald™ implementiert. </div> <div class="col s1 m1 l3"> </div> </div> <h1>Export</h1> Loading @@ -51,3 +42,30 @@ </ul> </div> </div> % if (not $acc->{deletion_requested}) { <h1>Account löschen</h1> <div class="row"> <div class="col s12"> <p> Der Account wird zunächst nur zur Löschung vorgemerkt. Wenn der Auftrag nach drei Tagen nicht zurückgenommen wird, wird der Account mit allen zugehörigen Reisedaten ohne weitere Rückfragen entfernt. </p> </div> </div> <div class="row"> <div class="col s1 m1 l3"> </div> <div class="col s10 m10 l6 center-align"> %= form_for 'delete' => begin %= csrf_field <button class="btn waves-effect waves-light red" type="submit" name="action" value="delete"> Account löschen </button> %= end </div> <div class="col s1 m1 l3"> </div> </div> % } templates/layouts/default.html.ep +4 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ </nav> <div class="container"> % my $acc = get_user_data(); % if ($acc and $acc->{deletion_requested}) { %= include '_deletion_note', timestamp => $acc->{deletion_requested} % } %= content </div> Loading Loading
index.pl +34 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ app->attr( ); } ); app->attr( mark_for_deletion_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ update users set deletion_requested = ? where id = ?; } ); } ); app->attr( checkin_query => sub { my ($self) = @_; Loading Loading @@ -614,6 +625,11 @@ helper 'get_user_data' => sub { time_zone => 'Europe/Berlin' ), deletion_requested => $row[7] ? DateTime->from_epoch( epoch => $row[7], time_zone => 'Europe/Berlin' ) : undef, }; } return undef; Loading Loading @@ -1243,6 +1259,24 @@ get '/export.json' => sub { ); }; post '/delete' => sub { my ($self) = @_; if ( $self->validation->csrf_protect->has_error('csrf_token') ) { $self->render( 'account', invalid => 'csrf' ); return; } my $now = DateTime->now( time_zone => 'Europe/Berlin' )->epoch; if ( $self->param('action') eq 'delete' ) { $self->app->mark_for_deletion_query->execute( $now, $self->current_user->{id} ); } else { $self->app->mark_for_deletion_query->execute( undef, $self->current_user->{id} ); } $self->redirect_to('account'); }; post '/logout' => sub { my ($self) = @_; if ( $self->validation->csrf_protect->has_error('csrf_token') ) { Loading
templates/_deletion_note.html.ep 0 → 100644 +24 −0 Original line number Diff line number Diff line <div class="row"> <div class="col s12"> <div class="card red darken-4"> <div class="card-content white-text"> <span class="card-title">Account wird gelöscht</span> <p> Dein Account wird am <%= $timestamp->clone->add(days => 3)->strftime('%d.%m.%Y ab %H:%M') %> Uhr gelöscht, da er am <%= $timestamp->strftime('%d.%m.%Y um %H:%M') %> Uhr zum Löschen vorgemerkt wurde. </p> <p> Falls du dich umentschieden hast, kannst du den Löschauftrag hier zurücknehmen. %= form_for 'delete' => begin %= csrf_field <button class="btn-flat waves-effect waves-light white black-text" type="submit" name="action" value="undelete"> Account Nicht löschen </button> %= end </p> </div> </div> </div> </div>
templates/account.html.ep +27 −9 Original line number Diff line number Diff line Loading @@ -32,15 +32,6 @@ <div class="col s1 m1 l3"> </div> </div> <div class="row"> <div class="col s1 m1 l3"> </div> <div class="col s10 m10 l6 center-align"> „Account löschen“ wird bald™ implementiert. </div> <div class="col s1 m1 l3"> </div> </div> <h1>Export</h1> Loading @@ -51,3 +42,30 @@ </ul> </div> </div> % if (not $acc->{deletion_requested}) { <h1>Account löschen</h1> <div class="row"> <div class="col s12"> <p> Der Account wird zunächst nur zur Löschung vorgemerkt. Wenn der Auftrag nach drei Tagen nicht zurückgenommen wird, wird der Account mit allen zugehörigen Reisedaten ohne weitere Rückfragen entfernt. </p> </div> </div> <div class="row"> <div class="col s1 m1 l3"> </div> <div class="col s10 m10 l6 center-align"> %= form_for 'delete' => begin %= csrf_field <button class="btn waves-effect waves-light red" type="submit" name="action" value="delete"> Account löschen </button> %= end </div> <div class="col s1 m1 l3"> </div> </div> % }
templates/layouts/default.html.ep +4 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ </nav> <div class="container"> % my $acc = get_user_data(); % if ($acc and $acc->{deletion_requested}) { %= include '_deletion_note', timestamp => $acc->{deletion_requested} % } %= content </div> Loading