|
3 | 3 |
|
4 | 4 | import structlog |
5 | 5 | from csh_ldap import CSHLDAP |
6 | | -from flask import Flask, redirect, render_template, g |
| 6 | +from flask import Flask, redirect, render_template, request, g |
7 | 7 | from flask_migrate import Migrate |
8 | 8 | from flask_gzip import Gzip |
9 | 9 | from flask_pyoidc.flask_pyoidc import OIDCAuthentication |
@@ -56,7 +56,14 @@ def start_of_year(): |
56 | 56 |
|
57 | 57 |
|
58 | 58 | # pylint: disable=C0413 |
59 | | -from .models.models import UserLog |
| 59 | +from .models.models import ( |
| 60 | + CommitteeMeeting, |
| 61 | + MemberCommitteeAttendance, |
| 62 | + MemberHouseMeetingAttendance, |
| 63 | + MemberSeminarAttendance, |
| 64 | + TechnicalSeminar, |
| 65 | + UserLog, |
| 66 | +) |
60 | 67 |
|
61 | 68 |
|
62 | 69 | # Configure Logging |
@@ -159,6 +166,32 @@ def health(): |
159 | 166 | return {'status': 'ok'} |
160 | 167 |
|
161 | 168 |
|
| 169 | +@app.route("/gatekeep/<username>") |
| 170 | +def gatekeep_status(username): |
| 171 | + token = request.headers.get("X-VOTE-TOKEN","") |
| 172 | + if token != app.config["VOTE_TOKEN"]: |
| 173 | + return "Users cannot access this page", 403 |
| 174 | + # number of committee meetings attended |
| 175 | + c_meetings = len([m.meeting_id for m in |
| 176 | + MemberCommitteeAttendance.query.filter( |
| 177 | + MemberCommitteeAttendance.uid == username |
| 178 | + ) if CommitteeMeeting.query.filter( |
| 179 | + CommitteeMeeting.id == m.meeting_id).first().approved]) |
| 180 | + # technical seminar total |
| 181 | + t_seminars = len([s.seminar_id for s in |
| 182 | + MemberSeminarAttendance.query.filter( |
| 183 | + MemberSeminarAttendance.uid == username |
| 184 | + ) if TechnicalSeminar.query.filter( |
| 185 | + TechnicalSeminar.id == s.seminar_id).first().approved]) |
| 186 | + # house meeting total |
| 187 | + h_meetings = len([(m.meeting_id, m.attendance_status) for m in |
| 188 | + MemberHouseMeetingAttendance.query.filter( |
| 189 | + MemberHouseMeetingAttendance.uid == username)]) |
| 190 | + result = c_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6 |
| 191 | + return {"result": result}, 200 |
| 192 | + |
| 193 | + |
| 194 | + |
162 | 195 | @app.errorhandler(404) |
163 | 196 | @app.errorhandler(500) |
164 | 197 | @auth.oidc_auth("default") |
|
0 commit comments