Exemple #1
0
def render_template(request, template_name, **kwargs):
    user_name = request.headers.get('x-webauth-user')

    # TODO maybe use the webauth request decorator

    if EvalSettings.query.first() is None:
        db.session.add(EvalSettings())
        db.session.flush()
        db.session.commit()

    lockdown = EvalSettings.query.first().site_lockdown
    is_active = ldap_is_active(user_name)
    is_alumni = ldap_is_alumni(user_name)
    is_eboard = ldap_is_eboard(user_name)
    is_financial = ldap_is_financial_director(user_name)
    is_eval = ldap_is_eval_director(user_name)
    is_intromember = ldap_is_intromember(user_name)

    if is_eval:
        lockdown = False

    return flask_render_template(template_name,
                                 lockdown=lockdown,
                                 is_active=is_active,
                                 is_alumni=is_alumni,
                                 is_eboard=is_eboard,
                                 is_eval_director=is_eval,
                                 is_financial_director=is_financial,
                                 is_intromember=is_intromember,
                                 **kwargs)
def display_member_management():
    log = logger.new(request=request)
    log.info('Display Member Management')

    username = request.headers.get('x-webauth-user')
    account = ldap_get_member(username)

    if not ldap_is_eval_director(account) and not ldap_is_financial_director(
            account):
        return "must be eval director", 403

    member_list = get_members_info()
    onfloor_list = get_onfloor_members()

    co_op_list = [(ldap_get_member(member.uid).displayName, member.semester, member.uid) \
        for member in CurrentCoops.query.filter(
            CurrentCoops.date_created > start_of_year(),
            CurrentCoops.semester != "Neither")]

    freshmen = FreshmanAccount.query
    freshmen_list = []

    for freshman_user in freshmen:  # pylint: disable=not-an-iterable
        freshmen_list.append({
            "id":
            freshman_user.id,
            "name":
            freshman_user.name,
            "onfloor":
            freshman_user.onfloor_status,
            "room":
            "" if freshman_user.room_number is None else
            freshman_user.room_number,
            "eval_date":
            freshman_user.eval_date
        })

    settings = EvalSettings.query.first()
    if settings:
        lockdown = settings.site_lockdown
        intro_form = settings.intro_form_active
        accept_dues_until = settings.accept_dues_until
    else:
        lockdown = False
        intro_form = False
        accept_dues_until = datetime.now()

    return render_template(request,
                           "member_management.html",
                           username=username,
                           active=member_list,
                           num_current=len(member_list),
                           num_active=len(ldap_get_active_members()),
                           num_fresh=len(freshmen_list),
                           num_onfloor=len(onfloor_list),
                           freshmen=freshmen_list,
                           co_op=co_op_list,
                           site_lockdown=lockdown,
                           accept_dues_until=accept_dues_until,
                           intro_form=intro_form)
Exemple #3
0
def member_management_edituser(uid, user_dict=None):
    if not ldap_is_eval_director(user_dict['account']) and not ldap_is_financial_director(user_dict['account']):
        return "must be eval director", 403

    if not uid.isdigit():
        edit_uid(uid, request, user_dict['username'])
    else:
        edit_fid(uid, request)

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200
Exemple #4
0
def display_member_management():
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('frontend', action='display member management')

    user_name = request.headers.get('x-webauth-user')

    if not ldap_is_eval_director(user_name) and not ldap_is_financial_director(
            user_name):
        return "must be eval director", 403

    members = [m['uid'] for m in ldap_get_current_students()]
    member_list, onfloor_number = get_members_info(members)

    freshmen = FreshmanAccount.query
    freshmen_list = []

    for freshman_user in freshmen:
        freshmen_list.append({
            "id":
            freshman_user.id,
            "name":
            freshman_user.name,
            "onfloor":
            freshman_user.onfloor_status,
            "room":
            "" if freshman_user.room_number is None else
            freshman_user.room_number,
            "eval_date":
            freshman_user.eval_date
        })

    settings = EvalSettings.query.first()
    if settings:
        lockdown = settings.site_lockdown
        intro_form = settings.intro_form_active
    else:
        lockdown = False
        intro_form = False

    return render_template(request,
                           "member_management.html",
                           username=user_name,
                           active=member_list,
                           num_current=len(member_list),
                           num_active=len(ldap_get_active_members()),
                           num_fresh=len(freshmen_list),
                           num_onfloor=onfloor_number,
                           freshmen=freshmen_list,
                           site_lockdown=lockdown,
                           intro_form=intro_form)
def display_member_management(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Display Member Management')

    if not ldap_is_eval_director(
            user_dict['account']) and not ldap_is_financial_director(
                user_dict['account']):
        return "must be eval director", 403

    member_list = get_members_info()
    onfloor_list = get_onfloor_members()

    freshmen = FreshmanAccount.query
    freshmen_list = []

    for freshman_user in freshmen:  # pylint: disable=not-an-iterable
        freshmen_list.append({
            "id":
            freshman_user.id,
            "name":
            freshman_user.name,
            "onfloor":
            freshman_user.onfloor_status,
            "room":
            "" if freshman_user.room_number is None else
            freshman_user.room_number,
            "eval_date":
            freshman_user.eval_date
        })

    settings = EvalSettings.query.first()
    if settings:
        lockdown = settings.site_lockdown
        intro_form = settings.intro_form_active
        accept_dues_until = settings.accept_dues_until
    else:
        lockdown = False
        intro_form = False
        accept_dues_until = datetime.now()

    return render_template("member_management.html",
                           username=user_dict['username'],
                           active=member_list,
                           num_current=len(member_list),
                           num_active=len(ldap_get_active_members()),
                           num_fresh=len(freshmen_list),
                           num_onfloor=len(onfloor_list),
                           freshmen=freshmen_list,
                           site_lockdown=lockdown,
                           accept_dues_until=accept_dues_until,
                           intro_form=intro_form)
Exemple #6
0
    def wrapped_func(*args, **kwargs):
        user_name = request.headers.get('x-webauth-user')
        account = ldap_get_member(user_name)
        is_active = ldap_is_active(account)
        is_alumni = ldap_is_alumni(account)
        is_eboard = ldap_is_eboard(account)
        is_financial = ldap_is_financial_director(account)
        is_eval = ldap_is_eval_director(account)

        return func({"user_name": user_name,
                     "is_active": is_active,
                     "is_alumni": is_alumni,
                     "is_eboard": is_eboard,
                     "is_financial": is_financial,
                     "is_eval": is_eval}, *args, **kwargs)
def member_management_financial(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)

    if not ldap_is_financial_director(user_dict['account']):
        return "must be financial director", 403

    post_data = request.get_json()

    if 'acceptDuesUntil' in post_data:
        date = datetime.strptime(post_data['acceptDuesUntil'], "%Y-%m-%d")
        log.info('Changed Dues Accepted Until: {}'.format(date))
        EvalSettings.query.update({'accept_dues_until': date})

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200
def member_management_edituser(uid):

    username = request.headers.get('x-webauth-user')
    account = ldap_get_member(username)

    if not ldap_is_eval_director(account) and not ldap_is_financial_director(
            account):
        return "must be eval director", 403

    if not uid.isdigit():
        edit_uid(uid, request)
    else:
        edit_fid(uid, request)

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200
Exemple #9
0
def render_template(request, template_name, **kwargs):
    user_name = request.headers.get('x-webauth-user')

    # TODO maybe use the webauth request decorator

    if EvalSettings.query.first() is None:
        db.session.add(EvalSettings())
        db.session.flush()
        db.session.commit()
    account = ldap_get_member(user_name)
    lockdown = EvalSettings.query.first().site_lockdown
    accepting_dues = EvalSettings.query.first().accept_dues_until > date.today()
    is_active = ldap_is_active(account)
    is_alumni = ldap_is_alumni(account)
    is_eboard = ldap_is_eboard(account)
    is_financial = ldap_is_financial_director(account)
    is_eval = ldap_is_eval_director(account)
    is_intromember = ldap_is_intromember(account)
    is_rtp = ldap_is_rtp(account)

    cm_review = len(CommitteeMeeting.query.filter(
        CommitteeMeeting.approved == False).all()) # pylint: disable=singleton-comparison
    ts_review = len(TechnicalSeminar.query.filter(
        TechnicalSeminar.approved == False).all()) # pylint: disable=singleton-comparison

    admin_warning = lockdown

    if is_eboard or is_rtp:
        lockdown = False

    return flask_render_template(
        template_name,
        lockdown=lockdown,
        admin_warning=admin_warning,
        accepting_dues=accepting_dues,
        is_active=is_active,
        is_alumni=is_alumni,
        is_eboard=is_eboard,
        is_eval_director=is_eval,
        is_financial_director=is_financial,
        is_intromember=is_intromember,
        is_rtp=is_rtp,
        pending_review=(cm_review + ts_review),
        **kwargs)
Exemple #10
0
def render_template(template_name, user_dict=None, **kwargs):

    if EvalSettings.query.first() is None:
        db.session.add(EvalSettings())
        db.session.flush()
        db.session.commit()
    lockdown = EvalSettings.query.first().site_lockdown
    accepting_dues = EvalSettings.query.first().accept_dues_until > date.today(
    )
    is_active = ldap_is_active(user_dict['account'])
    is_alumni = ldap_is_alumni(user_dict['account'])
    is_eboard = ldap_is_eboard(user_dict['account'])
    is_financial = ldap_is_financial_director(user_dict['account'])
    is_eval = ldap_is_eval_director(user_dict['account'])
    is_intromember = ldap_is_intromember(user_dict['account'])
    is_rtp = ldap_is_rtp(user_dict['account'])

    cm_review = len(
        CommitteeMeeting.query.filter(
            CommitteeMeeting.approved == False).all())  # pylint: disable=singleton-comparison
    ts_review = len(
        TechnicalSeminar.query.filter(
            TechnicalSeminar.approved == False).all())  # pylint: disable=singleton-comparison

    admin_warning = lockdown

    if is_eboard or is_rtp:
        lockdown = False

    return flask_render_template(template_name,
                                 lockdown=lockdown,
                                 admin_warning=admin_warning,
                                 accepting_dues=accepting_dues,
                                 is_active=is_active,
                                 is_alumni=is_alumni,
                                 is_eboard=is_eboard,
                                 is_eval_director=is_eval,
                                 is_financial_director=is_financial,
                                 is_intromember=is_intromember,
                                 is_rtp=is_rtp,
                                 pending_review=(cm_review + ts_review),
                                 **kwargs)
def member_management_edituser(uid):
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('api', action='edit uid user')

    user_name = request.headers.get('x-webauth-user')

    if not ldap_is_eval_director(user_name) and not ldap_is_financial_director(
            user_name):
        return "must be eval director", 403

    post_data = request.get_json()

    if not uid.isdigit():
        edit_uid(uid, user_name, post_data)
    else:
        edit_fid(uid, post_data)

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200
def member_management_getuserinfo(uid):
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('api', action='retrieve user info')

    user_name = request.headers.get('x-webauth-user')

    if not ldap_is_eval_director(user_name) and not ldap_is_financial_director(
            user_name):
        return "must be eval or financial director", 403

    acct = None
    if uid.isnumeric():
        acct = FreshmanAccount.query.filter(FreshmanAccount.id == uid).first()

    # missed hm
    def get_hm_date(hm_id):
        return HouseMeeting.query.filter(
            HouseMeeting.id == hm_id). \
            first().date.strftime("%Y-%m-%d")

    # if fid
    if acct:
        missed_hm = [{
            'date': get_hm_date(hma.meeting_id),
            'id': hma.meeting_id,
            'excuse': hma.excuse,
            'status': hma.attendance_status
        } for hma in FreshmanHouseMeetingAttendance.query.filter(
            FreshmanHouseMeetingAttendance.fid == acct.id and (
                FreshmanHouseMeetingAttendance.attendance_status !=
                attendance_enum.Attended))]

        hms_missed = []
        for hm in missed_hm:
            if hm['status'] != "Attended":
                hms_missed.append(hm)

        return jsonify({
            'id': acct.id,
            'name': acct.name,
            'eval_date': acct.eval_date.strftime("%Y-%m-%d"),
            'missed_hm': hms_missed,
            'onfloor_status': acct.onfloor_status,
            'room_number': acct.room_number,
            'sig_missed': acct.signatures_missed
        }), 200

    if ldap_is_eval_director(user_name):
        missed_hm = [{
            'date': get_hm_date(hma.meeting_id),
            'id': hma.meeting_id,
            'excuse': hma.excuse,
            'status': hma.attendance_status
        } for hma in MemberHouseMeetingAttendance.query.filter(
            MemberHouseMeetingAttendance.uid == uid and (
                MemberHouseMeetingAttendance.attendance_status !=
                attendance_enum.Attended))]

        hms_missed = []
        for hm in missed_hm:
            if hm['status'] != "Attended":
                hms_missed.append(hm)
        return jsonify({
            'name': ldap_get_name(uid),
            'room_number': ldap_get_room_number(uid),
            'onfloor_status': ldap_is_onfloor(uid),
            'housing_points': ldap_get_housing_points(uid),
            'active_member': ldap_is_active(uid),
            'missed_hm': hms_missed,
            'user': '******'
        }), 200
    else:
        return jsonify({
            'name': ldap_get_name(uid),
            'active_member': ldap_is_active(uid),
            'user': '******'
        }), 200
def member_management_getuserinfo(uid, user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Get {}\'s Information'.format(uid))

    if not ldap_is_eval_director(
            user_dict['account']) and not ldap_is_financial_director(
                user_dict['account']):
        return "must be eval or financial director", 403

    acct = None
    if uid.isnumeric():
        acct = FreshmanAccount.query.filter(FreshmanAccount.id == uid).first()

    # missed hm
    def get_hm_date(hm_id):
        return HouseMeeting.query.filter(
            HouseMeeting.id == hm_id). \
            first().date.strftime("%Y-%m-%d")

    # if fid
    if acct:
        missed_hm = [{
            'date': get_hm_date(hma.meeting_id),
            'id': hma.meeting_id,
            'excuse': hma.excuse,
            'status': hma.attendance_status
        } for hma in FreshmanHouseMeetingAttendance.query.filter(
            FreshmanHouseMeetingAttendance.fid == acct.id and (
                FreshmanHouseMeetingAttendance.attendance_status !=
                attendance_enum.Attended))]

        hms_missed = []
        for hm in missed_hm:
            if hm['status'] != "Attended":
                hms_missed.append(hm)

        return jsonify({
            'id': acct.id,
            'name': acct.name,
            'eval_date': acct.eval_date.strftime("%Y-%m-%d"),
            'missed_hm': hms_missed,
            'onfloor_status': acct.onfloor_status,
            'room_number': acct.room_number,
            'sig_missed': acct.signatures_missed
        }), 200

    account = ldap_get_member(uid)

    if ldap_is_eval_director(ldap_get_member(user_dict['username'])):
        missed_hm = [{
            'date': get_hm_date(hma.meeting_id),
            'id': hma.meeting_id,
            'excuse': hma.excuse,
            'status': hma.attendance_status
        } for hma in MemberHouseMeetingAttendance.query.filter(
            MemberHouseMeetingAttendance.uid == uid and (
                MemberHouseMeetingAttendance.attendance_status !=
                attendance_enum.Attended))]

        hms_missed = []
        for hm in missed_hm:
            if hm['status'] != "Attended":
                hms_missed.append(hm)
        return jsonify({
            'name': account.cn,
            'room_number': account.roomNumber,
            'onfloor_status': ldap_is_onfloor(account),
            'housing_points': account.housingPoints,
            'active_member': ldap_is_active(account),
            'missed_hm': hms_missed,
            'user': '******'
        }), 200

    return jsonify({
        'name': account.cn,
        'active_member': ldap_is_active(account),
        'user': '******'
    }), 200
def member_management_edituser(uid):
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('api', action='edit uid user')

    user_name = request.headers.get('x-webauth-user')

    if not ldap_is_eval_director(user_name) and not ldap_is_financial_director(
            user_name):
        return "must be eval director", 403

    post_data = request.get_json()

    if not uid.isdigit():
        active_member = post_data['activeMember']

        if ldap_is_eval_director(user_name):
            logger.info(
                'backend',
                action="edit %s room: %s onfloor: %s housepts %s" %
                (uid, post_data['roomNumber'], post_data['onfloorStatus'],
                 post_data['housingPoints']))
            room_number = post_data['roomNumber']
            onfloor_status = post_data['onfloorStatus']
            housing_points = post_data['housingPoints']

            ldap_set_roomnumber(uid, room_number)
            if onfloor_status:
                ldap_add_member_to_group(uid, "onfloor")
            else:
                ldap_remove_member_from_group(uid, "onfloor")
            ldap_set_housingpoints(uid, housing_points)

        # Only update if there's a diff
        logger.info('backend',
                    action="edit %s active: %s" % (uid, active_member))
        if ldap_is_active(uid) != active_member:
            if active_member:
                ldap_set_active(uid)
            else:
                ldap_set_inactive(uid)

            if active_member:
                db.session.add(SpringEval(uid))
            else:
                SpringEval.query.filter(SpringEval.uid == uid
                                        and SpringEval.active).update(
                                            {'active': False})
            clear_active_members_cache()
    else:
        logger.info(
            'backend',
            action="edit freshman account %s room: %s onfloor: %s eval_date: %s"
            % (uid, post_data['roomNumber'], post_data['onfloorStatus'],
               post_data['evalDate']))

        name = post_data['name']
        room_number = post_data['roomNumber']
        onfloor_status = post_data['onfloorStatus']
        eval_date = post_data['evalDate']

        FreshmanAccount.query.filter(FreshmanAccount.id == uid).update({
            'name':
            name,
            'eval_date':
            datetime.strptime(eval_date, "%Y-%m-%d"),
            'onfloor_status':
            onfloor_status,
            'room_number':
            room_number
        })

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200