Bump API to v1
This commit is contained in:
parent
906ec60ea2
commit
438319e63a
3 changed files with 131 additions and 13 deletions
|
@ -1469,6 +1469,7 @@ sub startup {
|
|||
$r->get('/impressum')->to('static#imprint');
|
||||
$r->get('/imprint')->to('static#imprint');
|
||||
$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('/register')->to('account#registration_form');
|
||||
$r->get('/reg/:id/:token')->to('account#verify');
|
||||
|
|
|
@ -66,7 +66,7 @@ sub get_v0 {
|
|||
) ? \1 : \0,
|
||||
station => {
|
||||
ds100 => $status->{arr_ds100} // $status->{dep_ds100},
|
||||
name => $status->{arr_ds100} // $status->{dep_ds100},
|
||||
name => $status->{arr_name} // $status->{dep_name},
|
||||
uic => $station_eva,
|
||||
longitude => $station_lon,
|
||||
latitude => $station_lat,
|
||||
|
@ -93,6 +93,113 @@ sub get_v0 {
|
|||
}
|
||||
}
|
||||
|
||||
sub get_v1 {
|
||||
my ($self) = @_;
|
||||
|
||||
my $api_action = $self->stash('user_action');
|
||||
my $api_token = $self->stash('token');
|
||||
if ( $api_action !~ qr{ ^ (?: status | history | action ) $ }x ) {
|
||||
$self->render(
|
||||
json => {
|
||||
error => 'Invalid action',
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( $api_token !~ qr{ ^ (?<id> \d+ ) - (?<token> .* ) $ }x ) {
|
||||
$self->render(
|
||||
json => {
|
||||
error => 'Malformed token',
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
my $uid = $+{id};
|
||||
$api_token = $+{token};
|
||||
my $token = $self->get_api_token($uid);
|
||||
if ( $api_token ne $token->{$api_action} ) {
|
||||
$self->render(
|
||||
json => {
|
||||
error => 'Invalid token',
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( $api_action eq 'status' ) {
|
||||
my $status = $self->get_user_status($uid);
|
||||
|
||||
my $ret = {
|
||||
deprecated => \0,
|
||||
checkedIn => (
|
||||
$status->{checked_in}
|
||||
or $status->{cancelled}
|
||||
) ? \1 : \0,
|
||||
fromStation => {
|
||||
ds100 => $status->{dep_ds100},
|
||||
name => $status->{dep_name},
|
||||
uic => undef,
|
||||
longitude => undef,
|
||||
latitude => undef,
|
||||
scheduledTime => $status->{sched_departure}->epoch || undef,
|
||||
realTime => $status->{real_departure}->epoch || undef,
|
||||
},
|
||||
toStation => {
|
||||
ds100 => $status->{arr_ds100},
|
||||
name => $status->{arr_name},
|
||||
uic => undef,
|
||||
longitude => undef,
|
||||
latitude => undef,
|
||||
scheduledTime => $status->{sched_arrival}->epoch || undef,
|
||||
realTime => $status->{real_arrival}->epoch || undef,
|
||||
},
|
||||
train => {
|
||||
type => $status->{train_type},
|
||||
line => $status->{train_line},
|
||||
no => $status->{train_no},
|
||||
id => $status->{train_id},
|
||||
},
|
||||
actionTime => $status->{timestamp}->epoch,
|
||||
};
|
||||
|
||||
if ( $status->{dep_ds100} ) {
|
||||
my @station_descriptions
|
||||
= Travel::Status::DE::IRIS::Stations::get_station(
|
||||
$status->{dep_ds100} );
|
||||
if ( @station_descriptions == 1 ) {
|
||||
(
|
||||
undef, undef,
|
||||
$ret->{fromStation}{uic},
|
||||
$ret->{fromStation}{longitude},
|
||||
$ret->{fromStation}{latitude}
|
||||
) = @{ $station_descriptions[0] };
|
||||
}
|
||||
}
|
||||
|
||||
if ( $status->{arr_ds100} ) {
|
||||
my @station_descriptions
|
||||
= Travel::Status::DE::IRIS::Stations::get_station(
|
||||
$status->{arr_ds100} );
|
||||
if ( @station_descriptions == 1 ) {
|
||||
(
|
||||
undef, undef,
|
||||
$ret->{toStation}{uic},
|
||||
$ret->{toStation}{longitude},
|
||||
$ret->{toStation}{latitude}
|
||||
) = @{ $station_descriptions[0] };
|
||||
}
|
||||
}
|
||||
|
||||
$self->render( json => $ret );
|
||||
}
|
||||
else {
|
||||
$self->render(
|
||||
json => {
|
||||
error => 'not implemented',
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
sub set_token {
|
||||
my ($self) = @_;
|
||||
if ( $self->validation->csrf_protect->has_error('csrf_token') ) {
|
||||
|
|
|
@ -144,7 +144,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
% my $api_root = $self->url_for('/api/v0')->to_abs->scheme('https');
|
||||
% my $api_root = $self->url_for('/api/v1')->to_abs->scheme('https');
|
||||
<h3>Status</h3>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
|
@ -162,22 +162,32 @@
|
|||
<p style="font-family: Monospace;">
|
||||
{<br/>
|
||||
"deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)<br/>
|
||||
"checked_in" : true / false,<br/>
|
||||
"station" : {<br/>
|
||||
"name" : "Essen Hbf", (Name der letzten Station)<br/>
|
||||
"ds100" : "EE", (DS100-Kürzel)<br/>
|
||||
"uic" : 8000098, (Internationale Bahnhofsnummer)<br/>
|
||||
"longitude" : 7.014793,<br/>
|
||||
"checkedIn" : true / false,<br/>
|
||||
"fromStation" : { (letzter Checkin)<br/>
|
||||
"name" : "Essen Hbf",<br/>
|
||||
"ds100" : "EE",<br/>
|
||||
"uic" : 8000098,<br/>
|
||||
"latitude" : 51.451355,<br/>
|
||||
"longitude" : 7.014793,<br/>
|
||||
"scheduledTime": 1556083680,<br/>
|
||||
"realTime": 1556083680,<br/>
|
||||
},<br/>
|
||||
"fromStation" : { (zugehöriger Checkout. Wenn noch nicht eingetragen, sind alle Felder null)<br/>
|
||||
"name" : "Essen Stadtwald",<br/>
|
||||
"ds100" : "EESA",<br/>
|
||||
"uic" : 8001896,<br/>
|
||||
"latitude" : 51.422853,<br/>
|
||||
"longitude" : 7.023296,<br/>
|
||||
"scheduledTime": 1556083980, (ggf. null)<br/>
|
||||
"realTime": 1556083980, (ggf. null)<br/>
|
||||
},<br/>
|
||||
"train" : {<br/>
|
||||
"type" : "ICE", (aktueller / letzter Zugtyp)<br/>
|
||||
"line" : null, (Linie als String, nicht immer numerisch, ggf. null)<br/>
|
||||
"no" : "1234", (Zugnummer als String)<br/>
|
||||
"type" : "S", (aktueller / letzter Zugtyp)<br/>
|
||||
"line" : "6", (Linie als String, nicht immer numerisch, ggf. null)<br/>
|
||||
"no" : "30634", (Zugnummer als String)<br/>
|
||||
"id" : "7512500863736016593", (IRIS-spezifische Zug-ID)<br/>
|
||||
},<br/>
|
||||
"actionTime" : 1234567, (UNIX-Timestamp des letzten Checkin/Checkout)<br/>
|
||||
"scheduledTime" : 1234567, (UNIX-Timestamp der zugehörigen Ankunft/Abfahrt gemäß Fahrplan. Ggf. 0)<br/>
|
||||
"realTime" : 1234567, (UNIX-Timestamp der zugehörigen Ankunft/Abfahrt laut Echtzeitdaten. Ggf. 0)<br/>
|
||||
}
|
||||
</p>
|
||||
<p>
|
||||
|
|
Loading…
Reference in a new issue