Loading lib/Travelynx/Command/database.pm +22 −0 Original line number Diff line number Diff line Loading @@ -1881,6 +1881,28 @@ my @migrations = ( } ); }, # v47 -> v48 # Store Traewelling refresh tokens; store expiry as explicit column. sub { my ($db) = @_; $db->query( qq{ alter table traewelling add column refresh_token text, add column expiry timestamptz; drop view traewelling_str; create view traewelling_str as select user_id, push_sync, pull_sync, errored, token, refresh_token, data, extract(epoch from latest_run) as latest_run_ts, extract(epoch from expiry) as expiry_ts from traewelling ; update schema_version set version = 48; } ); }, ); # TODO add 'hafas' column to in_transit (and maybe journeys? undo/redo needs something to work with...) Loading lib/Travelynx/Controller/Traewelling.pm +4 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ sub oauth { $self->traewelling->link( uid => $self->current_user->{id}, token => $provider->{access_token}, refresh_token => $provider->{refresh_token}, expires_in => $provider->{expires_in}, ); return $self->traewelling_api->get_user_p( $uid, $token )->then( Loading lib/Travelynx/Model/Traewelling.pm +13 −12 Original line number Diff line number Diff line Loading @@ -40,16 +40,15 @@ sub link { my $log = [ [ $self->now->epoch, "Erfolgreich mittels OAuth2 verbunden" ] ]; my $data = { log => $log, expires => $self->now->epoch + $opt{expires_in}, }; my $data = { log => $log }; my $user_entry = { user_id => $opt{uid}, push_sync => 0, pull_sync => 0, token => $opt{token}, refresh_token => $opt{refresh_token}, expiry => epoch_to_dt( $self->now->epoch + $opt{expires_in} ), data => JSON->new->encode($data), }; Loading @@ -58,7 +57,7 @@ sub link { $user_entry, { on_conflict => \ '(user_id) do update set token = EXCLUDED.token, push_sync = false, pull_sync = false, data = null, errored = false, latest_run = null' '(user_id) do update set token = EXCLUDED.token, refresh_token = EXCLUDED.refresh_token, expiry = EXCLUDED.expiry, push_sync = false, pull_sync = false, data = null, errored = false, latest_run = null' } ); Loading Loading @@ -106,9 +105,11 @@ sub get { for my $log_entry ( @{ $res_h->{data}{log} // [] } ) { $log_entry->[0] = epoch_to_dt( $log_entry->[0] ); } $res_h->{expires_on} = epoch_to_dt( $res_h->{data}{expires} ); $res_h->{expires_on} = epoch_to_dt( $res_h->{expiry_ts} // $res_h->{data}{expires} ); my $expires_in = ( $res_h->{data}{expires} // 0 ) - $self->now->epoch; my $expires_in = ( $res_h->{expiry_ts} // $res_h->{data}{expires} // 0 ) - $self->now->epoch; if ( $expires_in < 0 ) { $res_h->{expired} = 1; Loading templates/traewelling.html.ep +2 −3 Original line number Diff line number Diff line Loading @@ -12,8 +12,7 @@ <div class="card-content white-text"> <span class="card-title">Träwelling verknüpft</span> % my $user = $traewelling->{data}{user_name} // '???'; <p>Dein travelynx-Account hat nun ein Jahr lang Zugriff auf den Träwelling-Account <b>@<%= $user %></b>.</p> <p>Dein travelynx-Account ist nun mit dem Träwelling-Account <b>@<%= $user %></b> verbunden.</p> </div> </div> % } Loading Loading @@ -136,7 +135,7 @@ % else { %= $traewelling->{email} % } verknüpft. Der Token läuft <%= $traewelling->{expires_on}->strftime('am %d.%m.%Y um %H:%M Uhr') %> ab. verknüpft. Der aktuelle Token läuft <%= $traewelling->{expires_on}->strftime('am %d.%m.%Y um %H:%M Uhr') %> ab. </p> </div> </div> Loading Loading
lib/Travelynx/Command/database.pm +22 −0 Original line number Diff line number Diff line Loading @@ -1881,6 +1881,28 @@ my @migrations = ( } ); }, # v47 -> v48 # Store Traewelling refresh tokens; store expiry as explicit column. sub { my ($db) = @_; $db->query( qq{ alter table traewelling add column refresh_token text, add column expiry timestamptz; drop view traewelling_str; create view traewelling_str as select user_id, push_sync, pull_sync, errored, token, refresh_token, data, extract(epoch from latest_run) as latest_run_ts, extract(epoch from expiry) as expiry_ts from traewelling ; update schema_version set version = 48; } ); }, ); # TODO add 'hafas' column to in_transit (and maybe journeys? undo/redo needs something to work with...) Loading
lib/Travelynx/Controller/Traewelling.pm +4 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ sub oauth { $self->traewelling->link( uid => $self->current_user->{id}, token => $provider->{access_token}, refresh_token => $provider->{refresh_token}, expires_in => $provider->{expires_in}, ); return $self->traewelling_api->get_user_p( $uid, $token )->then( Loading
lib/Travelynx/Model/Traewelling.pm +13 −12 Original line number Diff line number Diff line Loading @@ -40,16 +40,15 @@ sub link { my $log = [ [ $self->now->epoch, "Erfolgreich mittels OAuth2 verbunden" ] ]; my $data = { log => $log, expires => $self->now->epoch + $opt{expires_in}, }; my $data = { log => $log }; my $user_entry = { user_id => $opt{uid}, push_sync => 0, pull_sync => 0, token => $opt{token}, refresh_token => $opt{refresh_token}, expiry => epoch_to_dt( $self->now->epoch + $opt{expires_in} ), data => JSON->new->encode($data), }; Loading @@ -58,7 +57,7 @@ sub link { $user_entry, { on_conflict => \ '(user_id) do update set token = EXCLUDED.token, push_sync = false, pull_sync = false, data = null, errored = false, latest_run = null' '(user_id) do update set token = EXCLUDED.token, refresh_token = EXCLUDED.refresh_token, expiry = EXCLUDED.expiry, push_sync = false, pull_sync = false, data = null, errored = false, latest_run = null' } ); Loading Loading @@ -106,9 +105,11 @@ sub get { for my $log_entry ( @{ $res_h->{data}{log} // [] } ) { $log_entry->[0] = epoch_to_dt( $log_entry->[0] ); } $res_h->{expires_on} = epoch_to_dt( $res_h->{data}{expires} ); $res_h->{expires_on} = epoch_to_dt( $res_h->{expiry_ts} // $res_h->{data}{expires} ); my $expires_in = ( $res_h->{data}{expires} // 0 ) - $self->now->epoch; my $expires_in = ( $res_h->{expiry_ts} // $res_h->{data}{expires} // 0 ) - $self->now->epoch; if ( $expires_in < 0 ) { $res_h->{expired} = 1; Loading
templates/traewelling.html.ep +2 −3 Original line number Diff line number Diff line Loading @@ -12,8 +12,7 @@ <div class="card-content white-text"> <span class="card-title">Träwelling verknüpft</span> % my $user = $traewelling->{data}{user_name} // '???'; <p>Dein travelynx-Account hat nun ein Jahr lang Zugriff auf den Träwelling-Account <b>@<%= $user %></b>.</p> <p>Dein travelynx-Account ist nun mit dem Träwelling-Account <b>@<%= $user %></b> verbunden.</p> </div> </div> % } Loading Loading @@ -136,7 +135,7 @@ % else { %= $traewelling->{email} % } verknüpft. Der Token läuft <%= $traewelling->{expires_on}->strftime('am %d.%m.%Y um %H:%M Uhr') %> ab. verknüpft. Der aktuelle Token läuft <%= $traewelling->{expires_on}->strftime('am %d.%m.%Y um %H:%M Uhr') %> ab. </p> </div> </div> Loading