-# http://flask.pocoo.org/
-# FLASK_APP=wradmin FLASK_DEBUG=1 WRADMIN_SETTINGS=development.cfg python3 -m flask run
-# FLASK_APP=wradmin WRADMIN_SETTINGS=production.cfg python3 -m flask run
-from flask import Flask, send_from_directory, abort, g, render_template
+from flask import Flask, send_from_directory, abort, g, render_template, request, redirect, url_for, flash
from sqlalchemy.engine import create_engine
import wradmin.model
-from wradmin.genshi import render_genshi_template
+import wradmin.template_helper
from wradmin.controllers.rodelbahn import RodelbahnController
from wradmin.controllers.gasthaus import GasthausController
from wradmin.controllers.bericht import BerichtController
from wradmin.controllers.coordtool import CoordtoolController
+from wradmin.auth import password_is_correct
+from wradmin.auth.forms import LoginForm
+from flask_login import LoginManager, current_user, login_required, login_user, logout_user
app = Flask(__name__)
app.config.from_envvar('WRADMIN_SETTINGS')
wradmin.model.init_model(create_engine(app.config['DATABASE_URI']))
-app.jinja_env.globals.update(h=wradmin.genshi.PylonsHelper())
+app.jinja_env.globals.update(h=wradmin.template_helper.PylonsHelper())
+login_manager = LoginManager(app)
+login_manager.login_view = "login"
+
+
+@app.before_request
+def _before_request():
+ g.user = current_user
@app.teardown_appcontext
def rodelbahn_update_regioncache():
return RodelbahnController().update_regioncache()
+@app.route("/rodelbahn/update_mapcache")
+def rodelbahn_update_mapcache():
+ return RodelbahnController().update_mapcache()
@app.route("/bericht/list")
def bericht_list():
return BerichtController().change_date_invalid(id)
+@app.route("/bericht/update_reportcache")
+def bericht_update_reportcache():
+ return BerichtController().update_reportcache()
+
+
@app.route("/gasthaus/list")
def gasthaus_list():
return GasthausController().list()
@app.route("/coordtool/convert", methods=['POST'])
def coordtool_convert():
return CoordtoolController().convert()
+
+
+@app.route("/login", methods=['GET', 'POST'])
+def login():
+ form = LoginForm()
+ if form.validate_on_submit():
+ user = wradmin.model.meta.Session.query(wradmin.model.MwUser).filter_by(user_name=form.user_name.data).first()
+ if user is not None and password_is_correct(form.password.data, user.user_password.decode()):
+ login_user(user, form.remember_me.data)
+ next = request.args.get('next')
+ if next is None or not next.startswith('/'):
+ next = url_for('index')
+ flash('Sie sind nun angemeldet.')
+ return redirect(next)
+ flash('Ungülter Benutzername oder ungültiges Passwort.')
+ return render_template('auth/login.html', form=form)
+
+
+@app.route("/logout")
+def logout():
+ logout_user()
+ flash('Sie wurden ausgeloggt.')
+ return redirect(url_for('index'))
+
+
+@login_manager.user_loader
+def user_loader(user_id):
+ return wradmin.model.meta.Session.query(wradmin.model.MwUser).get(user_id)