diff options
author | Daniel Friesel <derf@finalrewind.org> | 2020-09-30 19:12:29 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2020-09-30 19:12:29 +0200 |
commit | 89e709d8d593939ab528b81d125fd37d303c4fa9 (patch) | |
tree | 574a0fbe6b6b0849d878c228e1f6b84e2c29d878 /templates | |
parent | 952740969ca9fa74c893dfe0961d3ae55ec9e85b (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.ep | 22 | ||||
-rw-r--r-- | templates/traewelling.html.ep | 220 |
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> +% } |