Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions conditional/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import structlog
from csh_ldap import CSHLDAP
from flask import Flask, redirect, render_template, g
from flask import Flask, redirect, render_template, request, g
from flask_migrate import Migrate
from flask_gzip import Gzip
from flask_pyoidc.flask_pyoidc import OIDCAuthentication
Expand Down Expand Up @@ -56,7 +56,14 @@ def start_of_year():


# pylint: disable=C0413
from .models.models import UserLog
from .models.models import (
CommitteeMeeting,
MemberCommitteeAttendance,
MemberHouseMeetingAttendance,
MemberSeminarAttendance,
TechnicalSeminar,
UserLog,
)


# Configure Logging
Expand Down Expand Up @@ -159,6 +166,35 @@ def health():
return {'status': 'ok'}


@app.route("/gatekeep/<username>")
def gatekeep_status(username):
token = request.headers.get("X-VOTE-TOKEN","")
if token != app.config["VOTE_TOKEN"]:
return "Users cannot access this page", 403
# number of directorship meetings attended
d_meetings = len([m.meeting_id for m in
MemberCommitteeAttendance.query.filter(
MemberCommitteeAttendance.uid == username
) if CommitteeMeeting.query.filter(
CommitteeMeeting.id == m.meeting_id).first().approved])
# technical seminar total
t_seminars = len([s.seminar_id for s in
MemberSeminarAttendance.query.filter(
MemberSeminarAttendance.uid == username
) if TechnicalSeminar.query.filter(
TechnicalSeminar.id == s.seminar_id).first().approved])
# house meeting total
h_meetings = len([(m.meeting_id, m.attendance_status) for m in
MemberHouseMeetingAttendance.query.filter(
MemberHouseMeetingAttendance.uid == username)])
result = d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6
return {"result": result,
"h_meetings": h_meetings,
"c_meetings": d_meetings,
"t_seminars": t_seminars}, 200



@app.errorhandler(404)
@app.errorhandler(500)
@auth.oidc_auth("default")
Expand Down
4 changes: 2 additions & 2 deletions conditional/util/member.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from datetime import datetime

from conditional import start_of_year
from conditional import gatekeep_status, start_of_year
from conditional.models.models import CommitteeMeeting
from conditional.models.models import CurrentCoops
from conditional.models.models import FreshmanEvalData
Expand Down Expand Up @@ -32,8 +32,8 @@ def get_voting_members():
on_coop = set(member.uid for member in CurrentCoops.query.filter(
CurrentCoops.date_created > start_of_year(),
CurrentCoops.semester == semester).all())

voting_list = list(active_members - intro_members - on_coop)
voting_list = list(username for username in voting_list if gatekeep_status(username))

passed_fall = FreshmanEvalData.query.filter(
FreshmanEvalData.freshman_eval_result == "Passed",
Expand Down
3 changes: 3 additions & 0 deletions config.env.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@

# General config
DUES_PER_SEMESTER = env.get("CONDITIONAL_DUES_PER_SEMESTER", 80)

# Vote config
VOTE_TOKEN = env.get("CONDITIONAL_VOTE_TOKEN", "")