diff options
Diffstat (limited to 'lib/Travelynx.pm')
-rwxr-xr-x | lib/Travelynx.pm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 1e7c965..01515e9 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -732,6 +732,88 @@ sub startup { } ); + $self->helper( + 'get_uid_by_name_and_mail' => sub { + my ( $self, $name, $email ) = @_; + + my $res = $self->pg->db->select( + 'users', + ['id'], + { + name => $name, + email => $email, + status => 1 + } + ); + + if ( my $user = $res->hash ) { + return $user->{id}; + } + return; + } + ); + + $self->helper( + 'mark_for_password_reset' => sub { + my ( $self, $db, $uid, $token ) = @_; + + my $res = $db->select( + 'pending_passwords', + 'count(*) as count', + { user_id => $uid } + ); + if ( $res->hash->{count} ) { + return 'in progress'; + } + + $db->insert( + 'pending_passwords', + { + user_id => $uid, + token => $token, + requested_at => + DateTime->now( time_zone => 'Europe/Berlin' ) + } + ); + + return undef; + } + ); + + $self->helper( + 'verify_password_token' => sub { + my ( $self, $uid, $token ) = @_; + + my $res = $self->pg->db->select( + 'pending_passwords', + 'count(*) as count', + { + user_id => $uid, + token => $token + } + ); + + if ( $res->hash->{count} ) { + return 1; + } + return; + } + ); + + $self->helper( + 'remove_password_token' => sub { + my ( $self, $uid, $token ) = @_; + + $self->pg->db->delete( + 'pending_passwords', + { + user_id => $uid, + token => $token + } + ); + } + ); + # This helper should only be called directly when also providing a user ID. # If you don't have one, use current_user() instead (get_user_data will # delegate to it anyways). @@ -1530,6 +1612,8 @@ sub startup { $r->get('/api/v0/:user_action/:token')->to('api#get_v0'); $r->get('/api/v1/:user_action/:token')->to('api#get_v1'); $r->get('/login')->to('account#login_form'); + $r->get('/recover')->to('account#request_password_reset'); + $r->get('/recover/:id/:token')->to('account#recover_password'); $r->get('/register')->to('account#registration_form'); $r->get('/reg/:id/:token')->to('account#verify'); $r->post('/action')->to('traveling#log_action'); @@ -1537,6 +1621,7 @@ sub startup { $r->post('/list_departures')->to('traveling#redirect_to_station'); $r->post('/login')->to('account#do_login'); $r->post('/register')->to('account#register'); + $r->post('/recover')->to('account#request_password_reset'); my $authed_r = $r->under( sub { |