1 from flask import Flask, send_from_directory, abort, g, render_template, request, redirect, url_for, flash, \
3 from flask_sqlalchemy import SQLAlchemy
4 from sqlalchemy.engine import create_engine
6 import wradmin.template_helper
7 from wradmin.app import app, db, admin_permission, login_manager
8 from wradmin.controllers.rodelbahn import RodelbahnController
9 from wradmin.controllers.gasthaus import GasthausController
10 from wradmin.controllers.bericht import BerichtController
11 from wradmin.controllers.coordtool import CoordtoolController
12 from wradmin.auth import password_is_correct
13 from wradmin.auth.forms import LoginForm
14 from flask_login import LoginManager, current_user, login_required, login_user, logout_user
15 from flask_principal import Principal, Permission, RoleNeed, identity_changed, identity_loaded, Identity, \
16 AnonymousIdentity, UserNeed
20 def _before_request():
26 return render_template('index.html')
29 @app.route("/rodelbahn/list")
32 return RodelbahnController().list()
35 @app.route("/rodelbahn/view/<int:id>")
37 @admin_permission.require(403)
38 def rodelbahn_view(id):
39 return RodelbahnController().view(id)
42 @app.route("/rodelbahn/update")
44 def rodelbahn_update():
45 return RodelbahnController().update()
48 @app.route("/rodelbahn/update_regioncache")
50 def rodelbahn_update_regioncache():
51 return RodelbahnController().update_regioncache()
54 @app.route("/rodelbahn/update_mapcache")
56 def rodelbahn_update_mapcache():
57 return RodelbahnController().update_mapcache()
60 @app.route("/bericht/list")
62 @admin_permission.require(403)
64 return BerichtController().list()
67 @app.route("/bericht/view/<int:id>")
69 @admin_permission.require(403)
71 return BerichtController().view(id)
74 @app.route("/bericht/change_date_invalid/<int:id>", methods=['POST'])
76 @admin_permission.require(403)
77 def bericht_change_date_invalid(id):
78 return BerichtController().change_date_invalid(id)
81 @app.route("/bericht/update_reportcache")
83 def bericht_update_reportcache():
84 return BerichtController().update_reportcache()
87 @app.route("/gasthaus/list")
90 return GasthausController().list()
93 @app.route("/gasthaus/view/<int:id>")
95 def gasthaus_view(id):
96 return GasthausController().view(id)
99 @app.route("/gasthaus/update")
101 def gasthaus_update():
102 return GasthausController().update()
105 @app.route("/coordtool/index")
107 def coordtool_index():
108 return CoordtoolController().index()
111 @app.route("/coordtool/convert", methods=['POST'])
113 def coordtool_convert():
114 return CoordtoolController().convert()
117 @app.route("/login", methods=['GET', 'POST'])
120 if form.validate_on_submit():
121 user = db.session.query(wradmin.model.MwUser).filter_by(user_name=form.user_name.data).first()
122 if user is not None and password_is_correct(form.password.data, user.user_password.decode()):
123 login_user(user, form.remember_me.data)
124 identity_changed.send(current_app._get_current_object(), identity=Identity(user.get_id()))
125 next = request.args.get('next')
126 if next is None or not next.startswith('/'):
127 next = url_for('index')
128 flash('Sie sind nun angemeldet.')
129 return redirect(next)
130 flash('Ungülter Benutzername oder ungültiges Passwort.')
131 return render_template('auth/login.html', form=form)
134 @app.route("/logout")
137 for key in ('identity.name', 'identity.auth_type'):
138 session.pop(key, None)
139 identity_changed.send(current_app._get_current_object(), identity=AnonymousIdentity())
140 flash('Sie wurden ausgeloggt.')
141 return redirect(url_for('index'))
144 @login_manager.user_loader
145 def user_loader(user_id):
146 return wradmin.db.session.query(wradmin.model.MwUser).get(user_id)
149 @identity_loaded.connect_via(app)
150 def on_identity_loaded(sender, identity):
151 identity.user = current_user
152 user_id = current_user.get_id()
153 if user_id is not None:
154 identity.provides.add(UserNeed(user_id))
155 if wradmin.db.session.query(wradmin.model.MwUserGroups).get((user_id, 'sysop')) is not None:
156 identity.provides.add(RoleNeed('admin'))