diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2016-01-22 19:06:47 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2016-01-25 01:56:06 +0100 |
commit | 1ea5dd06424a2a2fb60692513d59591187389021 (patch) | |
tree | fe8ebd20ced49d8b8f7c1d94ed0ba2c8d29f5198 | |
parent | 5fde298d4b705bd256d5510493955ca98a31acdc (diff) | |
download | web-1ea5dd06424a2a2fb60692513d59591187389021.tar.gz web-1ea5dd06424a2a2fb60692513d59591187389021.tar.bz2 web-1ea5dd06424a2a2fb60692513d59591187389021.zip |
Move admin interface into a blueprint
-rw-r--r-- | app.py | 75 | ||||
-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.html | 9 | ||||
-rw-r--r-- | templates/admin/view_blacklist.html (renamed from templates/admin_view_blacklist.html) | 4 | ||||
-rw-r--r-- | templates/admin_index.html | 9 | ||||
-rw-r--r-- | templates/base.html | 2 | ||||
-rw-r--r-- | views/__init__.py | 0 | ||||
-rw-r--r-- | views/admin/__init__.py | 90 |
9 files changed, 104 insertions, 85 deletions
@@ -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} |