Skip to content

Commit e854df6

Browse files
committed
Allowed checks, signed packets check
1 parent 6da5157 commit e854df6

File tree

5 files changed

+65
-31
lines changed

5 files changed

+65
-31
lines changed

packet/packet.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@
22

33

44
def sign(signer_username, freshman_username):
5-
freshman = Freshman.query.filter_by(rit_username=freshman_username).first()
6-
if freshman is None:
5+
freshman_signed = Freshman.query.filter_by(rit_username=freshman_username).first()
6+
if freshman_signed is None:
77
return False
8-
packet = freshman.current_packet()
8+
packet = freshman_signed.current_packet()
99
if packet is None:
1010
return False
1111
if not packet.is_open():
1212
return False
1313

14+
# Make sure only on floor freshmen can sign packets
15+
freshman_signer = Freshman.query.filter_by(rit_username=signer_username).first()
16+
if freshman_signer:
17+
if not freshman_signer.onfloor:
18+
return False
19+
1420
upper_signature = UpperSignature.query.filter(UpperSignature.member == signer_username).first()
1521
fresh_signature = FreshSignature.query.filter(FreshSignature.freshman_username == signer_username).first()
1622

@@ -28,7 +34,8 @@ def sign(signer_username, freshman_username):
2834
def get_signatures(freshman_username):
2935
packet = Freshman.query.filter_by(rit_username=freshman_username).first().current_packet()
3036
eboard = UpperSignature.query.filter_by(packet_id=packet.id, eboard=True).order_by(UpperSignature.signed.desc())
31-
upper_signatures = UpperSignature.query.filter_by(packet_id=packet.id, eboard=False).order_by(UpperSignature.signed.desc())
37+
upper_signatures = UpperSignature.query.filter_by(packet_id=packet.id, eboard=False).order_by(
38+
UpperSignature.signed.desc())
3239
fresh_signatures = FreshSignature.query.filter_by(packet_id=packet.id).order_by(FreshSignature.signed.desc())
3340
misc_signatures = MiscSignature.query.filter_by(packet_id=packet.id)
3441
return {'eboard': eboard,

packet/routes/shared.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from packet import auth, app
44
from packet.models import Freshman, Packet
55
from packet.packet import get_signatures, get_number_required, get_number_signed
6-
from packet.utils import before_request
6+
from packet.utils import before_request, signed_packet
77

88

99
@app.route("/packet/<uid>")
@@ -14,8 +14,9 @@ def freshman_packet(uid, info=None):
1414
signatures = get_signatures(uid)
1515
required = sum(get_number_required(uid).values())
1616
signed = sum(get_number_signed(uid).values())
17+
packet_signed = signed_packet(info['uid'], uid)
1718
return render_template("packet.html", info=info, signatures=signatures, uid=uid, required=required, signed=signed,
18-
freshman=freshman)
19+
freshman=freshman, packet_signed=packet_signed)
1920

2021

2122
@app.route("/packets")

packet/templates/active_packets.html

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,20 @@ <h3 class="page-title">Active Packets</h3>
3939
<td>
4040
{{ packet.signatures_received() }}
4141
</td>
42-
<td class="sign-packet" align="right">
43-
{# if not signed #}
44-
<button class="btn btn-primary sign-button"
45-
data-freshman_uid="{{ packet.freshman.rit_username }}"
46-
data-freshman_name="{{ packet.freshman.name }}">Sign
47-
</button>
48-
{# else if signed #}
49-
<button class="btn btn-primary" disabled="disabled"><i
50-
class="fa fa-check"></i>&nbsp;Signed
51-
</button>
52-
{# endif #}
53-
</td>
42+
{% if info.onfloor or info.realm == "csh" %}
43+
<td class="sign-packet" align="right">
44+
{% if not packet_signed %}
45+
<button class="btn btn-primary sign-button"
46+
data-freshman_uid="{{ freshman.rit_username }}"
47+
data-freshman_name="{{ freshman.name }}">Sign
48+
</button>
49+
{% else %}
50+
<button class="btn btn-primary" disabled="disabled"><i
51+
class="fa fa-check"></i>&nbsp;Signed
52+
</button>
53+
{% endif %}
54+
</td>
55+
{% endif %}
5456
</tr>
5557
{% endif %}
5658
{% endfor %}

packet/templates/packet.html

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ <h3 class="page-title">{{ freshman.name }}</h3>
99
</div>
1010
<div>
1111
Signatures: {{ signed }}/{{ required }}
12-
{# if not signed #}
13-
<button class="btn btn-primary sign-button"
14-
data-freshman_uid="{{ freshman.rit_username }}"
15-
data-freshman_name="{{ freshman.name }}">Sign
16-
</button>
17-
{# else if signed #}
18-
<button class="btn btn-primary" disabled="disabled"><i
19-
class="fa fa-check"></i>&nbsp;Signed
20-
</button>
21-
{# endif #}
12+
{% if info.onfloor or info.realm == "csh" %}
13+
{% if not packet_signed %}
14+
<button class="btn btn-primary sign-button"
15+
data-freshman_uid="{{ freshman.rit_username }}"
16+
data-freshman_name="{{ freshman.name }}">Sign
17+
</button>
18+
{% else %}
19+
<button class="btn btn-primary" disabled="disabled"><i
20+
class="fa fa-check"></i>&nbsp;Signed
21+
</button>
22+
{% endif %}
23+
{% endif %}
2224
</div>
2325
<div id="eval-blocks">
2426
<div id="eval-table">

packet/utils.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Credit to Liam Middlebrook and Ram Zallan
22
# https://github.com/liam-middlebrook/gallery
3-
from functools import wraps
3+
from functools import wraps, lru_cache
44

55
import requests
66
from flask import session
@@ -11,7 +11,7 @@
1111
ldap_is_onfloor,
1212
ldap_get_roomnumber,
1313
ldap_get_groups)
14-
from packet.models import Freshman
14+
from packet.models import Freshman, FreshSignature, Packet, UpperSignature, MiscSignature
1515

1616
INTRO_REALM = "https://sso.csh.rit.edu/auth/realms/intro"
1717

@@ -24,7 +24,8 @@ def wrapped_function(*args, **kwargs):
2424
if session["id_token"]["iss"] == INTRO_REALM:
2525
info = {
2626
"realm": "intro",
27-
"uid": uid
27+
"uid": uid,
28+
"onfloor": is_on_floor(uid)
2829
}
2930
else:
3031
uuid = str(session["userinfo"].get("sub", ""))
@@ -93,6 +94,27 @@ def parse_account_year(date):
9394
return None
9495

9596

97+
@lru_cache(maxsize=2048)
98+
def is_on_floor(uid):
99+
return (Freshman.query.filter_by(rit_username=uid)).first().onfloor
100+
101+
102+
@lru_cache(maxsize=4096)
103+
def signed_packet(signer, freshman):
104+
packet = Packet.query.filter_by(freshman_username=freshman).first()
105+
freshman_signature = FreshSignature.query.filter_by(packet=packet, freshman_username=signer, signed=True).first()
106+
upper_signature = UpperSignature.query.filter_by(packet=packet, member=signer, signed=True).first()
107+
misc_signature = MiscSignature.query.filter_by(packet=packet, member=signer).first()
108+
109+
if freshman_signature is not None:
110+
return freshman_signature.signed
111+
if upper_signature is not None:
112+
return upper_signature.signed
113+
if misc_signature is not None:
114+
return misc_signature
115+
return False
116+
117+
96118
@app.context_processor
97119
def utility_processor():
98120
# pylint: disable=bare-except

0 commit comments

Comments
 (0)