summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-09-30 19:12:29 +0200
committerDaniel Friesel <derf@finalrewind.org>2020-09-30 19:12:29 +0200
commit89e709d8d593939ab528b81d125fd37d303c4fa9 (patch)
tree574a0fbe6b6b0849d878c228e1f6b84e2c29d878 /templates
parent952740969ca9fa74c893dfe0961d3ae55ec9e85b (diff)
Allow linking a Träwelling account, auto-sync Träwelling→travelynx
travelynx→Träwelling is still work-in-progress Squashed commit of the following: commit 97faa6e2e6c8d20fba30f2d0f6e78187ceeb72e6 Author: Daniel Friesel <derf@finalrewind.org> Date: Wed Sep 30 18:50:05 2020 +0200 improve traewelling log and tx handling commit 487d7dd728b9d45b731bdc7098cf3358ea2e206e Author: Daniel Friesel <derf@finalrewind.org> Date: Wed Sep 30 18:02:41 2020 +0200 add missing traewelling template commit 0148da2f48d9a52dcddc0ab81f83d8f8ac3062ab Author: Daniel Friesel <derf@finalrewind.org> Date: Wed Sep 30 18:02:35 2020 +0200 improve traewelling pull sync commit 4861a9750f9f2d7621043361d0af6b0a8869a0df Author: Daniel Friesel <derf@finalrewind.org> Date: Tue Sep 29 22:14:24 2020 +0200 wip checkin from traewelling commit f6aeb6f06998a2a7a80f63a7b1b688b1a26b66bd Author: Daniel Friesel <derf@finalrewind.org> Date: Tue Sep 29 18:37:53 2020 +0200 refactor traewelling integration. login and logout are less of a hack now. checkin and checkout are not supported at the moment.
Diffstat (limited to 'templates')
-rw-r--r--templates/account.html.ep22
-rw-r--r--templates/traewelling.html.ep220
2 files changed, 242 insertions, 0 deletions
diff --git a/templates/account.html.ep b/templates/account.html.ep
index 9b049a3..8943e3f 100644
--- a/templates/account.html.ep
+++ b/templates/account.html.ep
@@ -16,6 +16,9 @@
% elsif ($success eq 'privacy') {
<span class="card-title">Einstellungen zu öffentlichen Account-Daten geändert</span>
% }
+ % elsif ($success eq 'traewelling') {
+ <span class="card-title">Traewelling-Verknüpfung aktualisiert</span>
+ % }
% elsif ($success eq 'use_history') {
<span class="card-title">Einstellungen zu vorgeschlagenen Verbindungen geändert</span>
% }
@@ -31,6 +34,7 @@
<h1>Account</h1>
% my $acc = current_user();
% my $hook = get_webhook();
+% my $traewelling = traewelling->get($acc->{id});
% my $use_history = users->use_history(uid => $acc->{id});
<div class="row">
<div class="col s12">
@@ -111,6 +115,24 @@
</td>
</tr>
<tr>
+ <th scope="row">Traewelling</th>
+ <td>
+ <a href="/account/traewelling"><i class="material-icons">edit</i></a>
+ % if (not ($traewelling->{token})) {
+ <span style="color: #999999;">Nicht verknüpft</span>
+ % }
+ % elsif ($traewelling->{errored}) {
+ Fehlerhaft <i class="material-icons">error</i>
+ % }
+ % elsif (not ($traewelling->{push_sync} or $traewelling->{pull_sync})) {
+ <span style="color: #999999;">Verknüpft mit <%= $traewelling->{data}{user_name} // $traewelling->{email} %>, Synchronisierung inaktiv</span>
+ % }
+ % else {
+ Verknüpft mit <%= $traewelling->{data}{user_name} // $traewelling->{email} %>
+ % }
+ </td>
+ </tr>
+ <tr>
<th scope="row">Registriert am</th>
<td><%= $acc->{registered_at}->strftime('%d.%m.%Y %H:%M') %></td>
</tr>
diff --git a/templates/traewelling.html.ep b/templates/traewelling.html.ep
new file mode 100644
index 0000000..3a5eab3
--- /dev/null
+++ b/templates/traewelling.html.ep
@@ -0,0 +1,220 @@
+% if (my $invalid = stash('invalid')) {
+ %= include '_invalid_input', invalid => $invalid
+% }
+
+<h1>Träwelling</h1>
+
+<div class="row">
+ <div class="col s12">
+ <div class="card purple">
+ <div class="card-content white-text">
+ <span class="card-title">Beta-Feature</span>
+ <p>Die Verbindung von Checkinservices bietet viele Möglichkeiten für interessante Fehlerbilder.
+ Falls etwas nicht klappt, bitte mit möglichst detaillierten Angaben zum Hergang einen Bug melden.</p>
+ <p>
+ Bekannte Probleme: Hooks werden bei einem Checkin via Träwelling nicht ausgelöst.
+ </p>
+ </div>
+ <div class="card-action">
+ <a href="https://github.com/derf/travelynx/issues" class="waves-effect waves-light btn-flat white-text">
+ <i class="material-icons left">bug_report</i>Bug melden
+ </a>
+ </div>
+ </div>
+ </div>
+</div>
+
+% if (stash('new_traewelling')) {
+ <div class="row">
+ <div class="col s12">
+ % if ($traewelling->{token}) {
+ <div class="card success-color">
+ <div class="card-content white-text">
+ <span class="card-title">Träwelling verknüpft</span>
+ % my $user = $traewelling->{data}{user_name} // $traewelling->{email};
+ <p>Dein travelynx-Account hat nun ein Jahr lang Zugriff auf
+ den Träwelling-Account <b>@<%= $user %></b>.</p>
+ </div>
+ </div>
+ % }
+ % elsif (my $login_err = stash('login_error')) {
+ <div class="card caution-color">
+ <div class="card-content white-text">
+ <span class="card-title">Login-Fehler</span>
+ <p>Der Login bei Träwelling ist fehlgeschlagen: <%= $login_err %></p>
+ </div>
+ </div>
+ % }
+ % elsif (my $logout_err = stash('logout_error')) {
+ <div class="card caution-color">
+ <div class="card-content white-text">
+ <span class="card-title">Logout-Fehler</span>
+ <p>Der Logout bei Träwelling ist fehlgeschlagen: <%= $logout_err %>.
+ Dein Login-Token bei travelynx wurde dennoch gelöscht, so
+ dass nun kein Zugriff von travelynx auf Träwelling mehr
+ möglich ist. In den <a
+ href="https://traewelling.de/settings">Träwelling-Einstellungen</a>
+ kannst du ihn vollständig löschen.</p>
+ </div>
+ </div>
+ % }
+ </div>
+ </div>
+% }
+
+% if (not $traewelling->{token}) {
+ <div class="row">
+ <div class="col s12">
+ <p>
+ Hier hast du die Möglichkeit, deinen travelynx-Account mit einem
+ Account bei <a href="https://traewelling.de">Träwelling</a> zu
+ verknüpfen. Dies erlaubt die automatische Übernahme von Checkins
+ zwischen den beiden Diensten. Träwelling-Checkins in
+ Nahverkehrsmittel und Züge außerhalb des deutschen Schienennetzes
+ werden nicht unterstützt und ignoriert.
+ </p>
+ <p>
+ Mit E-Mail und Passwort wird ein Login über die Träwelling-API
+ durchgeführt. Die E-Mail und das dabei generierte Token werden
+ von travelynx gespeichert. Das Passwort wird ausschließlich für
+ den Login verwendet und nicht gespeichert. Der Login kann jederzeit
+ sowohl auf dieser Seite als auch über die <a
+ href="https://traewelling.de/settings">Träwelling-Einstellungen</a>
+ widerrufen werden. Nach einem Jahr läuft er automatisch ab.
+ </p>
+ </div>
+ </div>
+ <div class="row">
+ %= form_for '/account/traewelling' => (method => 'POST') => begin
+ %= csrf_field
+ <div class="input-field col s12">
+ <i class="material-icons prefix">account_circle</i>
+ %= text_field 'email', id => 'email', class => 'validate', required => undef, maxlength => 250
+ <label for="email">E-Mail</label>
+ </div>
+ <div class="input-field col s12">
+ <i class="material-icons prefix">lock</i>
+ %= password_field 'password', id => 'password', class => 'validate', required => undef
+ <label for="password">Passwort</label>
+ </div>
+ <div class="col s12 center-align">
+ <button class="btn waves-effect waves-light" type="submit" name="action" value="login">
+ Verknüpfen
+ <i class="material-icons right">send</i>
+ </button>
+ </div>
+ %= end
+ </div>
+% }
+% else {
+ <div class="row">
+ <div class="col s12">
+ <p>
+ Dieser travelynx-Account ist mit dem Träwelling-Account
+ % if (my $user = $traewelling->{data}{user_name}) {
+ <a href="https://traewelling.de/profile/<%= $user %>"><%= $user %></a>
+ % }
+ % else {
+ %= $traewelling->{email}
+ % }
+ verknüpft.
+ </p>
+ </div>
+ </div>
+ %= form_for '/account/traewelling' => (method => 'POST') => begin
+ <div class="row">
+ %= csrf_field
+ <div class="input-field col s12">
+ <div>
+ <label>
+ %= radio_button sync_source => 'none'
+ <span>Keine Synchronisierung</span>
+ </label>
+ </div>
+ </div>
+ <div class="input-field col s12">
+ <div>
+ <label>
+ %= radio_button sync_source => 'travelynx', disabled => undef
+ <span>Checkin-Synchronisierung travelynx → Träwelling</span>
+ </label>
+ </div>
+ <p>Die Synchronisierung erfolgt spätestens drei Minuten nach der
+ Zielwahl. Träwelling-Checkins können von travelynx noch nicht
+ rückgängig gemacht werden.</p>
+ </div>
+ <div class="input-field col s12">
+ <div>
+ <label>
+ %= radio_button sync_source => 'traewelling'
+ <span>Checkin-Synchronisierung Träwelling → travelynx</span>
+ </label>
+ </div>
+ <p>Alle drei Minuten wird dein Status auf Träwelling abgefragt.
+ Falls du gerade in einen Zug eingecheckt bist, wird dieser von
+ travelynx übernommen. Träwelling-Checkins in Nahverkehrsmittel
+ und Züge außerhalb des deutschen Schienennetzes werden nicht
+ unterstützt.</p>
+ </div>
+ </div>
+ <div class="row hide-on-small-only">
+ <div class="col s12 m6 l6 center-align">
+ <button class="btn waves-effect waves-light red" type="submit" name="action" value="logout">
+ Abmelden
+ <i class="material-icons right" aria-hidden="true">sync_disabled</i>
+ </button>
+ </div>
+ <div class="col s12 m6 l6 center-align">
+ <button class="btn waves-effect waves-light" type="submit" name="action" value="config">
+ Speichern
+ <i class="material-icons right" aria-hidden="true">send</i>
+ </button>
+ </div>
+ </div>
+ <div class="row hide-on-med-and-up">
+ <div class="col s12 m6 l6 center-align">
+ <button class="btn waves-effect waves-light" type="submit" name="action" value="config">
+ Speichern
+ <i class="material-icons right" aria-hidden="true">send</i>
+ </button>
+ </div>
+ <div class="col s12 m6 l6 center-align" style="margin-top: 1em;">
+ <button class="btn waves-effect waves-light red" type="submit" name="action" value="logout">
+ Abmelden
+ <i class="material-icons right" aria-hidden="true">sync_disabled</i>
+ </button>
+ </div>
+ </div>
+ %= end
+ <h2>Status</h2>
+ <div class="row">
+ <div class="col s12"">
+ % if ($traewelling->{latest_run}->epoch) {
+ Letzter Kontakt mit Träwelling <%= $traewelling->{latest_run}->strftime('am %d.%m.%Y um %H:%M:%S') %><br/>
+ % if ($traewelling->{errored}) {
+ <i class="material-icons left">error</i>
+ Fehler: <%= $traewelling->{data}{error} %>
+ % }
+ % }
+ % else {
+ Bisher wurde noch keine Synchronisierung durchgeführt.
+ % }
+ </div>
+ </div>
+ <h2>Log</h2>
+ <div class="row">
+ <div class="col s12"">
+ <ul>
+ % for my $log_entry (@{$traewelling->{data}{log} // []}) {
+ <li>
+ <%= $log_entry->[0]->strftime('%d.%m.%Y %H:%M:%S') %> –
+ % if ($log_entry->[2]) {
+ Träwelling <a href="https://traewelling.de/status/<%= $log_entry->[2] %>">#<%= $log_entry->[2] %></a> –
+ % }
+ %= $log_entry->[1]
+ </li>
+ % }
+ </ul>
+ </div>
+ </div>
+% }