summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2016-01-22 19:06:47 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2016-01-25 01:56:06 +0100
commit1ea5dd06424a2a2fb60692513d59591187389021 (patch)
treefe8ebd20ced49d8b8f7c1d94ed0ba2c8d29f5198
parent5fde298d4b705bd256d5510493955ca98a31acdc (diff)
downloadweb-1ea5dd06424a2a2fb60692513d59591187389021.tar.gz
web-1ea5dd06424a2a2fb60692513d59591187389021.tar.bz2
web-1ea5dd06424a2a2fb60692513d59591187389021.zip
Move admin interface into a blueprint
-rw-r--r--app.py75
-rw-r--r--templates/admin/create_account.html (renamed from templates/admin_create_account.html)0
-rw-r--r--templates/admin/disable_account.html (renamed from templates/admin_disable_account.html)0
-rw-r--r--templates/admin/index.html9
-rw-r--r--templates/admin/view_blacklist.html (renamed from templates/admin_view_blacklist.html)4
-rw-r--r--templates/admin_index.html9
-rw-r--r--templates/base.html2
-rw-r--r--views/__init__.py0
-rw-r--r--views/admin/__init__.py90
9 files changed, 104 insertions, 85 deletions
diff --git a/app.py b/app.py
index c29054c..844ea86 100644
--- a/app.py
+++ b/app.py
@@ -8,10 +8,10 @@ from flask import flash, Flask, g, redirect, request, session
from utils import *
from uuid import uuid4
-
-
+from views import admin
app = Flask(__name__)
+app.register_blueprint(admin.bp, url_prefix='/admin')
app.config.from_object('default_settings')
if 'SPLINE_ACCOUNT_WEB_SETTINGS' in os.environ:
app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS')
@@ -280,77 +280,6 @@ def about():
return {}
-@app.route('/admin')
-@templated('admin_index.html')
-def admin():
- return {}
-
-
-@app.route('/admin/create_account', methods=['GET', 'POST'])
-@templated('admin_create_account.html')
-@admin_required
-def admin_create_account():
- form = AdminCreateAccountForm()
- if request.method == 'POST' and form.validate():
- send_register_confirmation_mail(form.username.data, form.mail.data)
-
- flash(u'Mail versandt.', 'success')
- return redirect(url_for('admin'))
- return {'form': form}
-
-@app.route('/admin/view_blacklist')
-@app.route('/admin/view_blacklist/<start>')
-@templated('admin_view_blacklist.html')
-@admin_required
-def admin_view_blacklist(start=''):
- entries = app.username_blacklist
- if start:
- entries = [e for e in entries if e.startswith(start)]
-
- next_letters = set(e[len(start)] for e in entries if len(e) > len(start))
-
- return {
- 'entries': entries,
- 'start': start,
- 'next_letters': next_letters,
- }
-
-
-@app.route('/admin/disable_account', methods=['GET', 'POST'])
-@templated('admin_disable_account.html')
-@admin_required
-def admin_disable_account():
- form = AdminDisableAccountForm()
- if 'uid' in request.args:
- form = AdminDisableAccountForm(username=request.args['uid'])
- if request.method == 'POST' and form.validate():
- random_pw = str(uuid4())
- form.user.change_password(random_pw)
- for service in app.all_services:
- form.user.reset_password(service.id)
-
- oldmail = form.user.attributes['mail']
- mail = app.config['DISABLED_ACCOUNT_MAILADDRESS_TEMPLATE'] % form.user.uid
- form.user.change_email(mail)
-
- g.ldap.update(form.user, as_admin=True)
-
- flash(u'Passwort auf ein zufälliges und Mailadresse auf %s '
- u'gesetzt.' % mail, 'success')
-
- if app.config.get('MAIL_REGISTER_NOTIFY'):
- send_mail(
- app.config['MAIL_REGISTER_NOTIFY'],
- u'[accounts] Benutzer %s deaktiviert' % form.user.uid,
- 'Benutzername: %s\nE-Mail war: %s\n\ndurch: %s\n' % \
- (form.user.uid, oldmail, session['username'])
- )
-
- return redirect(url_for('admin'))
-
- return {'form': form}
-
-
@app.errorhandler(403)
@app.errorhandler(404)
def errorhandler(e):
diff --git a/templates/admin_create_account.html b/templates/admin/create_account.html
index 2a53fd9..2a53fd9 100644
--- a/templates/admin_create_account.html
+++ b/templates/admin/create_account.html
diff --git a/templates/admin_disable_account.html b/templates/admin/disable_account.html
index b6eccda..b6eccda 100644
--- a/templates/admin_disable_account.html
+++ b/templates/admin/disable_account.html
diff --git a/templates/admin/index.html b/templates/admin/index.html
new file mode 100644
index 0000000..722a9ac
--- /dev/null
+++ b/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/templates/admin_view_blacklist.html b/templates/admin/view_blacklist.html
index 4f203f6..bde3f7c 100644
--- a/templates/admin_view_blacklist.html
+++ b/templates/admin/view_blacklist.html
@@ -4,10 +4,10 @@
<nav>
<ul>
{%- if start %}
- <li><a href="{{ url_for('admin_view_blacklist') }}">Alle</a></li>
+ <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>
+ <li><a href="{{ url_for('admin.view_blacklist', start=start+l) }}">{{ l }}</a></li>
{%- endfor %}
</ul>
</nav>
diff --git a/templates/admin_index.html b/templates/admin_index.html
deleted file mode 100644
index 7267493..0000000
--- a/templates/admin_index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{%- 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/templates/base.html b/templates/base.html
index 4123d7f..d6a1726 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -34,7 +34,7 @@
{%- 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') }}">Admin</a></li>
+ <li><a href="{{ url_for('admin.index') }}">Admin</a></li>
{%- endif %}
<li><a href="{{ url_for('logout') }}">Abmelden</a></li>
{%- else %}
diff --git a/views/__init__.py b/views/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/views/__init__.py
diff --git a/views/admin/__init__.py b/views/admin/__init__.py
new file mode 100644
index 0000000..998bf8b
--- /dev/null
+++ b/views/admin/__init__.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+
+from flask import Blueprint
+from flask import current_app, redirect, request, g, flash, url_for
+from uuid import uuid4
+from werkzeug.exceptions import Forbidden
+
+from accounts.utils import templated, send_register_confirmation_mail, send_mail
+from accounts.forms import AdminCreateAccountForm, AdminDisableAccountForm
+
+
+bp = Blueprint('admin', __name__)
+
+
+@bp.before_request
+def restrict_bp_to_admins():
+ if not g.user:
+ raise Forbidden(u'Bitte einloggen!')
+ if g.user.uid not in current_app.config.get('ADMIN_USERS', []):
+ raise Forbidden(u'Du bist kein Admin.')
+
+
+@bp.route('/')
+@templated('admin/index.html')
+def index():
+ return {}
+
+
+@bp.route('/create_account', methods=['GET', 'POST'])
+@templated('admin/create_account.html')
+def create_account():
+ form = AdminCreateAccountForm()
+ if request.method == 'POST' and form.validate():
+ send_register_confirmation_mail(form.username.data, form.mail.data)
+
+ flash(u'Mail versandt.', 'success')
+ return redirect(url_for('admin.index'))
+ return {'form': form}
+
+
+@bp.route('/view_blacklist')
+@bp.route('/view_blacklist/<start>')
+@templated('admin/view_blacklist.html')
+def view_blacklist(start=''):
+ entries = current_app.username_blacklist
+ if start:
+ entries = [e for e in entries if e.startswith(start)]
+
+ next_letters = set(e[len(start)] for e in entries if len(e) > len(start))
+
+ return {
+ 'entries': entries,
+ 'start': start,
+ 'next_letters': next_letters,
+ }
+
+
+@bp.route('/disable_account', methods=['GET', 'POST'])
+@templated('admin/disable_account.html')
+def disable_account():
+ form = AdminDisableAccountForm()
+ if 'uid' in request.args:
+ form = AdminDisableAccountForm(username=request.args['uid'])
+ if request.method == 'POST' and form.validate():
+ random_pw = str(uuid4())
+ form.user.change_password(random_pw)
+ for service in current_app.all_services:
+ form.user.reset_password(service.id)
+
+ oldmail = form.user.attributes['mail']
+ mail = current_app.config['DISABLED_ACCOUNT_MAILADDRESS_TEMPLATE'] % form.user.uid
+ form.user.change_email(mail)
+
+ g.ldap.update(form.user, as_admin=True)
+
+ flash(u'Passwort auf ein zufälliges und Mailadresse auf %s '
+ u'gesetzt.' % mail, 'success')
+
+ if current_app.config.get('MAIL_REGISTER_NOTIFY'):
+ send_mail(
+ current_app.config['MAIL_REGISTER_NOTIFY'],
+ u'[accounts] Benutzer %s deaktiviert' % form.user.uid,
+ 'Benutzername: %s\nE-Mail war: %s\n\ndurch: %s\n' % \
+ (form.user.uid, oldmail, session['username'])
+ )
+
+ return redirect(url_for('admin.index'))
+
+ return {'form': form}