From be1e5dda23b5bac86898ac548ca1ecd2e6a3fb08 Mon Sep 17 00:00:00 2001
From: Daniel Friesel <derf@finalrewind.org>
Date: Thu, 2 May 2019 11:29:43 +0200
Subject: Public API documentation

---
 lib/Travelynx.pm                    |  1 +
 lib/Travelynx/Controller/Api.pm     |  6 +++
 templates/account.html.ep           | 69 ++----------------------------
 templates/api_documentation.html.ep | 85 +++++++++++++++++++++++++++++++++++++
 templates/landingpage.html.ep       |  2 +-
 5 files changed, 96 insertions(+), 67 deletions(-)
 create mode 100644 templates/api_documentation.html.ep

diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 8e10896..0ded6bb 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -1719,6 +1719,7 @@ sub startup {
 
 	$r->get('/')->to('traveling#homepage');
 	$r->get('/about')->to('static#about');
+	$r->get('/api')->to('api#documentation');
 	$r->get('/impressum')->to('static#imprint');
 	$r->get('/imprint')->to('static#imprint');
 	$r->get('/api/v0/:user_action/:token')->to('api#get_v0');
diff --git a/lib/Travelynx/Controller/Api.pm b/lib/Travelynx/Controller/Api.pm
index a0b8e07..889a0e3 100755
--- a/lib/Travelynx/Controller/Api.pm
+++ b/lib/Travelynx/Controller/Api.pm
@@ -8,6 +8,12 @@ sub make_token {
 	return create_uuid_as_string(UUID_V4);
 }
 
+sub documentation {
+	my ($self) = @_;
+
+	$self->render('api_documentation');
+}
+
 sub get_v0 {
 	my ($self) = @_;
 
diff --git a/templates/account.html.ep b/templates/account.html.ep
index fc4387d..38ffecb 100644
--- a/templates/account.html.ep
+++ b/templates/account.html.ep
@@ -66,10 +66,10 @@
 	</div>
 </div>
 
+<h2>API</h2>
 % my $token = get_api_token();
 <div class="row">
 	<div class="col s12">
-	<h2>API</h2>
 		<p>
 			Die folgenden API-Token erlauben den passwortlosen automatisierten Zugriff auf
 			API-Endpunkte.  Bitte umsichtig behandeln – sobald ein Token gesetzt
@@ -150,76 +150,13 @@
 	</div>
 </div>
 
-% my $api_root = $self->url_for('/api/v1')->to_abs->scheme('https');
-<h3>Status</h3>
 <div class="row">
 	<div class="col s12">
-		<p style="font-family: Monospace;">
-			% if ($token->{status}) {
-				curl <%= $api_root %>/status/<%= $acc->{id} %>-<%= $token->{status} // 'TOKEN' %>
-			% }
-			% else {
-				curl <%= $api_root %>/status/TOKEN
-			% }
-		</p>
-		<p>
-		Beispiel / Layout:
-		</p>
-		<p style="font-family: Monospace;">
-		{<br/>
-			"deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)<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" : "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/>
-		}
-		</p>
-		<p>
-			Im Fehlerfall: <span style="font-family: Monospace;">{ "error" : "Begründung" }</span>
-		</p>
-	</div>
-</div>
-<!--
-<h3>History</h3>
-<div class="row">
-	<div class="col s12">
-		<p>
-			Coming soon.
-		</p>
+		<a href="/api">Dokumentation</a>
 	</div>
 </div>
 
-<h3>Travel</h3>
-<div class="row">
-	<div class="col s12">
-		<p>
-			Ein- und Auschecken per API. Coming soon.
-		</p>
-	</div>
-</div>
--->
+
 <h2>Export</h2>
 
 <div class="row">
diff --git a/templates/api_documentation.html.ep b/templates/api_documentation.html.ep
new file mode 100644
index 0000000..dd59be6
--- /dev/null
+++ b/templates/api_documentation.html.ep
@@ -0,0 +1,85 @@
+% my $api_root = $self->url_for('/api/v1')->to_abs->scheme('https');
+% my $token = {};
+% my $uid;
+% if (is_user_authenticated()) {
+	% $uid = current_user()->{id};
+	% $token = get_api_token();
+% }
+
+<h1>API</h1>
+
+<div class="row">
+	<div class="col s12">
+		Die folgenden API-Endpunkte werden aktuell unterstützt.
+	</div>
+</div>
+
+<h2>Status</h2>
+<div class="row">
+	<div class="col s12">
+		<p style="font-family: Monospace;">
+			% if ($token->{status}) {
+				curl <%= $api_root %>/status/<%= $uid %>-<%= $token->{status} // 'TOKEN' %>
+			% }
+			% else {
+				curl <%= $api_root %>/status/TOKEN
+			% }
+		</p>
+		<p>
+		Beispiel / Layout:
+		</p>
+		<p style="font-family: Monospace;">
+		{<br/>
+			"deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)<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" : "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/>
+		}
+		</p>
+		<p>
+			Im Fehlerfall: <span style="font-family: Monospace;">{ "error" : "Begründung" }</span>
+		</p>
+	</div>
+</div>
+<!--
+<h3>History</h3>
+<div class="row">
+	<div class="col s12">
+		<p>
+			Coming soon.
+		</p>
+	</div>
+</div>
+
+<h3>Travel</h3>
+<div class="row">
+	<div class="col s12">
+		<p>
+			Ein- und Auschecken per API. Coming soon.
+		</p>
+	</div>
+</div>
+-->
diff --git a/templates/landingpage.html.ep b/templates/landingpage.html.ep
index 0f293d9..2d531fc 100644
--- a/templates/landingpage.html.ep
+++ b/templates/landingpage.html.ep
@@ -95,7 +95,7 @@
 				<ul>
 					<li>Protokoll von Fahrplan- und Echtzeitdaten an Start- und
 						Zielbahnhof</li>
-					<li>API zum automatisierten Auslesen des aktuellen Status</li>
+					<li><a href="/api">API</a> zum automatisierten Auslesen des aktuellen Status</li>
 					<li>Statistiken über Reisezeiten und Verspätungen</li>
 				</ul>
 			</p>
-- 
cgit v1.2.3