Unverified Commit 8ec002f0 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Store traewelling refresh token in database

parent 3ec9970f
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -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...)
+4 −3
Original line number Diff line number Diff line
@@ -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(
+13 −12
Original line number Diff line number Diff line
@@ -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),
	};

@@ -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;
+2 −3
Original line number Diff line number Diff line
@@ -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>