Exemple #1
0
def user_req():
    """Функция обработки стандартных запросов связанных с пользователями.

    :return: Ответ сервера.
    """
    if request.method == 'GET':
        resp_data = {
            'login': current_user.login,
            'email': current_user.email,
            'name': current_user.name,
            'surname': current_user.surname,
        }
        return get_response(200, True, '', info=resp_data)

    if request.method == 'PUT':
        try:
            req_data = UserUpdateData.parse_raw(request.data)
        except ValueError as error:
            return get_response(400,
                                False,
                                'Проверьте правильность запроса',
                                data=error.errors())
        if req_data.name:
            current_user.name = req_data.name
        if req_data.surname:
            current_user.surname = req_data.surname
        if req_data.email:
            current_user.email = req_data.email
        db.session.commit()
        return get_response(200, True, '')
Exemple #2
0
def registration():
    """Запрос регистрации новых пользователей в системе.

    :return: Ответ сервера, содержащий JWT токен нового пользователя при успешном запросе.
    """
    try:
        req_data = RegData.parse_raw(request.data)
    except ValueError as error:
        return get_response(400,
                            False,
                            'Проверьте правильность запроса',
                            data=error.errors())
    if User.query.filter_by(login=req_data.login).first():
        return get_response(400, False,
                            'Пользователь с таким логином уже существует')
    if User.query.filter_by(email=req_data.email).first():
        return get_response(400, False,
                            'Пользователь с такой почтой уже существует')
    new_user = User()
    new_user.login = req_data.login
    new_user.password = generate_password_hash(req_data.password,
                                               method='sha256')
    new_user.email = req_data.email
    new_user.name = req_data.name
    new_user.surname = req_data.surname
    db.session.add(new_user)
    db.session.commit()
    return get_response(200, False, '', token=new_user.get_token())
Exemple #3
0
def registration():
    try:
        req_data = RegData.parse_raw(request.data)
    except ValueError as error:
        return get_response(400,
                            False,
                            'Проверьте правильность запроса',
                            data=error.errors())
    if User.query.filter_by(telegram_id=req_data.telegram_id).first():
        return get_response(400, False, 'Пользователь уже существует')
    new_user = User(name=req_data.name, telegram_id=req_data.telegram_id)
    db.session.add(new_user)
    db.session.commit()
    return get_response(400, False, '', user_id=new_user.id)
Exemple #4
0
def keywords_news():
    telegram_id = request.headers.get('Authorization')
    user = User.query.filter_by(telegram_id=telegram_id).first()
    if not user:
        return get_response(403, False, 'Пользователь не найден')
    user_keywords_names = ''
    for keyword in user.keywords:
        user_keywords_names += keyword.name + ' OR '
    if not user_keywords_names:
        return get_response(400, False, 'У вас ещё нет ключевых слов!')
    user_keywords_names = user_keywords_names[:-4]
    news_list = news_api.get_top_headlines(
        q=user_keywords_names)['articles'][:10]
    return get_response(200, True, '', news_list=news_list)
Exemple #5
0
def categories_news():
    telegram_id = request.headers.get('Authorization')
    user = User.query.filter_by(telegram_id=telegram_id).first()
    if not user:
        return get_response(403, False, 'Пользователь не найден')
    user_cats_id = ''
    for cat in user.categories:
        user_cats_id += cat.news_api_id + ','
    if not user_cats_id:
        return get_response(400, False,
                            'Вы ещё не подписались ни на один канал!')
    user_cats_id = user_cats_id[:-1]
    news_list = news_api.get_top_headlines(
        sources=user_cats_id)['articles'][:10]
    return get_response(200, True, '', news_list=news_list)
Exemple #6
0
def login():
    """Запрос авторизации пользователя в системе.

    :return: Ответ сервера, содержащий JWT токен пользователя при успешном запросе.
    """
    try:
        req_data = LoginData.parse_raw(request.data)
    except ValueError as error:
        return get_response(400,
                            False,
                            'Проверьте правильность запроса',
                            data=error.errors())
    user = User.query.filter_by(login=req_data.login).first()
    if not user or not check_password_hash(user.password, req_data.password):
        return get_response(400, False, 'Неверный логин и/или пароль!')
    return get_response(200, True, '', token=user.get_token())
Exemple #7
0
def change_password():
    """Функция обработки запроса смены пароля.

    :return: Ответ сервера.
    """
    try:
        req_data = ChangePasswordData.parse_raw(request.data)
    except ValueError as error:
        return get_response(400,
                            False,
                            'Проверьте правильность запроса',
                            data=error.errors())
    if not check_password_hash(current_user.password, req_data.old_password):
        return get_response(403, False, 'Старый пароль неверен')
    current_user.password = generate_password_hash(req_data.new_password)
    db.session.commit()
    return get_response(200, True, '')
Exemple #8
0
def get_links():
    links_info = [{
        'serv_name': short_link.name,
        'url': short_link.full_link.url,
        'description': short_link.description,
        'type': short_link.type,
        'click_count': short_link.click_count,
    } for short_link in current_user.short_links]
    return get_response(200, True, '', info=links_info)
Exemple #9
0
def link_statistic():
    """Функция выдачи статистики ссылки за определенный период времени.

    :return: Ответ сервера.
    """
    try:
        req_data = LinkStatisticData.parse_raw(request.data)
    except ValueError as error:
        return get_response(400,
                            False,
                            'Неккоректный запрос',
                            data=error.errors())
    short_link = ShortLink.query.filter_by(name=req_data.name,
                                           user=current_user).first()
    if not short_link:
        return get_response(400, False, 'Ссылка не найдена')
    info = short_link.get_statistic(req_data.datetime_start,
                                    req_data.datetime_end)
    return get_response(200, True, '', info=info)
Exemple #10
0
def link(link_name):
    """Функция обработки стандартных запросов связанных с ссылками.

    :param link_name: имя ссылки.
    :return: Ответ сервера.
    """
    if request.method == 'GET':
        short_link = ShortLink.query.filter_by(name=link_name).first()
        if not short_link:
            return get_response(400, False, 'Ссылка не найдена')
        if short_link.type == LinkTypes.ONLY_AUTH.value and not current_user:
            return get_response(
                403, False,
                'Ссылка доступна только авторизованным пользователям')
        if short_link.type == LinkTypes.PERSONAL.value and current_user != short_link.user:
            return get_response(403, False, 'Ссылка недоступна')
        if short_link.user:
            short_link.add_new_click()
        return get_response(200, True, '', url=short_link.full_link.url)

    if request.method == 'POST':
        if link_name != 'add':
            return get_response(404, False, 'Запрос отсутствует')
        try:
            req_data = LinkCreateData.parse_raw(request.data)
        except ValueError as error:
            return get_response(400,
                                False,
                                'Проверьте правильность запроса',
                                data=error.errors())
        full_link = FullLink.get_or_create(req_data.url)
        if not current_user:
            short_link = ShortLink.get_or_create(None, full_link,
                                                 LinkTypes.PUBLIC.value)
            return get_response(200, True, '', link_name=short_link.name)
        if ShortLink.query.filter_by(user=current_user,
                                     full_link=full_link).first():
            return get_response(400, False,
                                'У вас уже создана ссылка для данного сайта')
        short_link = ShortLink.get_or_create(
            current_user,
            full_link,
            req_data.type,
            name=req_data.name,
            description=req_data.description,
        )
        print(short_link)
        return get_response(200, True, '', link_name=short_link.name)

    if request.method == 'PUT':
        if not current_user:
            return get_response(401, False, 'UNAUTHORIZED')
        short_link = ShortLink.query.filter_by(name=link_name,
                                               user=current_user).first()
        if not short_link:
            return get_response(400, False, 'Ссылка не найдена')
        try:
            req_data = LinkUpdateData.parse_raw(request.data)
        except ValueError as error:
            return get_response(400,
                                False,
                                'Проверьте правильность запроса',
                                data=error.errors())
        if req_data.name:
            short_link.name = req_data.name
        if req_data.description:
            short_link.description = req_data.description
        if req_data.type:
            short_link.type = req_data.type
        db.session.commit()
        return get_response(200, True, '')

    if request.method == 'DELETE':
        print(link_name)
        if not current_user:
            return get_response(401, False, 'UNAUTHORIZED')
        short_link = ShortLink.query.filter_by(name=link_name,
                                               user=current_user).first()
        print(short_link)
        if not short_link:
            return get_response(400, False, 'Ссылка не найдена')
        db.session.delete(short_link)
        db.session.commit()
        return get_response(200, True, '')