Exemplo n.º 1
0
def faculty_toggle_enabled():
    faculty_id = request.args(0)
    if (faculty_id == None):
        if (session.back):
            redirect(session.back)
        else:
            redirect(URL('faculty', 'manage_faculty'))

    current_user = Faculty.GetUsername(faculty_id)

    status_action = "Change Status"

    faculty = db(db.faculty_info.user_id == faculty_id).select().first()
    if (faculty == None):
        message = 'Invalid Faculty!'
    else:
        if (faculty.account_enabled == True):
            # Disable
            Faculty.DisableAccount(faculty_id)
            message = "Account disabled."
            #message += AD.GetErrorString()
            status_action = 'Disable Account'
        else:
            # Enable
            Faculty.EnableAccount(faculty_id)
            message = "Account enabled."
            status_action = 'Enable Account'
    #message += Faculty.GetPassword(faculty_id)
    return dict(message=message,
                current_user=current_user,
                status_action=status_action)
Exemplo n.º 2
0
def faculty_canvas_quota():
    faculty_id = request.args(0)
    if (faculty_id == None):
        if (session.back):
            redirect(session.back)
        else:
            redirect(URL('faculty', 'manage_faculty'))

    current_user = Faculty.GetUsername(faculty_id)

    row = db(db.faculty_info.user_id == faculty_id).select().first()
    form = SQLFORM(db.faculty_info,
                   row,
                   showid=False,
                   fields=["faculty_canvas_quota"]).process()

    if (form.accepted):
        # Saved
        quota = request.vars.get('faculty_canvas_quota', '1')
        Canvas.SetQuota(current_user, quota)
        msg = "Settings Saved!"
        if (len(Canvas._errors) > 0):
            msg += Canvas.GetErrorString()
        response.flash = msg

    return dict(form=form, current_user=current_user)
Exemplo n.º 3
0
def faculty_toggle_laptop_logs():
    faculty_id = request.args(0)
    account_id = request.args(1)
    if (faculty_id == None or account_id == None):
        if (session.back):
            redirect(session.back)
        else:
            redirect(URL('faculty', 'manage_faculty'))

    current_user = Faculty.GetUsername(faculty_id)

    status_action = "Change Status"
    auth = current.auth  # Grab the current auth object

    # Add to the group
    if (auth.has_membership(role='Laptop Logs', user_id=account_id) == True):
        status_action = "Removing Laptop Log Rights"
        auth.del_membership(auth.id_group(role='Laptop Logs'),
                            user_id=account_id)
    else:
        status_action = "Adding Laptop Log Rights"
        auth.add_membership('Laptop Logs', user_id=account_id)
    message = status_action
    return dict(message=message,
                current_user=current_user,
                status_action=status_action)
Exemplo n.º 4
0
def changepassword():
    # See if this form has been disabled
    disabled = AppSettings.GetValue("disable_faculty_self_change_password",
                                    "False")
    # print(disabled)
    if disabled is True:
        form = "Feature disabled!"
        return dict(form=form)

    form = SQLFORM.factory(
        Field('old_password', 'password'),
        Field(
            'new_password',
            'password',
            requires=[
                IS_NOT_EMPTY(),
                IS_STRONG(
                    min=6,
                    special=1,
                    upper=1,
                    error_message=
                    'minimum 6 characters, and at least 1 uppercase character, 1 lower case character, 1 number, and 1 special character'
                )
            ]),
        Field('confirm_new_password',
              'password',
              requires=IS_EXPR('value==%s' %
                               repr(request.vars.get('new_password', None)),
                               error_message="Password fields don't match")),
        submit_button="Change Password").process()

    if (form.accepted):
        old_pw = request.vars.get('old_password')
        pw = request.vars.get('new_password', '')
        user_id = Faculty.GetUserIDFromUsername(auth.user.username)
        curr_password = Faculty.GetPassword(user_id)
        if (curr_password != old_pw):
            response.flash = "Incorrect old password!"
        elif (pw != ""):
            ret = Faculty.SetPassword(user_id, pw)
            if (ret != ""):
                response.flash = ret
            else:
                response.flash = "Password Changed."
    elif (form.errors):
        response.flash = "Unable to set new password"
    return dict(form=form)
Exemplo n.º 5
0
def refresh_all_ad_logins(run_from="UI"):
    # Go to the AD server and refresh all student and staff AD login times
    ret = ""

    # Might be longer running - make sure to commit so we don't leave databases locked
    db.commit()

    # Update the last login value for all users (students and faculty)
    if AD._ldap_enabled is not True:
        ret = "[AD Disabled]"
        return ret
    if AD.ConnectAD() is not True:
        ret = "[AD Connection Error]" + AD.GetErrorString()
        return ret

    # Grab list of students
    rows = db(db.student_info).select(db.student_info.user_id)
    for row in rows:
        # ret += "UID: " + row.user_id
        ll = Student.GetLastADLoginTime(row.user_id)
        # if (ll == None):
        #    ret += "None"
        # else:
        #    ret += str(ll)
        db(db.student_info.user_id == row.user_id).update(ad_last_login=ll)
        db.commit()

    # Grab a list of faculty
    rows = db(db.faculty_info).select(db.faculty_info.user_id)
    for row in rows:
        # ret += "UID: " + row.user_id
        ll = Faculty.GetLastADLoginTime(row.user_id)
        # if (ll == None):
        #    ret += "None"
        # else:
        #    ret += str(ll)
        db(db.faculty_info.user_id == row.user_id).update(ad_last_login=ll)
        db.commit()

    rows = None
    ad_errors = AD.GetErrorString()
    ret = "Done."

    # Have to call commit in tasks if changes made to the db
    db.commit()
    return ret
Exemplo n.º 6
0
def faculty_enrollment():
    faculty_id = request.args(0)
    if (faculty_id == None):
        if (session.back):
            redirect(session.back)
        else:
            redirect(URL('faculty', 'manage_faculty'))

    current_user = Faculty.GetUsername(faculty_id)

    user = db(db.faculty_info.user_id == faculty_id).select().first()
    query = None
    if (user != None):
        query = (db.faculty_enrollment.parent_id == user['id'])

    fields = (
        db.faculty_enrollment.course_code,
        db.faculty_enrollment.enrollment_status,
        db.faculty_enrollment.enrolled_on,
    )

    #links = [dict(header=T('Enrollment'),body=lambda row: A(Student.GetEnrolledClassesString(row.user_id), _href=URL('faculty', 'student_enrollment', args=[row.user_id], user_signature=True)) ),
    #         ]

    form = SQLFORM.grid(query,
                        fields=fields,
                        orderby=db.faculty_enrollment.course_code,
                        searchable=False,
                        create=False,
                        deletable=False,
                        paginate=50,
                        csv=False,
                        details=False,
                        editable=False,
                        links=None,
                        links_placement='right',
                        links_in_grid=True)

    return dict(form=form, current_user=current_user)
Exemplo n.º 7
0
def UpdateLastADLogin():
    ret = ""
    # Update the last login value for all users (students and faculty)
    if (AD.ConnectAD() != True):
        ret = "[AD Disabled]" + AD.GetErrorString()
        return ret

    # Grab list of students
    rows = db(db.student_info).select(db.student_info.user_id)
    for row in rows:
        #ret += "UID: " + row.user_id
        ll = Student.GetLastADLoginTime(row.user_id)
        #if (ll == None):
        #    ret += "None"
        #else:
        #    ret += str(ll)
        db(db.student_info.user_id == row.user_id).update(ad_last_login=ll)
        pass
    db.commit()

    # Grab a list of faculty
    rows = db(db.faculty_info).select(db.faculty_info.user_id)
    for row in rows:
        #ret += "UID: " + row.user_id
        ll = Faculty.GetLastADLoginTime(row.user_id)
        #if (ll == None):
        #    ret += "None"
        #else:
        #    ret += str(ll)
        db(db.faculty_info.user_id == row.user_id).update(ad_last_login=ll)
        pass
    db.commit()

    rows = None
    ad_errors = AD.GetErrorString()
    ret = "Done."
    return locals()
Exemplo n.º 8
0
def faculty_change_password():
    faculty_id = request.args(0)
    if (faculty_id == None):
        if (session.back):
            redirect(session.back)
        else:
            redirect(URL('faculty', 'manage_faculty'))

    current_user = Faculty.GetUsername(faculty_id)

    default_pw_form = SQLFORM.factory(
        submit_button="Set Default Password",
        _name="default_pw_form").process(formname="default_pw_form")

    custom_pw_form = SQLFORM.factory(Field(
        'new_password',
        'password',
        requires=[
            IS_NOT_EMPTY(),
            IS_STRONG(
                min=6,
                special=1,
                upper=1,
                error_message=
                'minimum 6 characters, and at least 1 uppercase character, 1 lower case character, and 1 special character'
            )
        ]),
                                     Field('confirm_new_password',
                                           'password',
                                           requires=IS_EXPR(
                                               'value==%s' % repr(
                                                   request.vars.get(
                                                       'new_password', None)),
                                               error_message=
                                               "Password fields don't match")),
                                     submit_button="Set New Password",
                                     _name="custom_pw_form").process(
                                         formname="custom_pw_form")

    if (default_pw_form.accepted):
        new_pw = AppSettings.GetValue('faculty_password_pattern',
                                      'FID<user_id>#')
        # Replace the possible values in this string with real info
        new_pw = Faculty.process_config_params(faculty_id,
                                               new_pw,
                                               is_username=False,
                                               row=None)
        msg = Faculty.SetPassword(faculty_id, new_pw)
        if msg == "":
            response.flash = "Default Password Set!"
        else:
            response.flash = msg

    if (custom_pw_form.accepted):
        pw = request.vars.get('new_password', '')
        if (pw != ""):
            ret = Faculty.SetPassword(faculty_id, pw)
            if (ret != ""):
                response.flash = ret
            else:
                response.flash = "Password Changed."
    elif (custom_pw_form.errors):
        response.flash = "Unable to set new password"

    return dict(default_pw_form=default_pw_form,
                custom_pw_form=custom_pw_form,
                current_user=current_user)
Exemplo n.º 9
0
def manage_faculty():

    # Set back link
    session.back = URL(args=request.args, vars=request.get_vars, host=True)

    #SQLFORM.factory(Field('item_cat'),widget=SQLFORM.widget.autocomplete(request, db.cat.name))
    #SQLFORM.factory(Field('item_cat',db.cat),widget=SQLFORM.widget.autocomplete(request, db.cat.name, id_field=db.cat.id) )
    #id_field=db.student_info.user_id
    choose_faculty_form = SQLFORM.factory(Field(
        'faculty_name',
        'string',
        widget=SQLFORM.widgets.autocomplete(request,
                                            db.faculty_info.faculty_name,
                                            limitby=(0, 10),
                                            min_length=1)),
                                          submit_button="Find")

    query = db.faculty_info

    db.faculty_info.import_classes.readable = False
    db.faculty_info.faculty_ad_quota.readable = False
    db.faculty_info.faculty_canvas_quota.readable = False
    db.faculty_info.account_enabled.readable = False
    db.faculty_info.faculty_password.readable = False
    db.faculty_info.faculty_guid.readable = False
    db.faculty_info.sheet_name.readable = False
    db.faculty_info.id.readable = False
    #db.faculty_info.account_id.readable=False
    db.faculty_info.user_id.label = "ID"
    db.faculty_info.account_id.label = "User Name"
    db.faculty_info.additional_fields.readable = False

    fields = (
        db.faculty_info.user_id,
        db.faculty_info.account_id,
        db.faculty_info.faculty_name,
        db.faculty_info.import_classes,
        db.faculty_info.faculty_ad_quota,
        #db.faculty_info.faculty_canvas_quota,
        db.faculty_info.account_enabled,
        db.faculty_info.account_added_on,
        db.faculty_info.account_updated_on,
        #db.faculty_info.account_id,
        db.faculty_info.ad_last_login,
    )
    maxtextlengths = {
        'faculty_info.account_added_on': 24,
        'faculty_info.account_updated_on': 24,
        'faculty_info.ad_last_login': 24
    }

    links = [
        #dict(header=T('Last AD Logon'),body=lambda row: Faculty.GetLastADLoginTime(row.user_id ) ),
        dict(header=T('Enrollment'),
             body=lambda row: A(Faculty.GetEnrolledClassesString(row.user_id),
                                _href=URL('faculty',
                                          'faculty_enrollment',
                                          args=[row.user_id],
                                          user_signature=True))),
        #dict(header=T('Canvas Quota'),body=lambda row: A(GetDisplaySize(row.faculty_canvas_quota), _href=URL('faculty', 'faculty_canvas_quota', args=[row.user_id])) ),
        dict(header=T('AD Quota'),
             body=lambda row:
             A(GetDisplaySize(row.faculty_ad_quota),
               _href=URL('faculty', 'faculty_ad_quota', args=[row.user_id]))),
        dict(header=T('Account Enabled'),
             body=lambda row: A(row.account_enabled,
                                _href=URL('faculty',
                                          'faculty_toggle_enabled',
                                          args=[row.user_id]))),
        dict(header=T('Change Password'),
             body=lambda row: A('Change Password',
                                _href=URL('faculty',
                                          'faculty_change_password',
                                          args=[row.user_id]))),
        dict(
            header=T('Allow Import'),
            body=lambda row: A(GetImportPermissionStatus(row.account_id),
                               _href=URL('faculty',
                                         'faculty_toggle_import',
                                         args=[row.user_id, row.account_id]))),
        dict(
            header=T('Allow Admin'),
            body=lambda row: A(GetAdminPermissionStatus(row.account_id),
                               _href=URL('faculty',
                                         'faculty_toggle_admin',
                                         args=[row.user_id, row.account_id]))),
        dict(
            header=T('Allow Laptop Logs'),
            body=lambda row: A(GetLaptopLogsPermissionStatus(row.account_id),
                               _href=URL('faculty',
                                         'faculty_toggle_laptop_logs',
                                         args=[row.user_id, row.account_id]))),
    ]

    user_grid = SQLFORM.grid(query,
                             fields=fields,
                             orderby=db.faculty_info.faculty_name,
                             searchable=True,
                             create=False,
                             deletable=False,
                             paginate=50,
                             csv=False,
                             details=False,
                             editable=False,
                             links=links,
                             links_placement='right',
                             links_in_grid=True,
                             maxtextlengths=maxtextlengths)

    return dict(choose_faculty_form=choose_faculty_form, user_grid=user_grid)