summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-10-30 10:02:58 +0200
committerDaniel Friesel <derf@finalrewind.org>2021-10-30 10:02:58 +0200
commited0054fa50da9e4a3e08ef069b8b5bbc9709934f (patch)
tree26a60ee1ffb84c60f275ff22f651bb9b30151c0a
parent2695442199d4db66bc70170cfc1aba894ddba545 (diff)
Allow usage of custom hafas-rest-api instances
-rw-r--r--examples/travelynx.conf6
-rwxr-xr-xlib/Travelynx.pm3
-rw-r--r--lib/Travelynx/Helper/HAFAS.pm15
3 files changed, 18 insertions, 6 deletions
diff --git a/examples/travelynx.conf b/examples/travelynx.conf
index 7f15d12..0499796 100644
--- a/examples/travelynx.conf
+++ b/examples/travelynx.conf
@@ -5,6 +5,12 @@
# 'localhost'.
{
+ # travelynx relies on several backend projects. You may override the
+ # defaults to use other (e.g. self-hosted) instances.
+ backend => {
+ hafas_rest_api => 'https://v5.db.transport.rest',
+ },
+
# Cache directories for schedule and realtime data. Mandatory. The parent
# directory ('/var/cache/travelynx' in this case) must already exist.
cache => {
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 91de1c6..d7f9128 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -93,6 +93,8 @@ sub startup {
$self->secrets( $self->config->{secrets} );
}
+ $self->config->{backend}{hafas_rest_api} //= 'https://v5.db.transport.rest';
+
chomp $self->config->{version};
$self->plugin(
@@ -279,6 +281,7 @@ sub startup {
my ($self) = @_;
state $hafas = Travelynx::Helper::HAFAS->new(
log => $self->app->log,
+ hafas_rest_api => $self->app->config->{backend}{hafas_rest_api},
main_cache => $self->app->cache_iris_main,
realtime_cache => $self->app->cache_iris_rt,
root_url => $self->url_for('/')->to_abs,
diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm
index 6fd5c71..c4bc66a 100644
--- a/lib/Travelynx/Helper/HAFAS.pm
+++ b/lib/Travelynx/Helper/HAFAS.pm
@@ -30,9 +30,9 @@ sub new {
sub get_polyline_p {
my ( $self, $train, $trip_id ) = @_;
- my $line = $train->line // 0;
- my $url
- = "https://v5.db.transport.rest/trips/${trip_id}?lineName=${line}&polyline=true";
+ my $line = $train->line // 0;
+ my $backend = $self->{hafas_rest_api};
+ my $url = "${backend}/trips/${trip_id}?lineName=${line}&polyline=true";
my $cache = $self->{main_cache};
my $promise = Mojo::Promise->new;
my $version = $self->{version};
@@ -41,6 +41,9 @@ sub get_polyline_p {
return $promise->resolve($content);
}
+ my $log_url = $url;
+ $log_url =~ s{://\K[^:]+:[^@]+\@}{***@};
+
$self->{user_agent}->request_timeout(5)->get_p( $url => $self->{header} )
->then(
sub {
@@ -48,7 +51,7 @@ sub get_polyline_p {
if ( my $err = $tx->error ) {
$promise->reject(
-"hafas->get_polyline_p($url) returned HTTP $err->{code} $err->{message}"
+"hafas->get_polyline_p($log_url) returned HTTP $err->{code} $err->{message}"
);
return;
}
@@ -97,7 +100,7 @@ sub get_polyline_p {
. ": IRIS route does not agree with HAFAS route: $iris_stations != $hafas_stations"
);
$promise->reject(
- "hafas->get_polyline_p($url): polyline route mismatch");
+ "hafas->get_polyline_p($log_url): polyline route mismatch");
}
else {
$promise->resolve($ret);
@@ -107,7 +110,7 @@ sub get_polyline_p {
)->catch(
sub {
my ($err) = @_;
- $promise->reject("hafas->get_polyline_p($url): $err");
+ $promise->reject("hafas->get_polyline_p($log_url): $err");
return;
}
)->wait;