summaryrefslogtreecommitdiffstats
path: root/accounts/templates
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2016-01-23 13:04:35 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2016-01-25 01:56:13 +0100
commit899947bd00df10cca15aca1b3c14125b38b35ecf (patch)
treecbe0cd8023efa657b478476a70f83d2f5cb5509b /accounts/templates
parentbd20d0ff1c7a582f3c53d30bfc387139c419ef35 (diff)
downloadweb-899947bd00df10cca15aca1b3c14125b38b35ecf.tar.gz
web-899947bd00df10cca15aca1b3c14125b38b35ecf.tar.bz2
web-899947bd00df10cca15aca1b3c14125b38b35ecf.zip
Moved everything into a package
Diffstat (limited to 'accounts/templates')
-rw-r--r--accounts/templates/_macros.html46
-rw-r--r--accounts/templates/about.html44
-rw-r--r--accounts/templates/admin/create_account.html21
-rw-r--r--accounts/templates/admin/disable_account.html20
-rw-r--r--accounts/templates/admin/index.html9
-rw-r--r--accounts/templates/admin/view_blacklist.html19
-rw-r--r--accounts/templates/base.html72
-rw-r--r--accounts/templates/error.html8
-rw-r--r--accounts/templates/index.html20
-rw-r--r--accounts/templates/lost_password.html16
-rw-r--r--accounts/templates/lost_password_complete.html18
-rw-r--r--accounts/templates/mail/change_mail.txt16
-rw-r--r--accounts/templates/mail/lost_password.txt11
-rw-r--r--accounts/templates/mail/register.txt19
-rw-r--r--accounts/templates/register.html22
-rw-r--r--accounts/templates/register_complete.html23
-rw-r--r--accounts/templates/settings.html62
17 files changed, 446 insertions, 0 deletions
diff --git a/accounts/templates/_macros.html b/accounts/templates/_macros.html
new file mode 100644
index 0000000..58739ae
--- /dev/null
+++ b/accounts/templates/_macros.html
@@ -0,0 +1,46 @@
+{% macro render_submit() %}
+<div class="control-group">
+ <div class="controls">
+ <input type="submit"
+ {%- for key, value in kwargs.items() %}
+ {{key}}="{{value}}"
+ {% endfor %}
+ />
+ </div>
+</div>
+{%- endmacro %}
+
+{% macro render_field(field) %}
+<div class="control-group">
+ {{ field.label }}
+ <div class="controls">
+ {{ field(**kwargs)|safe }}
+ {{ render_errors(field.errors) }}
+ </div>
+</div>
+{%- endmacro %}
+
+{% macro render_csrf(form) %}
+{{ form.csrf_token }}
+{%- if 'csrf_token' in form.errors %}
+<div class="control-group">
+ <div class="controls">
+ {{ render_errors(form.errors.csrf_token) }}
+ </div>
+</div>
+{%- endif %}
+{%- endmacro %}
+
+{% macro render_errors(errors) %}
+ {%- if errors|length == 1 %}
+ <div class="errors">
+ {{ errors.0 }}
+ </div>
+ {% elif errors %}
+ <ul class="errors">
+ {% for error in errors %}
+ <li>{{ error }}</li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+{%- endmacro %}
diff --git a/accounts/templates/about.html b/accounts/templates/about.html
new file mode 100644
index 0000000..2ae1936
--- /dev/null
+++ b/accounts/templates/about.html
@@ -0,0 +1,44 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field %}
+{%- set title = 'Über spline accounts' %}
+{%- block content %}
+<h2>Was ist ein Spline-Account?</h2>
+<p>
+ Mit einem Spline-Account soll man sich in Zukunft bei allen
+ <a href="http://spline.de/">Spline-Diensten</a> einloggen können, statt
+ sich – wie bisher – bei jedem Dienst neu zu registrieren. (Es sind aber
+ noch nicht alle Dienste integriert.)
+</p>
+<p>
+ Das heißt: Du registrierst dich ein Mal hier auf der Seite, und kannst
+ dich dann mit diesem Benutzernamen und Passwort bei allen Diensten
+ einloggen. In Zukunft wird es sogar möglich sein, für jeden Dienst ein
+ abweichendes Passwort zu definieren.
+</p>
+<h2>Was bedeutet „Dieser Benutzername ist momentan nicht erlaubt“?</h2>
+<p>
+ Wir sind gerade noch in der Migrationsphase. Da wir noch kein
+ automatisiertes System haben, um alte Accounts aus den Diensten zu einem
+ Spline-Account zu übertragen, sperren wir vorerst alle Benutzernamen, die
+ es schon in einem der Dienste gibt. So haben die Besitzer dieser Accounts
+ die Möglichkeit, ihren Benutzernamen zu behalten.
+</p>
+<p>
+ Wenn du schon einen Benutzernamen in einem der alten Dienste hast, kannst
+ du uns <a href="mailto:accounts@spline.de">Bescheid sagen</a>, dann
+ erstellen wir dir von Hand einen Account.
+</p>
+<h2>Wie kann ich einen Spline-Account löschen?</h2>
+<p>
+ Zur Zeit können wir Accounts nur deaktivieren, da gewisse Dienste sonst mit
+ den inkonsistenten Daten nicht umgehen können. Wenn du deinen Account
+ deaktivieren willst, dann teile uns das am besten per
+ <a href="mailto:accounts@spline.de">Mail</a> mit!
+</p>
+<h2>Welche Dienste sind bisher dabei?</h2>
+<ul>
+{%- for service in app.all_services %}
+ <li><a href="{{ service.url}}">{{ service.name }}</a></li>
+{%- endfor %}
+</ul>
+{%- endblock %}
diff --git a/accounts/templates/admin/create_account.html b/accounts/templates/admin/create_account.html
new file mode 100644
index 0000000..2a53fd9
--- /dev/null
+++ b/accounts/templates/admin/create_account.html
@@ -0,0 +1,21 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit, render_csrf %}
+{%- set title = 'Account erstellen' %}
+{%- block content %}
+<p>
+ Hier kannst du einen Account erstellen, auch wenn der gewünschte
+ Benutzername in der Blacklist steht. Bitte stelle dabei sicher,
+ dass Accounts dieses Namens auf <b>allen</b> Diensten dem User
+ gehören.
+</p>
+<p>
+ Der Benutzer bekommt eine Mail, mit der er sich dann ganz normal
+ ein Passwort setzen kann.
+</p>
+<form action="" method="post" class="form-horizontal">
+ {{ render_field(form.username, autofocus="autofocus") }}
+ {{ render_field(form.mail) }}
+ {{ render_submit(value='Link verschicken')}}
+ {{ render_csrf(form) }}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/admin/disable_account.html b/accounts/templates/admin/disable_account.html
new file mode 100644
index 0000000..b6eccda
--- /dev/null
+++ b/accounts/templates/admin/disable_account.html
@@ -0,0 +1,20 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit, render_csrf %}
+{%- set title = 'Account deaktivieren' %}
+{%- block content %}
+<p>
+ Hier kannst du einen Account deaktivieren. Da es quasi unmöglich ist,
+ Accounts zu löschen, ohne dass es Konsistenzprobleme zwischen dem LDAP und
+ den Datenbanken der Anwendungen gibt, wird dazu einfach das Passwort auf was
+ zufälliges und die Mail auf was ungültiges gesetzt.
+</p>
+<p>
+ Der Benutzer wird davon nicht benachrichtigt, mach das also nur mit
+ Accounts, die sicher Spammer sind!
+</p>
+<form action="" method="post" class="form-horizontal">
+ {{ render_field(form.username, autofocus="autofocus") }}
+ {{ render_submit(value='Account deaktivieren')}}
+ {{ render_csrf(form) }}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/admin/index.html b/accounts/templates/admin/index.html
new file mode 100644
index 0000000..722a9ac
--- /dev/null
+++ b/accounts/templates/admin/index.html
@@ -0,0 +1,9 @@
+{%- extends 'base.html' %}
+{%- set title = 'Admin-Interface' %}
+{%- block content %}
+<ul>
+ <li><a href="{{ url_for('admin.create_account') }}">Account erstellen</a></li>
+ <li><a href="{{ url_for('admin.view_blacklist') }}">Blacklist anzeigen</a></li>
+ <li><a href="{{ url_for('admin.disable_account') }}">Account deaktivieren</a></li>
+</ul>
+{%- endblock %}
diff --git a/accounts/templates/admin/view_blacklist.html b/accounts/templates/admin/view_blacklist.html
new file mode 100644
index 0000000..bde3f7c
--- /dev/null
+++ b/accounts/templates/admin/view_blacklist.html
@@ -0,0 +1,19 @@
+{%- extends 'base.html' %}
+{%- set title = 'Blacklist anzeigen' %}
+{%- block content %}
+<nav>
+ <ul>
+ {%- if start %}
+ <li><a href="{{ url_for('admin.view_blacklist') }}">Alle</a></li>
+ {%- endif %}
+ {%- for l in next_letters %}
+ <li><a href="{{ url_for('admin.view_blacklist', start=start+l) }}">{{ l }}</a></li>
+ {%- endfor %}
+ </ul>
+</nav>
+<ul>
+ {%- for e in entries %}
+ <li>{{ e }}</li>
+ {%- endfor %}
+</ul>
+{%- endblock %}
diff --git a/accounts/templates/base.html b/accounts/templates/base.html
new file mode 100644
index 0000000..d6a1726
--- /dev/null
+++ b/accounts/templates/base.html
@@ -0,0 +1,72 @@
+{%- set styles = ['layout.css', 'bootstrap-form.css'] + styles|default([]) %}
+{%- set scripts = ['script.js', 'jquery-1.8.2.min.js'] + scripts|default([]) %}
+<!doctype html> <html>
+ <head>
+ <meta charset="utf-8" />
+ <title>{% if title %}{{ title }} – {% endif %}spline accounts</title>
+ {%- for script in scripts %}
+ <script type="text/javascript" src="{{ url_for('static', filename=script) }}"></script>
+ {%- endfor %}
+ {%- for style in styles %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename=style, version='0.2') }}">
+ {%- endfor %}
+ </head>
+ <body>
+
+ <div id="header-background">&nbsp;</div>
+ <header>
+ <h1><a href="{{ url_for('settings') if g.user else url_for('index') }}">
+ <img src="{{ url_for('static', filename='logo.png') }}" alt="spline accounts" />
+ </a></h1>
+ <span id="roundcornerb">&nbsp;</span>
+ <span id="roundcornerw">&nbsp;</span>
+
+ <nav id="mainnav">
+ <ul>
+ <li><a href="http://spline.de">spline.de</a></li>
+ <li><a href="{{ url_for('about') }}">FAQ</a></li>
+ </ul>
+ </nav>
+
+ {%- if not no_login_message %}
+ <nav id="usermenu">
+ <ul>
+ {%- if g.user %}
+ <li>Angemeldet als <strong>{{ g.user.uid }}</strong></li>
+ {%- if g.user.uid in config.get('ADMIN_USERS', []) %}
+ <li><a href="{{ url_for('admin.index') }}">Admin</a></li>
+ {%- endif %}
+ <li><a href="{{ url_for('logout') }}">Abmelden</a></li>
+ {%- else %}
+ <li>Nicht angemeldet</li>
+ <li><a href="{{ url_for('index') }}">Login</a></li>
+ {%- endif %}
+ </ul>
+ </nav>
+ {%- endif %}
+ </header>
+
+ <section id="content">
+ {% with messages = get_flashed_messages(with_categories=true) %}
+ {% if messages %}
+ <ul class="flashes">
+ {% for category, message in messages %}
+ <li class="{{ category }}">{{ message }}</li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ {% endwith %}
+
+ {% if title %}
+ <h1>{{ title }}</h1>
+ {% endif %}
+ {% block content %}{% endblock %}
+ </section>
+
+ {%- if self.javascript() %}
+ <script type="text/javascript">
+ {%- block javascript %}{% endblock -%}
+ </script>
+ {%- endif %}
+ </body>
+</html>
diff --git a/accounts/templates/error.html b/accounts/templates/error.html
new file mode 100644
index 0000000..0f403b5
--- /dev/null
+++ b/accounts/templates/error.html
@@ -0,0 +1,8 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field %}
+{%- block content %}
+
+<h1>Fehler: {{ error.message }}</h1>
+{{ error.description|safe }}
+
+{%- endblock %}
diff --git a/accounts/templates/index.html b/accounts/templates/index.html
new file mode 100644
index 0000000..4e98750
--- /dev/null
+++ b/accounts/templates/index.html
@@ -0,0 +1,20 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field %}
+{%- block content %}
+
+<form action="{{ url_for('index') }}" method="post" class="form-horizontal">
+ <h2>Login</h2>
+ <p>
+ Willkommen bei <strong>spline accounts</strong>.
+ Melde dich an,
+ <a href="{{ url_for('about') }}">informier dich</a>, oder
+ <a href="{{ url_for('register') }}">leg einen Account an</a>.
+ </p>
+ {{ render_field(form.username, autofocus="autofocus") }}
+ {{ render_field(form.password) }}
+ <div class="form-actions"><input type="submit" value="Login" /></div>
+ <p class="form-actions"><a href="/register">Account erstellen</a></div>
+ <p class="form-actions"><a href="/lost_password">Passwort oder Benutzername vergessen</a></div>
+</form>
+
+{%- endblock %}
diff --git a/accounts/templates/lost_password.html b/accounts/templates/lost_password.html
new file mode 100644
index 0000000..fc1e6b8
--- /dev/null
+++ b/accounts/templates/lost_password.html
@@ -0,0 +1,16 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit %}
+{%- set title = 'Passwort vergessen' %}
+{%- set no_login_message = true %}
+{%- block content %}
+<form action="{{ url_for('lost_password') }}" method="post" class="form-horizontal">
+ <p>
+ Du hast dein Passwort und/oder deinen Benutzernamen vergessen? Kein Problem.
+ Gib einfach unten deinen Benutzernamen bzw. E-Mail-Adresse ein, und wir
+ schicken dir einen Link, mit dem du dir ein neues setzen kannst.
+ In dieser Mail steht dann auch dein Benutzername.
+ </p>
+ {{ render_field(form.username_or_mail, autofocus="autofocus") }}
+ {{ render_submit(value='Weiter')}}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/lost_password_complete.html b/accounts/templates/lost_password_complete.html
new file mode 100644
index 0000000..6ab4a1c
--- /dev/null
+++ b/accounts/templates/lost_password_complete.html
@@ -0,0 +1,18 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit %}
+{%- set title = 'Passwort vergessen' %}
+{%- set no_login_message = true %}
+{%- block content %}
+<form action="{{ url_for('lost_password_complete', token=token) }}" method="post" class="form-horizontal">
+ <p>
+ Hier kannst du jetzt ein neues Passwort setzen.
+ </p>
+ <div class="control-group">
+ <div class="control-label">Benutzername</div>
+ <div class="controls"><input readonly="readonly" value="{{ username }}" /></div>
+ </div>
+ {{ render_field(form.password, autofocus="autofocus") }}
+ {{ render_field(form.password_confirm) }}
+ {{ render_submit(value='Speichern')}}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/mail/change_mail.txt b/accounts/templates/mail/change_mail.txt
new file mode 100644
index 0000000..2319672
--- /dev/null
+++ b/accounts/templates/mail/change_mail.txt
@@ -0,0 +1,16 @@
+Hallo,
+
+Jemand, vermutlich du, möchte auf spline accounts [1] die
+E-Mail-Adresse des Accounts {{ username }} auf diese Adresse
+ {{ mail }}
+ändern.
+
+Um diese Änderung zu bestätigen, benutze bitte folgenden Link:
+ <{{ link }}>
+
+
+Wenn du dies nicht möchtest, brauchst du nichts weiter zu tun.
+Ohne deine Bestätigung wird die Adresse nicht geändert.
+
+
+[1] {{ url_for('index', _external=True) }}
diff --git a/accounts/templates/mail/lost_password.txt b/accounts/templates/mail/lost_password.txt
new file mode 100644
index 0000000..5eaa654
--- /dev/null
+++ b/accounts/templates/mail/lost_password.txt
@@ -0,0 +1,11 @@
+Hallo {{ username }},
+
+Jemand, vermutlich du, hat auf spline accounts einen Link zum Ändern
+deines Passworts angefordert.
+
+Hier kannst du dein Passwort ändern:
+ <{{ link }}>
+
+
+Wenn du diese Mail nicht angefordert hast, brauchst du nichts
+weiter zu tun. Dein altes Passwort bleibt dann weiter gültig.
diff --git a/accounts/templates/mail/register.txt b/accounts/templates/mail/register.txt
new file mode 100644
index 0000000..1f837d6
--- /dev/null
+++ b/accounts/templates/mail/register.txt
@@ -0,0 +1,19 @@
+Hallo,
+
+Jemand, vermutlich du, möchte auf spline accounts [1] einen Account
+mit folgenden Daten anlegen:
+
+ Benutzername: {{ username }}
+ E-Mail-Adresse: {{ mail }}
+
+
+Wenn du diesen Account anlegen möchtest, bestätige mit folgendem Link
+deine E-Mail-Adresse:
+ <{{ link }}>
+
+
+Wenn du diesen Account nicht anlegen möchtest, brauchst du nichts
+weiter zu tun. Ohne deine Bestätigung wird der Account nicht erstellt.
+
+
+[1] {{ url_for('index', _external=True) }}
diff --git a/accounts/templates/register.html b/accounts/templates/register.html
new file mode 100644
index 0000000..7f56280
--- /dev/null
+++ b/accounts/templates/register.html
@@ -0,0 +1,22 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit %}
+{%- set title = 'Account erstellen' %}
+{%- set no_login_message = true %}
+{%- block content %}
+<p>Hier kannst du dir einen Spline-Account erstellen.</p>
+<p>
+ Da der Benutzername von möglichst vielen Diensten verarbeitet werden
+ können soll, sind nur normale Buchstaben (keine Umlaute), Zahlen und
+ Bindestriche erlaubt (beim ersten Zeichen nur Buchstaben).
+</p>
+<p>
+ Bitte such dir deinen Benutzernamen gut aus. Er kann später nicht mehr
+ geändert werden.
+</p>
+<form action="{{ url_for('register') }}" method="post" class="form-horizontal">
+ {{ render_field(form.username, autofocus="autofocus") }}
+ {{ render_field(form.mail) }}
+ {{ render_field(form.question) }}
+ {{ render_submit(value='E-Mail-Adresse bestätigen')}}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/register_complete.html b/accounts/templates/register_complete.html
new file mode 100644
index 0000000..633f446
--- /dev/null
+++ b/accounts/templates/register_complete.html
@@ -0,0 +1,23 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_submit %}
+{%- set title = 'Account erstellen' %}
+{%- set no_login_message = true %}
+{%- block content %}
+<form action="{{ url_for('register_complete', token=token) }}" method="post" class="form-horizontal">
+ <p>
+ Deine E-Mail-Adresse wurde erfolgreich bestätigt.
+ Bitte setze nun ein Passwort, um die Registrierung abzuschließen.
+ </p>
+ <div class="control-group">
+ <div class="control-label">Benutzername</div>
+ <div class="controls"><input readonly="readonly" value="{{ username }}" /></div>
+ </div>
+ <div class="control-group">
+ <div class="control-label">E-Mail-Adresse</div>
+ <div class="controls"><input readonly="readonly" value="{{ mail }}" /></div>
+ </div>
+ {{ render_field(form.password, autofocus="autofocus") }}
+ {{ render_field(form.password_confirm) }}
+ {{ render_submit(value='Registrieren')}}
+</form>
+{%- endblock %}
diff --git a/accounts/templates/settings.html b/accounts/templates/settings.html
new file mode 100644
index 0000000..dcae7ff
--- /dev/null
+++ b/accounts/templates/settings.html
@@ -0,0 +1,62 @@
+{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field, render_csrf, render_submit %}
+{%- set title = 'Einstellungen' %}
+{%- block content %}
+<form action="{{ url_for('settings') }}" method="post" class="form-horizontal">
+ <h2>Globale Einstellungen ändern</h2>
+ {{ render_field(form.mail) }}
+ <p></p>
+ {{ render_field(form.old_password) }}
+ {{ render_field(form.password) }}
+ {{ render_field(form.password_confirm) }}
+ {{ render_csrf(form) }}
+ {{ render_submit(value='Speichern',name='submit_main') }}
+
+ <h2>Dienste verwalten</h2>
+ <p>
+ Standardmäßig kannst du dich auf allen teilnehmenden Diensten mit dem
+ oben konfigurierten allgemeinen Passwort einloggen.
+ </p>
+ <p>
+ Du kannst für jeden Dienst ein eigenes Passwort setzen. Das empfiehlt
+ sich zum Beispiel, wenn du einen der Dienste oft unterwegs an fremden
+ Rechnern nutzt.
+ </p>
+
+ {%- for service in services %}
+ <div class="service">
+ <h3>
+ {% if service.changed %}
+ {{ form.get_servicedelete(service.id) }}
+ {% else %}
+ {{ form.get_servicedelete(service.id)(disabled=True) }}
+ {% endif %}
+ {{ service.name }}
+ </h3>
+
+ <ul>
+ {%- if service.changed %}
+ <li class="active">eigenes Passwort</li>
+ </li>
+ {%- else %}
+ <li class="inactive">allgemeines Passwort</li>
+ {%- endif %}
+ </ul>
+
+ <div class="form-service">
+ <p>Neues Passwort setzen:</p>
+ {{ render_field(form.get_servicepassword(service.id)) }}
+ {{ render_field(form.get_servicepasswordconfirm(service.id)) }}
+ {{ render_submit(value='Speichern',name='submit_main') }}
+ </div>
+ </div>
+ {%- endfor %}
+ <div class="form-submit-services">
+ <input type="submit" value="selektierte Passwörter zurücksetzen" name="submit_services" />
+ </div>
+</form>
+{%- endblock %}
+
+{% block javascript %}
+ $(document).ready(settings_service_toggle);
+{% endblock %}