Ejemplo n.º 1
0
def update_user(id):
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = ProfileSchema().load(request_data)

        user = User.find_by_id(id)
        existing_user = User.find_by_identity(data.get('auth')['username'])

        if existing_user is not None:
            if existing_user.id != user.id:
                return bad_request(f'Username already exists.')

        # update user
        user.profile.name = data.get('name')
        user.profile.bio = data.get('bio')
        user.profile.dob = data.get('dob')
        user.username = data.get('auth')['username']
        user.is_active = data.get('auth')['is_active']
        user.is_admin = data.get('auth')['is_admin']
        user.save()

        return jsonify(UserSchema().dump(user))

    # handle errors
    except ValidationError as err:
        return error_response(422, err.messages)
    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')
Ejemplo n.º 2
0
 def test_decode_token(self):
     """ Token decoder decodes a JWT correctly. """
     token = create_token()
     payload = User.decode_auth_token(token)
     user = User.find_by_id(payload.get('id'))
     self.assertTrue(isinstance(user, User))
     self.assertEqual(user.email, '*****@*****.**')
Ejemplo n.º 3
0
def update_profile(id):
    request_data = request.get_json()

    if not request_data:
        return bad_request("No input data provided")

    try:
        data = ProfileSchema().load(request_data)
    except ValidationError as error:
        return error_response(422, error.messages)

    try:
        user = User.find_by_id(id)
        profile = Profile.find_by_id(user.profile.id)

        profile.firstname = data.get('firstname').title()
        profile.lastname = data.get('lastname').title()
        profile.bio = data.get('bio')

        prof = Profile.find_by_username(data.get('username'))

        if prof is not None:
            if prof.user_id != id:
                return bad_request('Username is already taken.')

        profile.username = data.get('username')
        profile.save()

        response = jsonify({'message': 'Successfully updated your profile'})
        response.status_code = 200

        return response

    except Exception:
        return error_response(500, 'Something went wrong, please try again.')
Ejemplo n.º 4
0
def get_user(id):
    user = User.find_by_id(id)
    return {
        'user':
        UserSchema(only=('id', 'email', 'is_active', 'is_admin')).dump(user),
        'profile':
        ProfileSchema(exclude=('id', 'updated_on',
                               'created_on')).dump(user.profile)
    }
Ejemplo n.º 5
0
def delete_profile(id):
    try:
        user = User.find_by_id(id)
        user.delete()

        response = jsonify({'message': 'Successfully deleted your account'})
        response.status_code = 200

        return response
    except Exception:
        return error_response(500, 'Something went wrong, please try again.')
Ejemplo n.º 6
0
def remove_user_permissions(id):
    data = request.get_json()
    user = User.find_by_id(id)

    perms = []
    for id in data.get('perms'):
        perm = Permission.find_by_id(id)
        perms.append(perm)

    user.remove_permissions(perms)
    return jsonify(UserSchema().dump(user))
Ejemplo n.º 7
0
def delete_user(id):
    try:
        user = User.find_by_id(id)

        if user is None:
            return not_found('User does not exist.')

        user.delete()
        return jsonify({'message': 'Successfully deleted user.'})
    except Exception as error:
        return jsonify({'message': error})
Ejemplo n.º 8
0
def remove_group_members(grp_id):
    data = request.get_json()
    group = Group.find_by_id(grp_id)

    users = []
    for id in data.get('users'):
        user = User.find_by_id(id)
        users.append(user)

    group.remove_members(users)
    return jsonify(GroupSchema().dump(group))
Ejemplo n.º 9
0
def unfollow(user, id):
    followed = User.find_by_id(id)

    if not followed:
        return not_found('User not found')

    user.unfollow(followed)

    try:
        user.save()
    except (exc.IntegrityError, ValueError):
        db.session.rollback()
        return server_error('Something went wrong, please try again.')
    else:
        return jsonify(UserSchema(
            many=True, only=('id',)).dump(user.followed.all()))
Ejemplo n.º 10
0
    def wrapper(*args, **kwargs):
        auth_header = request.headers.get('Authorization')

        if not auth_header:
            return error_response(403, message='No authorization.')

        token = auth_header.split(" ")[1]
        payload = User.decode_auth_token(token)

        if not isinstance(payload, dict):
            return error_response(401, message=payload)

        user = User.find_by_id(payload.get('id'))

        if user is None or user.is_active is not True:
            return error_response(401, message='Invalid token.')

        return func(payload.get('id'), *args, **kwargs)
Ejemplo n.º 11
0
def get_profile(id):
    user = User.find_by_id(id)
    return {
        'user': UserSchema(
            exclude=(
                'current_sign_in_ip',
                'current_sign_in_on',
                'last_sign_in_ip',
                'last_sign_in_on',
                'sign_in_count',
                'updated_on',
                'created_on',
            )
        ).dump(user),
        'profile': ProfileSchema(
            exclude=('id', 'created_on', 'updated_on',)
        ).dump(user.profile)
    }
Ejemplo n.º 12
0
def test_decode_token(token):
    """ Token decoder decodes a JWT correctly. """
    payload = User.decode_auth_token(token)
    user = User.find_by_id(payload.get('id'))
    assert isinstance(user, User) is True
    assert user.email == '*****@*****.**'
Ejemplo n.º 13
0
def get_user(id):
    """Get a single user"""
    user = User.find_by_id(id)
    if user is None:
        return not_found('User not found!')
    return jsonify(UserSchema().dump(user))