Example #1
0
def createUser():
    try:
        new_user = request.get_json()
    except:
        return badRequest('no details provided')

    if 'username' not in new_user or 'email' not in new_user or 'password' not in new_user:
        return badRequest('no username, password or email')

    username_object = User.query.filter_by(
        username=new_user['username']).first()
    email_object = User.query.filter_by(email=new_user['email']).first()

    if email_object and username_object:
        return badRequest('email address  and username already exists!')
    if username_object:
        return badRequest('username already exists!')
    if email_object:
        return badRequest('email address already used!')

    User(new_user['firstname'], new_user['lastname'], new_user['username'],
         new_user['email'], new_user['password'], new_user['institution'],
         new_user['department'], new_user['programme']).save()

    return jsonify({'message': 'User Registered'})
Example #2
0
def upload():
    if 'input_file' not in request.files:
        return badRequest('no input file')
    file = request.files['input_file']

    if Project.allowed_file(file.filename):

        errors = []
        for field in ['project_title', 'authors']:
            if request.form.get(field) is None:
                errors.append(f"{field} field missing in request")
        if errors != []:
            return badRequest(errors)

        filename = secure_filename(file.filename)
        new_project = Project()
        new_project.owner = current_user.id
        new_project.authors = request.form.get('authors')
        new_project.title = request.form.get('project_title')
        new_project.hashFilename(filename)
        new_project.file_data = file.read()
        new_project.pdf_page_count = request.form.get('pdf_page_count')
        db.session.add(new_project)
        db.session.commit()
        return jsonify('upload success'), 201

    return errorResponse(415, 'upload a .pdf file!')
Example #3
0
def updateUser(username):
    student = User.query.filter_by(username=username).first()
    if student is None:
        return badRequest('user does not exist')

    if request.method == 'POST':
        try:
            request.get_json()
        except:
            return badRequest('content-type must be json')

        data = request.get_json()
        if data == {}:
            return badRequest('no details provided')

        if current_user.username != student.username:
            return errorResponse(401, 'You cannot perform this action')

        if data:
            for key in data:
                setattr(student, key, data[key])

            db.session.commit()
        return jsonify({'message': 'user updated'})
    elif request.method == 'GET':
        return jsonify({'username': student.username, 'email': student.email})
Example #4
0
def login():
    try:
        request.get_json()
    except:
        return badRequest('content-type must be json')

    login_data = request.get_json()
    if login_data == {}:
        return badRequest('no details provided')

    email = login_data.get('email')
    password = login_data.get('password')
    user = User.query.filter_by(email=email).first()

    if not user:
        return badRequest('no user exists with such email')

    if check_password_hash(user.pwhash, password):
        token = str(user.generate_auth_token())
        login_user(user, remember=login_data.get('remember_me'))
        return jsonify({
            'login': '******',
            'token': token
        })
    return badRequest('password is incorrect')
Example #5
0
def resetPassword(token):
    if current_user.is_authenticated:
        return badRequest('user already logged in')
    user = User.verifyPasswordResetToken(token)
    if not user:
        return badRequest('invalid or expired token')
    try:
        new_password = request.get_json['new_password']
    except:
        return badRequest('no details provided')

    user.setResetPassword(new_password)
    db.session.commit()
    return jsonify({'message', 'reset success'}), 200
Example #6
0
def search():
    q = request.args.get('q')
    if q is None:
        return badRequest('no query provided')
    projects = Project.query.whoosh_search(q).all()
    users = User.query.whoosh_search(q).all()

    for user in users:
        for project in user.projects:
            projects.append(project)

    if projects is None:
        return jsonify({'message': 'No project uploaded yet!'})

    output = []
    for project in projects:
        project_data = {}
        project_data['title'] = project.title
        project_data['authors'] = project.authors
        project_data['supervisor'] = project.supervisor
        project_data['tags'] = project.tags
        project_data['filename'] = project.filename
        project_data['size'] = len(project.file_data)
        project_data['date_created'] = project.date_created
        project_data['pdf_page_count'] = project.pdf_page_count

        output.append(project_data)

    if output == []:
        return jsonify({'no match found'})

    return jsonify(output)
Example #7
0
def requestPasswordReset():
    try:
        req_data = request.get_json()
    except:
        return badRequest('no details provided')

    if 'email' not in req_data:
        return badRequest('user email required')
    user = User.query.filter_by(email=req_data['email']).first()
    if user:
        try:
            sendPaswordRequest(user)
            return jsonify({'message': 'please check your email'})
        except:
            return errorResponse(502, 'mail not sent')
    return badRequest('email not registered')
Example #8
0
def getUserUploads(username):
    student = User.query.filter_by(username=username).first()
    if student is None:
        return badRequest('user does not exist')

    if g.current_user.id != student.id:
        return errorResponse(401, 'You cannot perform this action')

    #user = User.query.filter_by(username=username).first_or_404()
    projects = Project.query.filter_by(author=g.current_user)\
        .order_by(Project.submit_date.desc())

    if projects is None:
        return jsonify({'message': 'No project uploaded yet!'})

    output = []
    for project in projects:
        project_data = {}
        project_data['title'] = project.title
        project_data['authors'] = project.authors
        project_data['filename'] = project.filename
        project_data['size'] = len(project.file_data)
        project_data['date_created'] = project.date_created
        project_data['pdf_page_count'] = project.pdf_page_count
        output.append(project_data)

    return jsonify(output)
Example #9
0
def createUser():
    try:
        request.get_json()
    except:
        return badRequest('content-type must be json')

    new_user = request.get_json()
    if new_user == {}:
        return badRequest('no details provided')

    if 'username' not in new_user or 'email' not in new_user or 'password' not in new_user:
        return badRequest('no username, password or email')

    if len(new_user['password']) < 1:
        return badRequest('password must be at least a characters long!')

    username_object = User.query.filter_by(
        username=new_user['username']).first()
    email_object = User.query.filter_by(email=new_user['email']).first()

    if email_object and username_object:
        return badRequest('email address  and username already exists!')
    if username_object:
        return badRequest('username already exists!')
    if email_object:
        return badRequest('email address already used!')

    User(new_user['firstname'], new_user['lastname'], new_user['username'],
         new_user['email'], new_user['password'], new_user['institution'],
         new_user['department']).save()

    return jsonify({'message': 'User Registered'}), 201
Example #10
0
def upload():
    if 'input_file' not in request.files:
        return badRequest('no input file')
    file = request.files['input_file']

    if Project.allowed_file(file.filename):
        errors = []
        for field in ['project_title', 'authors']:
            if request.form.get(field) is None:
                errors.append(f"{field} field missing in request")
        if errors != []:
            return badRequest(errors)
        try:
            date_in_req = datetime.strptime(request.form.get('date_created'),
                                            '%Y-%m-%d')
        except:
            return badRequest('invalid date format. expected "yyyy-mm-dd"')

        filename = secure_filename(file.filename)
        new_project = Project()
        #try:
        new_project.owner = g.current_user.id
        new_project.authors = request.form.get('authors')
        new_project.title = request.form.get('project_title')
        new_project.supervisor = request.form.get('supervisor')
        new_project.tags = request.form.get('tags')
        new_project.date_created = date_in_req
        new_project.hashFilename(filename)
        #new_project.author = g.current_user

        try:
            new_project.file_data = file.read()
        except:
            return jsonify({"message": "file not found"})

        new_project.pdf_page_count = request.form.get('pdf_page_count')

        db.session.add(new_project)
        db.session.commit()
        return jsonify('upload success'), 201
        #except:
        #return jsonify({"message":"failed"})

    return errorResponse(415, 'upload a .pdf file!')
Example #11
0
def getUserUploads(username):
    student = User.query.filter_by(username=username).first()
    if student is None:
        return badRequest('user does not exist')

    if current_user.username != student.username:
        return errorResponse(403, 'You cannot perform this action')

    user = User.query.filter_by(username=username).first_or_404()
    payload = Project.query.filter_by(author=user)\
        .order_by(Project.submit_date.desc())

    return jsonify(payload)