Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
 def get_display_name(username):
     try:
         member = ldap_get_member(username)
         return member.cn + " (" + member.uid + ")"
     except:
         return username
Ejemplo n.º 13
0
def get_csh_name(username):
    try:
        member = ldap_get_member(username)
        return member.cn + ' (' + member.uid + ')'
    except:
        return username