예제 #1
0
def login():
    create_forms()
    login_error = None

    if g.login_form.validate_on_submit():
        try:
            user = auth.login(g.login_form.username.data, g.login_form.password.data)
            if user:
                # if ldap data returned, set in session
                session['username'], session['name'] = user
                # send updated view with json
                json = {
                        '#content': render_template('content.html'),
                        '#nav-main': render_template('nav.html')
                        }
                return jsonify(**json)
            else:
                # otherwise it's a bad login
                session.clear()
                # reinitialize csrf
                create_forms()
                login_error = "Invalid Username or Password"
        except:
            # if something goes wrong don't die
            traceback.print_exc()
            login_error = "Server Error. Please try again later"

    # send the updated view with errors
    json = {'#login-wrapper': render_template('login.html', login_error=login_error)}
    return jsonify(**json)
예제 #2
0
def add():
    create_forms()
    search_error = None
    selection = None

    if g.search_form.validate_on_submit():
        try:
            s = Student(g.search_form.search.data, session.get('students', []))
            if s is None:
                search_error = "No Student(s) found"
            elif isinstance(s, list):
                selection = s                                                                                                                    
                search_error = "Multiple students match search. Please select below"
            else:
                # if single student is returned add to session
                session['students'] = sorted(session.get('students', []) + [s], key=lambda x:x["name"])
                search_error = "{0} ({1}) added to list".format(s['name'], s['username'])
        except SIZELIMIT_EXCEEDED:
            search_error = "Your search returned too many results. Please narrow your search"
        except:
            # if something goes wrong don't die
            traceback.print_exc()
            search_error = "Server Error. Please try again later"

    # keep the same search after clicking selection button
    if request.form.get('original', None):
        g.search_form.search.data = request.form.get('original')

    # send the updated view with errors
    json = {'#content': render_template('content.html', search_error=search_error, selection=selection)}
    return jsonify(**json)
예제 #3
0
def logout():
    session.clear()
    # reinitialize csrf
    create_forms()

    # return updated view
    json = {
            '#content': render_template('content.html'),
            '#nav-main': render_template('nav.html')
            }
    return jsonify(**json)
예제 #4
0
def index():
    create_forms()
    if session.get('export_error'):
        g.export_form.filename.errors = session['export_error']
        del session['export_error']
        g.scroll_to = "#export-form-wrapper"
    if session.get('import_error'):
        g.import_form.upload.errors = session['import_error']
        del session['import_error']
        g.scroll_to = "#import-wrapper"
    return render_template('index.html')
예제 #5
0
def export_file():
    create_forms()

    if g.export_form.validate_on_submit():
        # send file
        filename = set_filename(g.export_form.filename.data)
        response = make_response(render_template('list.lsc', session=session))
        response.mimetype = 'application/lsc'
        response.headers['Content-Disposition'] = 'attachment; filename={0}.lsc'.format(filename)
        return response
    else:
        session['export_error'] = g.export_form.filename.errors
        return redirect(url_for('index'))
예제 #6
0
def delete():
    create_forms()

    if g.delete_form.validate_on_submit():
        if g.delete_form.username.data == 'all':
            session.pop('students', None)
        else:
            session['students'] = filter(
                    lambda x: x['username'] != g.delete_form.username.data,
                    session.get('students', []))

    # send the updated view with errors
    json = {'#result-wrapper': render_template('result.html', selection=None)}
    return jsonify(**json)
예제 #7
0
def import_file():
    create_forms()
    if g.import_form.validate_on_submit():
        set_filename(request.files['upload'].filename)
        text = request.files['upload'].read()
        s = [Student(x) for x in IMPORT_REGEX.findall(text)]
        s = [x for x in s if isinstance(x, dict)]
        if not s:
            session['import_error'] = ['List did not contain any valid students.']
        else:
            for student in s:
                if student not in session.get('students', []):
                    session['students'] = sorted(session.get('students', []) + [student], key=lambda x:x["name"])

        return redirect(url_for('index'))
    else:
        session['import_error'] = g.import_form.upload.errors
        return redirect(url_for('index'))