]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/__init__.py
Use flask_sqlalchemy to manage the database connection.
[philipp/winterrodeln/wradmin.git] / wradmin / __init__.py
1 from flask import Flask, send_from_directory, abort, g, render_template, request, redirect, url_for, flash, \
2     session, current_app
3 from flask_sqlalchemy import SQLAlchemy
4 from sqlalchemy.engine import create_engine
5 import wradmin.model
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
17
18
19 @app.before_request
20 def _before_request():
21     g.user = current_user
22
23
24 @app.route("/")
25 def index():
26     return render_template('index.html')
27
28
29 @app.route("/rodelbahn/list")
30 @login_required
31 def rodelbahn_list():
32     return RodelbahnController().list()
33
34
35 @app.route("/rodelbahn/view/<int:id>")
36 @login_required
37 @admin_permission.require(403)
38 def rodelbahn_view(id):
39     return RodelbahnController().view(id)
40
41
42 @app.route("/rodelbahn/update")
43 @login_required
44 def rodelbahn_update():
45     return RodelbahnController().update()
46
47
48 @app.route("/rodelbahn/update_regioncache")
49 @login_required
50 def rodelbahn_update_regioncache():
51     return RodelbahnController().update_regioncache()
52
53
54 @app.route("/rodelbahn/update_mapcache")
55 @login_required
56 def rodelbahn_update_mapcache():
57     return RodelbahnController().update_mapcache()
58
59
60 @app.route("/bericht/list")
61 @login_required
62 @admin_permission.require(403)
63 def bericht_list():
64     return BerichtController().list()
65
66
67 @app.route("/bericht/view/<int:id>")
68 @login_required
69 @admin_permission.require(403)
70 def bericht_view(id):
71     return BerichtController().view(id)
72
73
74 @app.route("/bericht/change_date_invalid/<int:id>", methods=['POST'])
75 @login_required
76 @admin_permission.require(403)
77 def bericht_change_date_invalid(id):
78     return BerichtController().change_date_invalid(id)
79
80
81 @app.route("/bericht/update_reportcache")
82 @login_required
83 def bericht_update_reportcache():
84     return BerichtController().update_reportcache()
85
86
87 @app.route("/gasthaus/list")
88 @login_required
89 def gasthaus_list():
90     return GasthausController().list()
91
92
93 @app.route("/gasthaus/view/<int:id>")
94 @login_required
95 def gasthaus_view(id):
96     return GasthausController().view(id)
97
98
99 @app.route("/gasthaus/update")
100 @login_required
101 def gasthaus_update():
102     return GasthausController().update()
103
104
105 @app.route("/coordtool/index")
106 @login_required
107 def coordtool_index():
108     return CoordtoolController().index()
109
110
111 @app.route("/coordtool/convert", methods=['POST'])
112 @login_required
113 def coordtool_convert():
114     return CoordtoolController().convert()
115
116
117 @app.route("/login", methods=['GET', 'POST'])
118 def login():
119     form = LoginForm()
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)
132
133
134 @app.route("/logout")
135 def logout():
136     logout_user()
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'))
142
143
144 @login_manager.user_loader
145 def user_loader(user_id):
146     return wradmin.db.session.query(wradmin.model.MwUser).get(user_id)
147
148
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'))