Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
7 changes: 4 additions & 3 deletions conditional/blueprints/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from conditional.util.auth import get_user
from conditional.util.flask import render_template
from conditional.util.housing import get_queue_position
from conditional.util.ldap import ldap_get_active_member_uids
from conditional.util.ldap import ldap_get_active_member_uids, ldap_is_active, ldap_is_bad_standing, ldap_is_uid_active, ldap_is_uid_bad_standing
from conditional.util.major_project import get_project_list
from conditional.util.member import gatekeep_values, get_freshman_data, get_voting_members, \
get_cm, get_hm, is_gatekeep_active, req_cm
Expand Down Expand Up @@ -44,8 +44,9 @@ def display_dashboard(user_dict=None):

data = {}
data['username'] = uid
data['active'] = user_dict_is_active(user_dict)
data['bad_standing'] = user_dict_is_bad_standing(user_dict)

data['active'] = ldap_is_uid_active(uid)
data['bad_standing'] = ldap_is_uid_bad_standing(uid)
data['onfloor'] = on_floor
data['voting'] = bool(uid in can_vote)

Expand Down
9 changes: 7 additions & 2 deletions conditional/util/ldap.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ def _ldap_get_group_member_uids(group: str) -> list[str]:
def _ldap_is_member_of_group(member: CSHMember, group: str) -> bool:
return ldap.get_group(group).check_member(member)

def _ldap_is_uid_member_of_group(member: str, group: str) -> bool:
uids = ldap.get_group(group).get_member_uids()
return member in uids

def _ldap_add_member_to_group(account: CSHMember, group: str):
if not _ldap_is_member_of_group(account, group):
ldap.get_group(group).add_member(account, dn=False)


def _ldap_remove_member_from_group(account: CSHMember, group: str):
if _ldap_is_member_of_group(account, group):
ldap.get_group(group).del_member(account, dn=False)
Expand Down Expand Up @@ -69,16 +71,19 @@ def ldap_get_roomnumber(account) -> str:
except AttributeError:
return ""


@service_cache(maxsize=128)
def ldap_is_active(account) -> bool:
return _ldap_is_member_of_group(account, 'active')

def ldap_is_uid_active(uid: str) -> bool:
return _ldap_is_uid_member_of_group(uid, 'active')

@service_cache(maxsize=128)
def ldap_is_bad_standing(account) -> bool:
return _ldap_is_member_of_group(account, 'bad_standing')

def ldap_is_uid_bad_standing(uid: str) -> bool:
return _ldap_is_uid_member_of_group(uid, 'bad_standing')

@service_cache(maxsize=128)
def ldap_is_alumni(account) -> bool:
Expand Down
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion requirements.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ blinker~=1.4
boto3==1.35.99
botocore==1.35.99
click~=8.4.2
csh-ldap>=2.5.5
csh-ldap>=2.5.8
Flask~=3.1.0
Flask-Migrate~=4.1.0
Flask-Gzip~=0.2
Expand Down
34 changes: 19 additions & 15 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# This file was autogenerated by uv via the following command:
# uv pip compile requirements.in
alembic==1.18.4
alembic==1.18.5
# via
# -r requirements.in
# flask-migrate
annotated-types==0.7.0
annotated-types==0.8.0
# via pydantic
astroid==3.3.11
# via
Expand All @@ -24,22 +24,22 @@ botocore==1.35.99
# s3transfer
build==1.5.0
# via pip-tools
certifi==2026.6.17
certifi==2026.7.22
# via
# requests
# sentry-sdk
cffi==2.0.0
cffi==2.1.1
# via cryptography
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
click==8.4.2
# via
# -r requirements.in
# flask
# pip-tools
cryptography==49.0.0
cryptography==50.0.0
# via oic
csh-ldap==2.5.5
csh-ldap==2.5.8
# via -r requirements.in
defusedxml==0.7.1
# via oic
Expand Down Expand Up @@ -67,7 +67,7 @@ flask-sqlalchemy==3.1.1
# flask-migrate
future==1.0.0
# via pyjwkest
greenlet==3.5.2
greenlet==3.5.4
# via sqlalchemy
gunicorn==25.3.0
# via -r requirements.in
Expand Down Expand Up @@ -114,18 +114,20 @@ oic==1.6.1
# via
# -r requirements.in
# flask-pyoidc
packaging==26.2
packaging==26.3
# via
# build
# gunicorn
# wheel
pip==26.2.1
# via pip-tools
pip-tools==7.5.3
# via -r requirements.in
platformdirs==4.10.0
platformdirs==4.11.1
# via pylint
psycopg2-binary==2.9.12
# via -r requirements.in
pyasn1==0.6.3
pyasn1==0.6.4
# via
# pyasn1-modules
# python-ldap
Expand All @@ -141,7 +143,7 @@ pydantic==2.13.4
# via pydantic-settings
pydantic-core==2.46.4
# via pydantic
pydantic-settings==2.14.2
pydantic-settings==2.15.0
# via oic
pyjwkest==1.4.4
# via oic
Expand All @@ -166,8 +168,10 @@ requests==2.34.2
# pyjwkest
s3transfer==0.10.4
# via boto3
sentry-sdk[flask]==2.63.0
sentry-sdk==2.63.0
# via -r requirements.in
setuptools==83.0.0
# via pip-tools
six==1.17.0
# via
# -r requirements.in
Expand All @@ -182,9 +186,9 @@ srvlookup==3.0.0
# via csh-ldap
structlog==25.5.0
# via -r requirements.in
tomlkit==0.15.0
tomlkit==0.15.1
# via pylint
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# alembic
# pydantic
Expand Down
Loading