316 lines
8.6 KiB
Text
316 lines
8.6 KiB
Text
% if (my $invalid = stash('invalid')) {
|
||
%= include '_invalid_input', invalid => $invalid
|
||
% }
|
||
|
||
% if (my $success = flash('success')) {
|
||
<div class="row">
|
||
<div class="col s12">
|
||
<div class="card success-color">
|
||
<div class="card-content white-text">
|
||
% if ($success eq 'name') {
|
||
<span class="card-title">Name geändert</span>
|
||
% }
|
||
% elsif ($success eq 'mail') {
|
||
<span class="card-title">Mail-Adresse geändert</span>
|
||
% }
|
||
% elsif ($success eq 'password') {
|
||
<span class="card-title">Passwort geändert</span>
|
||
% }
|
||
% elsif ($success eq 'privacy') {
|
||
<span class="card-title">Einstellungen zu öffentlichen Account-Daten geändert</span>
|
||
% }
|
||
% elsif ($success eq 'traewelling') {
|
||
<span class="card-title">Träwelling-Verknüpfung aktualisiert</span>
|
||
% }
|
||
% elsif ($success eq 'use_history') {
|
||
<span class="card-title">Einstellungen zu vorgeschlagenen Verbindungen geändert</span>
|
||
% }
|
||
% elsif ($success eq 'webhook') {
|
||
<span class="card-title">Web Hook aktualisiert</span>
|
||
% }
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
% }
|
||
|
||
% 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">
|
||
<h2>Account</h2>
|
||
<table class="striped">
|
||
<tr>
|
||
<th scope="row">Name</th>
|
||
<td><a href="/account/name"><i class="material-icons">edit</i></a><%= $acc->{name} %></td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Mail</th>
|
||
<td><a href="/account/mail"><i class="material-icons">edit</i></a><%= $acc->{email} %></td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Passwort</th>
|
||
<td><a href="/account/password"><i class="material-icons">edit</i></a></td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Verbindungen</th>
|
||
<td>
|
||
<a href="/account/insight"><i class="material-icons">edit</i></a>
|
||
% if ($use_history & 0x03) {
|
||
Vorschläge aktiv
|
||
% }
|
||
% else {
|
||
<span style="color: #999999;">Vorschläge deaktiviert</span>
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Öffentliche Daten</th>
|
||
<td>
|
||
<a href="/account/privacy"><i class="material-icons">edit</i></a>
|
||
% if ($acc->{is_public} == 0) {
|
||
<span style="color: #999999;">Keine</span>
|
||
% }
|
||
% if ($acc->{is_public} & 0x01) {
|
||
Aktueller Status (nur mit Anmeldung)
|
||
% }
|
||
% elsif ($acc->{is_public} & 0x02) {
|
||
Aktueller Status
|
||
% }
|
||
% if ($acc->{is_public} & 0x0f and $acc->{is_public} & 0xf0) {
|
||
<br/>
|
||
% }
|
||
% if ($acc->{is_public} & 0x30) {
|
||
% if ($acc->{is_public} & 0x40) {
|
||
Vergangene Fahrten
|
||
% }
|
||
% else {
|
||
Fahrten der letzten vier Wochen
|
||
% }
|
||
% if ($acc->{is_public} & 0x10) {
|
||
(nur mit Anmeldung)
|
||
% }
|
||
% }
|
||
% if ($acc->{is_public} & 0x04) {
|
||
<br/>
|
||
Kommentare
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Web Hook</th>
|
||
<td>
|
||
<a href="/account/hooks"><i class="material-icons">edit</i></a>
|
||
% if (not $hook->{enabled}) {
|
||
<span style="color: #999999;">Nicht eingerichtet</span>
|
||
% }
|
||
% elsif ($hook->{latest_run}->epoch == 0) {
|
||
Aktiv, noch nicht ausgeführt
|
||
% }
|
||
% elsif ($hook->{errored}) {
|
||
Aktiv, fehlerhaft <i class="material-icons" aria-hidden="true">error</i>
|
||
% }
|
||
% else {
|
||
Aktiv
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Träwelling</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" aria-hidden="true">error</i>
|
||
% }
|
||
% else {
|
||
Verknüpft mit <%= $traewelling->{data}{user_name} // $traewelling->{email} %>
|
||
% if ($traewelling->{expired}) {
|
||
– Login-Token abgelaufen <i class="material-icons" aria-hidden="true">error</i>
|
||
% }
|
||
% elsif ($traewelling->{expiring}) {
|
||
– Login-Token läuft bald ab <i class="material-icons" aria-hidden="true">warning</i>
|
||
% }
|
||
% elsif ($traewelling->{pull_sync}) {
|
||
– Checkins in Träwelling werden von travelynx übernommen
|
||
% }
|
||
% elsif ($traewelling->{push_sync}) {
|
||
– Checkins in travelynx werden zu Träwelling weitergereicht
|
||
% }
|
||
% }
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Registriert am</th>
|
||
<td><%= $acc->{registered_at}->strftime('%d.%m.%Y %H:%M') %></td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col s12 m12 l12 center-align">
|
||
%= form_for 'logout' => begin
|
||
%= csrf_field
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="logout">
|
||
Abmelden
|
||
</button>
|
||
%= end
|
||
</div>
|
||
</div>
|
||
|
||
% 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
|
||
ist, können damit ohne Logindaten alle zugehörigen API-Aktionen
|
||
ausgeführt werden.
|
||
</p>
|
||
<table class="striped">
|
||
<tr>
|
||
<th scope="row">Status</th>
|
||
<td>
|
||
% if ($token->{status}) {
|
||
%= $acc->{id} . '-' . $token->{status}
|
||
% }
|
||
% else {
|
||
—
|
||
% }
|
||
</td>
|
||
<td>
|
||
%= form_for 'set_token' => begin
|
||
%= csrf_field
|
||
%= hidden_field 'token' => 'status'
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="generate">
|
||
Generieren
|
||
</button>
|
||
<button class="btn waves-effect waves-light caution-color" type="submit" name="action" value="delete">
|
||
Löschen
|
||
</button>
|
||
%= end
|
||
</td>
|
||
</tr><!--
|
||
<tr>
|
||
<th scope="row">History</th>
|
||
<td>
|
||
% if ($token->{history}) {
|
||
%= $acc->{id} . '-' . $token->{history}
|
||
% }
|
||
% else {
|
||
—
|
||
% }
|
||
</td>
|
||
<td>
|
||
%= form_for 'set_token' => begin
|
||
%= csrf_field
|
||
%= hidden_field 'token' => 'history'
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="generate">
|
||
Generieren
|
||
</button>
|
||
<button class="btn waves-effect waves-light red" type="submit" name="action" value="delete">
|
||
Löschen
|
||
</button>
|
||
%= end
|
||
</td>
|
||
</tr>-->
|
||
<tr>
|
||
<th scope="row">Travel</th>
|
||
<td>
|
||
% if ($token->{travel}) {
|
||
%= $acc->{id} . '-' . $token->{travel}
|
||
% }
|
||
% else {
|
||
—
|
||
% }
|
||
</td>
|
||
<td>
|
||
%= form_for 'set_token' => begin
|
||
%= csrf_field
|
||
%= hidden_field 'token' => 'travel'
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="generate">
|
||
Generieren
|
||
</button>
|
||
<button class="btn waves-effect waves-light red" type="submit" name="action" value="delete">
|
||
Löschen
|
||
</button>
|
||
%= end
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row">Import</th>
|
||
<td>
|
||
% if ($token->{import}) {
|
||
%= $acc->{id} . '-' . $token->{import}
|
||
% }
|
||
% else {
|
||
—
|
||
% }
|
||
</td>
|
||
<td>
|
||
%= form_for 'set_token' => begin
|
||
%= csrf_field
|
||
%= hidden_field 'token' => 'import'
|
||
<button class="btn waves-effect waves-light" type="submit" name="action" value="generate">
|
||
Generieren
|
||
</button>
|
||
<button class="btn waves-effect waves-light red" type="submit" name="action" value="delete">
|
||
Löschen
|
||
</button>
|
||
%= end
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row">
|
||
<div class="col s12">
|
||
<a href="/api">Dokumentation</a>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="row">
|
||
<div class="col s12">
|
||
<h2>Export</h2>
|
||
<ul>
|
||
<li><a href="/export.json">Rohdaten</a> (Kein API-Ersatz, das Format kann sich jederzeit ändern)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
% if (not $acc->{deletion_requested}) {
|
||
<div class="row">
|
||
<div class="col s12">
|
||
<h2>Löschen</h2>
|
||
<p>
|
||
Der Löschauftrag wird vorgemerkt und erst nach drei Tagen
|
||
umgesetzt, bis dahin kann er jederzeit zurückgenommen werden. Nach
|
||
Ablauf der drei Tage wird der Account mit allen zugehörigen
|
||
Reisedaten ohne weitere Rückfragen entfernt.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
%= form_for 'delete' => begin
|
||
<div class="input-field col s12 m12 l8">
|
||
<i class="material-icons prefix">lock</i>
|
||
%= password_field 'password', id => 'password', class => 'validate', required => undef, autocomplete => 'current-password'
|
||
<label for="password">Passwort</label>
|
||
</div>
|
||
<div class="input-field col s12 m12 l4 center-align">
|
||
%= csrf_field
|
||
<button class="btn waves-effect waves-light caution-color" type="submit" name="action" value="delete">
|
||
Account löschen
|
||
</button>
|
||
</div>
|
||
%= end
|
||
</div>
|
||
% }
|