def create_packet(): """ Create a new packet. Body parameters: { start_date: the start date of the packets in MM/DD/YYYY format freshmen: [ { rit_username: string name: string onfloor: boolean } ] } """ # Only allow evals to create new packets username = str(session['userinfo'].get('preferred_username', '')) if not _ldap_is_member_of_group(ldap_get_member(username), 'eboard-evaluations'): return 'Forbidden: not Evaluations Director', 403 base_date = datetime.strptime(request.json['start_date'], '%m/%d/%Y').date() freshmen_in_post = { freshman.rit_username: freshman for freshman in map(POSTFreshman, request.json['freshmen']) } create_new_packets(base_date, freshmen_in_post) return dumps('Done'), 201
def sign(signer_username, freshman_username): if not valid_signature(signer_username, freshman_username): return False packet = get_freshman(freshman_username).current_packet() upper_signature = UpperSignature.query.filter( UpperSignature.member == signer_username, UpperSignature.packet == packet).first() fresh_signature = FreshSignature.query.filter( FreshSignature.freshman_username == signer_username, FreshSignature.packet == packet).first() if upper_signature: if ldap_is_intromember(ldap_get_member(signer_username)): return False upper_signature.signed = True elif fresh_signature: # Make sure only on floor freshmen can sign packets freshman_signer = get_freshman(signer_username) if freshman_signer and not freshman_signer.onfloor: return False fresh_signature.signed = True else: db.session.add(MiscSignature(packet=packet, member=signer_username)) db.session.commit() clear_cache() return True
def sync_freshman(): """ Create or update freshmen entries from a list Body parameters: [ { rit_username: string name: string onfloor: boolean } ] """ # Only allow evals to create new frosh username = str(session['userinfo'].get('preferred_username', '')) if not _ldap_is_member_of_group(ldap_get_member(username), 'eboard-evaluations'): return 'Forbidden: not Evaluations Director', 403 freshmen_in_post = { freshman.rit_username: freshman for freshman in map(POSTFreshman, request.json) } sync_freshman_list(freshmen_in_post) return dumps('Done'), 200
def wrapped_function(*args, **kwargs): if app.config["REALM"] == "csh": username = str(session["userinfo"].get("preferred_username", "")) if ldap_is_intromember(ldap_get_member(username)): app.logger.warn("Stopped intro member {} from accessing upperclassmen packet".format(username)) return redirect(app.config["PROTOCOL"] + app.config["PACKET_INTRO"], code=301) return func(*args, **kwargs)
def sync_ldap(): # Only allow evals to sync ldap username = str(session['userinfo'].get('preferred_username', '')) if not _ldap_is_member_of_group(ldap_get_member(username), 'eboard-evaluations'): return 'Forbidden: not Evaluations Director', 403 sync_with_ldap() return dumps('Done'), 201
def wrapped_function(*args, **kwargs): if app.config['REALM'] == 'csh': username = str(session['userinfo'].get('preferred_username', '')) if ldap_is_intromember(ldap_get_member(username)): app.logger.warn( 'Stopped intro member {} from accessing upperclassmen packet' .format(username)) return redirect(app.config['PROTOCOL'] + app.config['PACKET_INTRO'], code=301) return func(*args, **kwargs)
def get_member_info(uid): account = ldap_get_member(uid) member_info = { "user_obj": account, "group_list": ldap_get_groups(account), "uid": account.uid, "name": account.cn, "active": ldap_is_active(account), "onfloor": ldap_is_onfloor(account), "room": ldap_get_roomnumber(account), } return member_info
def wrapped_function(*args, **kwargs): uid = str(session['userinfo'].get('preferred_username', '')) if session['id_token']['iss'] == INTRO_REALM: info = { 'realm': 'intro', 'uid': uid, 'onfloor': is_freshman_on_floor(uid), 'admin': False # It's always false if frosh } else: member = ldap_get_member(uid) info = {'realm': 'csh', 'uid': uid, 'admin': ldap_is_evals(member)} kwargs['info'] = info return func(*args, **kwargs)
def wrapped_function(*args, **kwargs): if app.config['REALM'] == 'csh': username = str(session['userinfo'].get('preferred_username', '')) member = ldap_get_member(username) if not ldap_is_evals(member): app.logger.warn( 'Stopped member {} from accessing admin UI'.format( username)) return redirect(app.config['PROTOCOL'] + app.config['PACKET_UPPER'], code=301) else: return redirect(app.config['PROTOCOL'] + app.config['PACKET_INTRO'], code=301) return func(*args, **kwargs)
def get_member_info(uid): account = ldap_get_member(uid) member_info = { "user_obj": account, "group_list": ldap_get_groups(account), "uid": account.uid, "ritUid": parse_rit_uid(account.ritDn), "name": account.cn, "active": ldap_is_active(account), "onfloor": ldap_is_onfloor(account), "room": ldap_get_roomnumber(account), "hp": account.housingPoints, "plex": account.plex, "rn": ldap_get_roomnumber(account), "birthday": parse_date(account.birthday), "memberSince": parse_date(account.memberSince), "lastlogin": parse_date(account.krblastsuccessfulauth), "year": parse_account_year(account.memberSince) } return member_info
def sign(signer_username, freshman_username): if signer_username == freshman_username: return False freshman_signed = Freshman.query.filter_by( rit_username=freshman_username).first() if freshman_signed is None: return False packet = freshman_signed.current_packet() if packet is None or not packet.is_open(): return False upper_signature = UpperSignature.query.filter( UpperSignature.member == signer_username, UpperSignature.packet == packet).first() fresh_signature = FreshSignature.query.filter( FreshSignature.freshman_username == signer_username, FreshSignature.packet == packet).first() if upper_signature: if ldap_is_intromember(ldap_get_member(signer_username)): return False upper_signature.signed = True elif fresh_signature: # Make sure only on floor freshmen can sign packets freshman_signer = Freshman.query.filter_by( rit_username=signer_username).first() if freshman_signer and not freshman_signer.onfloor: return False fresh_signature.signed = True else: db.session.add(MiscSignature(packet=packet, member=signer_username)) db.session.commit() # Clear functions that read signatures cache get_number_signed.cache_clear() get_signatures.cache_clear() get_upperclassmen_percent.cache_clear() return True
def get_display_name(username): try: member = ldap_get_member(username) return member.cn + " (" + member.uid + ")" except: return username
def get_csh_name(username): try: member = ldap_get_member(username) return member.cn + ' (' + member.uid + ')' except: return username