Ejemplo n.º 1
0
    def get_new_password(user):
        user = Users(user)
        PASSWORD_SIZE = 40

        try:
            users = Users.query.filter(Users.username == user.username,
                                       Users.mail == user.mail).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(users) == 0:
            return get_response(status=HTTPStatus.BAD_REQUEST)

        password = random_string(PASSWORD_SIZE)
        try:
            send_email(user.mail, "[Google Cloud App New Password]",
                       "Hello, your new password is " + password)

            user = users[0]
            user.password = get_hash(password)
            database.session.commit()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        return get_response(status=HTTPStatus.OK)
Ejemplo n.º 2
0
    def patch_user_post(client_request, username, post_id):
        post_id = get_valid_number(post_id)
        if post_id is None:
            return get_response(status=HTTPStatus.NOT_FOUND)

        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        json_fields = [("title", str), ("description", str)]
        user_post_data = extract_request_form_data_dict(client_request)
        if user_post_data is None:
            return get_response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE)

        user_post_json = object_to_dict(user_post_data, json_fields)
        patch_json, patch_image = check_json_dict(user_post_json, json_fields,
                                                  False), None

        if client_request.files.get('image', None) is not None:
            patch_image, response = check_form_data_image(
                client_request, 'image')
            if response is not None:
                return get_response(status=response)

        if patch_json is False and patch_image is None:
            return get_response(status=HTTPStatus.BAD_REQUEST)
        return UsersService.patch_user_post(token, username, post_id,
                                            user_post_json, patch_image)
Ejemplo n.º 3
0
    def patch_user(client_request, username):
        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        json_fields = [("username", str), ("password", str), ("mail", str)]
        user_data = extract_request_form_data_dict(client_request)
        if user_data is None:
            return get_response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE)

        user_json = object_to_dict(user_data, json_fields)
        patch_json, patch_avatar = check_json_dict(user_json, json_fields,
                                                   False), None

        if client_request.files.get('avatar', None) is not None:
            patch_avatar, response = check_form_data_image(
                client_request, 'avatar')
            if response is not None:
                return get_response(status=response)

        if patch_json is False and patch_avatar is None:
            return get_response(status=HTTPStatus.BAD_REQUEST)
        return UsersService.patch_user(token, username,
                                       user_json if patch_json else None,
                                       patch_avatar)
Ejemplo n.º 4
0
    def get_user_post(token, username, post_id):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            posts = Posts.query.filter(Posts.user_id == user.id,
                                       Posts.id == post_id).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(posts) == 0:
            return get_response(status=HTTPStatus.NOT_FOUND)

        post = posts[0]
        try:
            link = sign_url(post.link)
        except:
            link = ""

        return get_response(status=HTTPStatus.OK,
                            response={
                                "id": post.id,
                                "title": post.title,
                                "description": post.description,
                                "link": link
                            })
Ejemplo n.º 5
0
    def add_user(client_request):
        json_fields = [("username", str), ("password", str), ("mail", str)]
        user = extract_request_body_json(client_request)
        if user is None:
            return get_response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE)

        if check_json_dict(user, json_fields) is False:
            return get_response(status=HTTPStatus.BAD_REQUEST)
        return UsersService.add_user(user)
Ejemplo n.º 6
0
    def analyze_post(client_request, username, post_id):
        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        post_id = get_valid_number(post_id)
        if post_id is None:
            return get_response(status=HTTPStatus.NOT_FOUND)

        return UsersService.analyze_post(token, username, post_id)
Ejemplo n.º 7
0
    def delete_user(token, username):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            delete_cloud_storage_folder("user-" + str(user.id))
            database.session.delete(user)
            database.session.commit()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)
        return get_response(status=HTTPStatus.OK)
Ejemplo n.º 8
0
    def login_user(user):
        user = Users(user)

        try:
            users = Users.query.filter(Users.username == user.username,
                                       Users.password == user.password).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(users) == 0:
            return get_response(status=HTTPStatus.UNAUTHORIZED)
        return get_response(status=HTTPStatus.OK,
                            response={"token": users[0].token})
Ejemplo n.º 9
0
    def add_user(user):
        user = Users(user)

        try:
            database.session.add(user)
            database.session.commit()
        except IntegrityError as exception:
            return get_response(status=Users.get_database_exception(exception))
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        return get_response(status=HTTPStatus.CREATED,
                            response={"token": user.token})
Ejemplo n.º 10
0
    def translate_post(client_request, username, post_id):
        language = client_request.args.get("lang", None)
        post_id = get_valid_number(post_id)

        if post_id is None:
            return get_response(status=HTTPStatus.NOT_FOUND)

        if check_language_format(language) is False:
            return get_response(status=HTTPStatus.BAD_REQUEST)

        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        return UsersService.translate_post(token, username, post_id, language)
Ejemplo n.º 11
0
    def get_all_users():
        try:
            users = Users.query.all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(users) == 0:
            return get_response(status=HTTPStatus.NO_CONTENT)

        user_list = []
        for user in users:
            try:
                avatar = sign_url(user.avatar)
            except:
                avatar = ""

            user_list.append({"username": user.username, "avatar": avatar})
        return get_response(status=HTTPStatus.OK,
                            response={"users": user_list})
Ejemplo n.º 12
0
    def add_user_post(token, username, post, image):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        post["user_id"] = user.id
        post = Posts(post)
        try:
            database.session.add(post)
            database.session.commit()

            post.link = get_cloud_storage_image_link(
                'user-{}/image-{}'.format(user.id, post.id), image)
            database.session.commit()
        except IntegrityError as exception:
            return get_response(status=Posts.get_database_exception(exception))
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)
        return get_response(status=HTTPStatus.CREATED)
Ejemplo n.º 13
0
    def locate_post(token, username, post_id, query_data):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            posts = Posts.query.filter(Posts.user_id == user.id,
                                       Posts.id == post_id).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(posts) == 0:
            return get_response(status=HTTPStatus.NOT_FOUND)

        located, response = locate_post(posts[0], query_data)
        if response is not None:
            return response

        return get_response(status=HTTPStatus.OK, response=located)
Ejemplo n.º 14
0
    def translate_post(token, username, post_id, language):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            posts = Posts.query.filter(Posts.user_id == user.id,
                                       Posts.id == post_id).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(posts) == 0:
            return get_response(status=HTTPStatus.NOT_FOUND)

        translated, response = translate_post(posts[0], language)
        if response is not None:
            return response

        return get_response(status=HTTPStatus.OK,
                            response={"translated": translated})
Ejemplo n.º 15
0
    def delete_user_post(token, username, post_id):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            post = Posts.query.filter(Posts.id == post_id).one()
            delete_cloud_storage_content(post.link)
        except NoResultFound:
            return get_response(status=HTTPStatus.NOT_FOUND)
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        try:
            database.session.delete(post)
            database.session.commit()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        return get_response(status=HTTPStatus.OK)
Ejemplo n.º 16
0
def check_user_token(token, username):
    try:
        users = Users.query.filter(Users.username == username).all()
    except:
        return None, get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

    if len(users) == 0:
        return None, get_response(status=HTTPStatus.NOT_FOUND)

    return users[0], None

    try:
        users = Users.query.filter(Users.username == username,
                                   Users.token == token).all()
    except:
        return None, get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

    if len(users) == 0:
        return None, get_response(status=HTTPStatus.FORBIDDEN)
    return users[0], None
Ejemplo n.º 17
0
    def add_user_post(client_request, username):
        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        json_fields = [("title", str), ("description", str)]
        data = extract_request_form_data_dict(client_request)
        if data is None:
            return get_response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE)

        post = {
            "title": data.get("title", None),
            "description": data.get("description", None)
        }
        if check_json_dict(post, json_fields) is False:
            return get_response(status=HTTPStatus.BAD_REQUEST)

        image, response = check_form_data_image(client_request, 'image')
        if response is not None:
            return get_response(status=response)
        return UsersService.add_user_post(token, username, post, image)
Ejemplo n.º 18
0
    def locate_post(client_request, username, post_id):
        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        post_id = get_valid_number(post_id)
        if post_id is None:
            return get_response(status=HTTPStatus.NOT_FOUND)

        zoom = get_valid_number(client_request.args.get("zoom", None))
        width = get_valid_number(client_request.args.get("width", None))
        height = get_valid_number(client_request.args.get("height", None))

        if zoom is None or width is None or height is None:
            return get_response(status=HTTPStatus.BAD_REQUEST)

        return UsersService.locate_post(token, username, post_id, {
            "zoom": zoom,
            "width": width,
            "height": height
        })
Ejemplo n.º 19
0
    def patch_user_post(token, username, post_id, post_json, post_image):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            posts = Posts.query.filter(Posts.user_id == user.id,
                                       Posts.id == post_id).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(posts) == 0:
            return get_response(status=HTTPStatus.NOT_FOUND)
        post = posts[0]

        if post_json is not None:
            post.update_entry(post_json)
            try:
                database.session.commit()
            except IntegrityError as exception:
                return get_response(
                    status=Posts.get_database_exception(exception))
            except:
                return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if post_image is not None:
            post.link = get_cloud_storage_image_link(
                'user-{}/image-{}'.format(user.id, post.id), post_image)
            try:
                database.session.commit()
            except:
                return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        return get_response(status=HTTPStatus.OK)
Ejemplo n.º 20
0
    def get_user_posts(username):
        try:
            users = Users.query.filter(Users.username == username).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(users) == 0:
            return get_response(status=HTTPStatus.NOT_FOUND)

        user = users[0]
        try:
            posts = database.session.query(Users, Posts).filter(
                Users.id == user.id).join(Posts,
                                          Users.id == Posts.user_id).all()
        except:
            return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if len(posts) == 0:
            return get_response(status=HTTPStatus.NO_CONTENT)

        user_posts = []
        for post in posts:
            try:
                try:
                    link = sign_url(post[1].link)
                except:
                    link = ""

                user_posts.append({
                    "id": post[1].id,
                    "title": post[1].title,
                    "description": post[1].description,
                    "link": link
                })
            except:
                pass

        return get_response(status=HTTPStatus.OK,
                            response={"posts": user_posts})
Ejemplo n.º 21
0
    def patch_user(token, username, user_json, user_avatar):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        if user_json is not None:
            user.update_entry(user_json)
            try:
                database.session.commit()
            except IntegrityError as exception:
                return get_response(
                    status=Users.get_database_exception(exception))
            except:
                return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        if user_avatar is not None:
            user.avatar = get_cloud_storage_image_link(
                'user-{}/avatar'.format(user.id), user_avatar)
            try:
                database.session.commit()
            except:
                return get_response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

        return get_response(status=HTTPStatus.OK)
Ejemplo n.º 22
0
    def get_user_info(token, username):
        user, response = check_user_token(token, username)
        if response is not None:
            return response

        try:
            avatar = sign_url(user.avatar)
        except:
            avatar = ""

        return get_response(status=HTTPStatus.OK,
                            response={
                                "user": {
                                    "username": user.username,
                                    "mail": user.mail,
                                    "avatar": avatar
                                }
                            })
Ejemplo n.º 23
0
    def delete_user(client_request, username):
        token = get_request_token(client_request)
        if token is None:
            return get_response(status=HTTPStatus.UNAUTHORIZED)

        return UsersService.delete_user(token, username)