Store traewelling refresh token in database
This commit is contained in:
parent
3ec9970f01
commit
8ec002f041
4 changed files with 41 additions and 18 deletions
|
@ -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...)
|
||||
|
|
|
@ -49,9 +49,10 @@ sub oauth {
|
|||
my $uid = $self->current_user->{id};
|
||||
my $token = $provider->{access_token};
|
||||
$self->traewelling->link(
|
||||
uid => $self->current_user->{id},
|
||||
token => $provider->{access_token},
|
||||
expires_in => $provider->{expires_in},
|
||||
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(
|
||||
sub {
|
||||
|
|
|
@ -40,17 +40,16 @@ 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},
|
||||
data => JSON->new->encode($data),
|
||||
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),
|
||||
};
|
||||
|
||||
$self->{pg}->db->insert(
|
||||
|
@ -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'
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
% }
|
||||
|
@ -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…
Reference in a new issue