Exemple #1
0
def ready(request, user):
    """
        @apiDescription Готов
        <br>Нажатие кнопки ГОТОВ
        @api {post} /room/ready/ 06. Готов [ready]
        @apiGroup 03. Room
        @apiHeader {String} auth-token Токен авторизации
        @apiParam {integer} room_id Room id
        @apiSuccess {json} result Json
    """
    try:
        room_id = int(request.POST.get("room_id") or request.GET.get("room_id"))
        room = Room.objects.filter(
            Q(pk=room_id, user01=user, active=True) | Q(pk=room_id, user02=user, active=True) | Q(pk=room_id, user03=user, active=True) | Q(pk=room_id, user04=user, active=True)).last()
        if room is None:
            return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    except ObjectDoesNotExist:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    if user == room.user01:
        room.user01_ready = True
    elif user == room.user02:
        room.user02_ready = True
    elif user == room.user03:
        room.user03_ready = True
    elif user == room.user04:
        room.user04_ready = True
    room.save()
    if room.all_ready:
        deck, created = Deck.objects.get_or_create(room=room, active=True, label=room.current_label)
        if created:
            room.started = True
            room.save()
    return {
        "room": room.json(),
    }
Exemple #2
0
def remove_user(request, user):
    """
        @apiDescription Удалить игрока
        <br>Удалить игрока из комнаты с id `user_id`
        @api {post} /room/remove_user/ 05. Удалить игрока [remove_user]
        @apiGroup 03. Room
        @apiHeader {String} auth-token Токен авторизации
        @apiParam {integer} user_id User id
        @apiSuccess {json} result Json
    """
    try:
        room = user.rooms.get(active=True)
        new_user = User.objects.get(pk=int(request.POST.get("user_id") or request.GET.get("user_id")))
        if user == new_user or not room.inside(new_user):
            return http.code_response(code=codes.BAD_REQUEST, message=messages.USER_NOT_FOUND)
    except ObjectDoesNotExist:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    if room.started:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.ACTION_NOT_ALLOWED)
    if room.user02 == new_user:
        room.user02 = None
    elif room.user03 == new_user:
        room.user03 = None
    elif room.user04 == new_user:
        room.user04 = None
    room.user01_ready = False
    room.user02_ready = False
    room.user03_ready = False
    room.user04_ready = False
    room.save()
    return {
        "room": room.json(),
    }
Exemple #3
0
def make_move(request, user):
    """
        @apiDescription Сделать ХОД
        <br>Сделать ход картой с id `card_id` из списка разрешенных карт в комнате с id `room_id` в колоде с id `deck_id`
        @api {post} /room/deck/make_move/ 10. Сделать ХОД [make_move]
        @apiGroup 03. Room
        @apiHeader {String} auth-token Токен авторизации
        @apiParam {integer} room_id Room id
        @apiParam {integer} deck_id Deck id
        @apiParam {integer} card_id Card id
        @apiSuccess {json} result Json
    """
    try:
        room = Room.objects.get(pk=int(request.POST.get("room_id") or request.GET.get("room_id")), active=True)
        if not room.inside(user):
            return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    except ObjectDoesNotExist:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    try:
        deck = Deck.objects.get(pk=(request.POST.get("deck_id") or request.GET.get("deck_id")), room=room,
                                active=True)
        if deck.total_moves > 31:
            return http.code_response(code=codes.BAD_REQUEST, message=messages.DECK_NOT_FOUND)
    except ObjectDoesNotExist:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.DECK_NOT_FOUND)

    error_message = deck.make_move(request=request, user=user)
    if error_message:
        return error_message

    return {
        "deck": room.decks.last().json(),
    }
Exemple #4
0
def leave_room(request, user):
    """
        @apiDescription Покинуть комнату
        <br>Вход в комнату с id room_id
        @api {post} /room/leave/ 04. Покинуть комнату [leave_room]
        @apiGroup 03. Room
        @apiHeader {String} auth-token Токен авторизации
        @apiParam {integer} room_id Room id
        @apiSuccess {json} result Json
    """
    try:
        room_id = int(request.POST.get("room_id") or request.GET.get("room_id"))
        room = Room.objects.filter(
            Q(pk=room_id, user01=user, active=True) | Q(pk=room_id, user02=user, active=True) | Q(pk=room_id, user03=user, active=True) | Q(pk=room_id, user04=user, active=True)).last()
        if room is None:
            return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    except ObjectDoesNotExist:
        return http.code_response(code=codes.BAD_REQUEST, message=messages.ROOM_NOT_FOUND)
    if room.user02 == user:
        room.user02 = None
    elif room.user03 == user:
        room.user03 = None
    elif room.user04 == user:
        room.user04 = None
    elif room.user01 == user:
        room.user01 = None
    room.user01_ready = False
    room.user02_ready = False
    room.user03_ready = False
    room.user04_ready = False
    room.save()
    return {
        "room": room.json(),
    }
Exemple #5
0
def reset_password(request):
    """
    @api {post} /api/authe/reset/ Reset password method
    @apiName reset_password
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiParam {String} username Email of user CHOSEN ON REGISTRATION.
    @apiSuccess {Object} result Json with code.
    """
    try:
        try:
            validate_email(request.POST["username"])
        except:
            return http.code_response(code=codes.INVALID_USERNAME,
                                      message=messages.INVALID_USERNAME)
        try:
            user = User.objects.get(email=request.POST['username'])
        except:
            return http.code_response(code=codes.USERNAME_NOT_FOUND,
                                      message=messages.USER_NOT_FOUND_EMAIL)
        token = str(user.id) + password.generate_password(length=30)
        ResetPasswordRequest.objects.create(user=user, token=token)
        try:
            user.email_reset_password(token=token)
        except Exception as e:
            logger.error(e)
            return http.code_response(code=codes.EMAIL_SERVICE_ERROR,
                                      message=messages.EMAIL_SERVICE_ERROR)
        return http.ok_response()
    except Exception as e:
        logger.error(e)
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #6
0
def add_delete_category(request, user):
    """
    @api {post} /authe/profile/category/add_delete/ Add or delete category of user
    @apiName add_delete_category
    @apiGroup Auth
    @apiHeader {String} Csrf-Token CSRF token.
    @apiHeader {String} Auth-Token Authentication token.
    @apiParam {Number} category_id ID of category
    @apiSuccess {Json} result Json representation of polls.
    """
    try:
        try:
            category = Category.objects.get(id=request.POST["category_id"])
        except:
            return http.code_response(code=codes.CATEGORY_NOT_FOUND,
                                      message=messages.CATEGORY_NOT_FOUND)
        user_category, created = UserCategory.objects.get_or_create(
            user=user, category=category)
        if not created:
            user_category.is_active = not user_category.is_active
            user_category.save()
        return http.ok_response()
    except Exception as exc:
        logger.error(exc)
        return http.code_response(codes.SERVER_ERROR, message=str(exc))
Exemple #7
0
def facebook_login(request):
    """
        @apiIgnore
        @apiDescription Вход с помощью аккаунта Фэйсбук
        <br>С помощью <code>access_token</code> выполняется аутентификация пользователя
        @api {post} /core/facebook_login/ 16. Вход с Фэйсбука [facebook_login]
        @apiName facebook_login
        @apiGroup 01. Core
        @apiParam {String} access_token Access token of facebook user.
        @apiSuccess {json} result Json representation of user with token.
    """
    access_token = request.POST.get('access_token')
    info = oauth.get_facebook_info(access_token)

    if info is None:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.INVALID_FB_TOKEN)
    if 'id' not in info:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.INVALID_FB_TOKEN)

    full_name = info.get('name', None)
    email = info.get('email', None)
    phone = info.get('phone', None)
    fb_id = info['id']
    return social_authenticate("facebook", fb_id, email, phone, full_name)
Exemple #8
0
def reset_password(request):
    """
        @apiDescription Сброс пароля
        <br>Завершение Сброса пароля происходит в методе reset_password_complete

        @api {post} /core/reset_password/ 09. Сброс пароля [reset_password]
        @apiGroup 01. Core
        @apiParam {String} phone Phone
        @apiParam {String} new_password New Password
        @apiSuccess {json} result Json
    """
    phone = format_phone(request.POST.get("phone"))
    try:
        if len(phone) >= 10:
            if User.objects.filter(phone__endswith=phone[-10:]).count() == 1:
                user = User.objects.filter(phone__endswith=phone[-10:])[0]
            else:
                user = User.objects.get(phone__iexact=phone)
        else:
            user = User.objects.get(phone__iexact=phone)
    except:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.USER_NOT_FOUND)
    Activation.objects.filter(phone=user.phone,
                              to_reset=True,
                              to_change_phone=False,
                              to_change_email=False,
                              used=False).update(used=True)
    Activation.objects.create_reset_code(
        phone=user.phone, new_password=request.POST.get("new_password"))
    return http.code_response(code=codes.OK,
                              message=messages.SMS_HAS_BEEN_SENT)
Exemple #9
0
def check_login(request):
    """
    @api {post} /authe/login/check/ Check login
    @apiName check_login
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiParam {String} login login to check
    @apiSuccess {Object} result Json with response code.
    """
    try:
        login = request.POST["login"]
        exists = False
        try:
            validate_email(login)
            exists = User.objects.filter(email=login, is_active=True).exists()
        except:
            try:
                phone_object = phonenumbers.parse(login, None)
                if phonenumbers.is_valid_number(phone_object):
                    exists = User.objects.filter(phone=login).exists()
            except:
                return http.code_response(code=codes.INVALID_USERNAME,
                                          message=messages.INVALID_USERNAME)
        return {"exists": exists}
    except Exception as e:
        logger.error(e)
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #10
0
def phone_login_complete(request):
    valid, phone = valid_phone(request.POST["phone"])
    if not valid:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=u"Неверный формат телефона")
    try:
        activation = Activation.objects.filter(phone=phone,
                                               code=request.POST.get(
                                                   'code', ''),
                                               used=False)[0]
    except:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=u"Неверный ключ активации")
    u, _ = User.objects.get_or_create(email=activation.phone)
    if not u.tariff_date:
        u.tariff_date = timezone.now().date() + timedelta(days=0)
        u.tariff = User.DEMO
    u.save()
    activation.used = True
    activation.save()

    try:
        email.delay(
            settings.ADMINS_LIST, u"Новый пользователь #{}".format(u.phone),
            u"Новый пользователь под номером {} и ID {}".format(u.phone, u.pk))
    except:
        pass

    return {'token': token.create_token(u), 'user': u.json()}
Exemple #11
0
def register(request):
    """
    """
    try:
        email = request.POST.get('email', '').lower()
        try:
            validate_email(email)
        except Exception as e:
            return http.code_response(code=codes.BAD_EMAIL,
                                      message=messages.BAD_EMAIL.format(email))

        _password = request.POST.get('password', '')
        if len(_password) < settings.PASSWORD_LENGTH:
            return http.code_response(
                code=codes.PASSWORD_LENGTH_ERROR,
                message=messages.PASSWORD_LENGTH_ERROR.format(len(_password)))

        if User.objects.filter(email__iexact=email, is_active=True).exists():
            return http.code_response(code=codes.USERNAME_USED,
                                      message=messages.USERNAME_USED)

        new_user, _ = User.objects.get_or_create(username=email)
        new_user.set_password(_password)
        new_user.password_type = USER_PASSWORD
        new_user.full_name = request.POST.get("full_name", "")
        new_user.email = email
        new_user.save()
        return {'user': new_user.full()}
    except Exception as e:
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #12
0
def change_password(request, user):
    """
    @api {post} /authe/change_password/ Change password method
    @apiName change_password
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiHeader {String} Auth-Token Authentication token.
    @apiParam {String} current_password Current password of user.
    @apiParam {String} new_password New password of user.
    @apiSuccess {Object} result Json with response code.
    """
    try:
        current_password = request.POST.get('current_password', '')
        new_password = request.POST.get('new_password', '')
        if not user.check_password(current_password):
            return http.code_response(
                code=codes.INCORRECT_CURRENT_PASSWORD,
                message=messages.INCORRECT_CURRENT_PASSWORD)
        if len(new_password) < settings.PASSWORD_LENGTH:
            return http.code_response(
                code=codes.PASSWORD_LENGTH_ERROR,
                message=messages.PASSWORD_LENGTH_ERROR.format(
                    len(new_password)))
        user.set_password(new_password)
        user.save()
        return http.ok_response()
    except Exception as e:
        logger.error(e)
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #13
0
def sms_resend(request):
    """
    @api {post} /authe/sms_resend/ Sms resend method
    @apiName sms_resend
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiParam {String} phone Phone of user.
    @apiSuccess {Object} Json with code
    """
    try:
        phone = request.POST["phone"].lower()
        # Validation phone number
        try:
            phone_object = phonenumbers.parse(phone, None)
            if not phonenumbers.is_valid_number(phone_object):
                return http.code_response(code=codes.PHONE_INCORRECT,
                                          message=messages.PHONE_INCORRECT)
        except:
            return http.code_response(code=codes.PHONE_INCORRECT,
                                      message=messages.PHONE_INCORRECT)
        code = password.generate_sms_code()
        Activation.objects.generate(username=phone, code=code)
        tasks.send_message(phone,
                           settings.SMS_ACTIVATION_TEXT.format(password=code))
        return http.ok_response()
    except Exception as e:
        logger.error(e)
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #14
0
def sms_user_activate(request):
    """
    @api {post} /authe/sms_activate/ Sms activation method
    @apiName sms_user_activate
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiParam {String} phone Phone of user.
    @apiParam {Number} code Code sent to user.
    @apiSuccess {Object} Json with code
    """
    phone = request.POST["phone"]
    code = request.POST["code"]
    now = timezone.now()
    try:
        activation = Activation.objects.get(code=code,
                                            username=phone,
                                            is_active=True)
    except:
        return http.code_response(code=codes.ACTIVATION_CODE_NOT_FOUND,
                                  message=messages.ACTIVATION_CODE_NOT_FOUND)
    if activation.end_time < now:
        return http.code_response(code=codes.ACTIVATION_TIME_EXPIRED,
                                  message=messages.ACTIVATION_TIME_EXPIRED)
    activation.is_active = False
    activation.save()
    user, _ = User.objects.get_or_create(username=phone)
    user.is_active = True
    user.phone = phone
    user.set_password(activation.code)
    user.user_type = TELEPHONE_REGISTER
    user.save()
    UserStat.objects.add_stat(request, user.id, user_created=True)
    return {"token": token.create_token(user), "user": user.full()}
Exemple #15
0
def login(request):
    """
    """
    try:
        username = request.POST.get("username").lower()
        password = request.POST.get("password")
        user = None
        try:
            validate_email(username)
            user = User.objects.filter(username=username).first()
        except:
            return http.code_response(code=codes.INVALID_USERNAME,
                                      message=messages.INVALID_USERNAME)
        if user is None:
            return http.code_response(code=codes.USERNAME_NOT_FOUND,
                                      message=messages.USER_NOT_FOUND)

        user = authenticate(username=user.username, password=password)
        if user is None:
            return http.code_response(
                code=codes.INCORRECT_USERNAME_OR_PASSWORD,
                message=messages.INCORRECT_USERNAME_OR_PASSWORD)

        user.timestamp = time_utils.get_timestamp_in_milli()
        user.save()
        return {'token': token.create_token(user), 'user': user.full()}
    except Exception as e:
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #16
0
def sms_register(request):
    """
    @api {post} /authe/sms_register/ Sms Registration method
    @apiName sms_register
    @apiGroup Authe
    @apiHeader {String} Csrf-Token CSRF token.
    @apiParam {String} phone Phone of user.
    @apiParam {Number} age Age of user [optional].
    @apiSuccess {Object} Json with code
    """
    phone = request.POST["phone"].lower()
    # Validation phone number
    try:
        phone_object = phonenumbers.parse(phone, None)
        if not phonenumbers.is_valid_number(phone_object):
            return http.code_response(code=codes.PHONE_INCORRECT,
                                      message=messages.PHONE_INCORRECT)
    except:
        return http.code_response(code=codes.PHONE_INCORRECT,
                                  message=messages.PHONE_INCORRECT)

    if User.objects.filter(phone=phone, is_active=True).exists():
        return http.code_response(code=codes.PHONE_USED,
                                  message=messages.PHONE_USED)
    else:
        code = password.generate_sms_code()
        Activation.objects.generate(username=phone, code=code)
        tasks.send_message(phone,
                           settings.SMS_ACTIVATION_TEXT.format(password=code))
    return http.ok_response()
Exemple #17
0
def insta_login(request):
    """
        @apiIgnore
        @apiDescription Вход с помошью аккаунта Инстаграм
        <br>С помощью <code>access_token</code> выполняется аутентификация пользователя
        @api {post} /core/insta_login/ 18. Вход с Инстаграма [insta_login]
        @apiName insta_login
        @apiGroup 01. Core
        @apiParam {String} access_token Access token of Instagram user.
        @apiSuccess {json} result Json representation of user with token.
    """
    access_token = request.POST.get('access_token')
    info = oauth.get_instagram_info(access_token)

    if info is None:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.INVALID_INSTA_TOKEN)
    if 'data' not in info:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.INVALID_INSTA_TOKEN)

    full_name = info['data'].get('full_name', None)
    insta_id = info['data']['id']
    email = info['data'].get('email')
    phone = info['data'].get('phone')
    return social_authenticate("insta", insta_id, email, phone, full_name)
Exemple #18
0
def get_articles_stat(request, user):
    """
    @api {post} /moderators/articles/statistics/ Article statistics
    @apiName get_articles_stat
    @apiGroup Moderators
    @apiHeader {String} Csrf-Token CSRF token.
    @apiHeader {String} Auth-Token Authentication token.
    @apiParam {Number} poll_id ID of poll.
    @apiSuccess {Json} result Json representation of article's statistics.
    """
    try:
        if not user.is_moderator:
            try:
                _ = Poll.objects.get(id=request.POST["poll_id"], user=user)
            except:
                return http.code_response(codes.POLL_NOT_FOUND,
                                          messages.POLL_NOT_FOUND)
        article_poll_entries = ArticlePollEntry.objects.filter(
            poll=int(request.POST["poll_id"])).select_related("article")
        article_stat = []
        for article_poll_entry in article_poll_entries:
            article_json = article_poll_entry.article.short()
            article_json["statistics"] = search_by_date(
                time_begin=0,
                time_end=Constants.TIMESTAMP_MAX,
                article_id=article_poll_entry.article.id,
                widget=True)
            article_stat.append(article_json)
        return {'result': article_stat}
    except Exception as exc:
        logger.error(exc)
        return http.code_response(codes.SERVER_ERROR, message=str(exc))
Exemple #19
0
def category_create(request, user):
    """
    @api {post} /moderators/category/create/ Category create method
    @apiName category_create
    @apiGroup Moderators
    @apiHeader {String} Csrf-Token CSRF token.
    @apiHeader {String} Auth-Token Authentication token.
    @apiParam {String} category_name Name of category.
    @apiParam {Number} parent_id ID of parent.
    @apiSuccess {Json} result Json representation of category.
    """
    try:
        category_name = request.POST['category_name']
        parent = None
        if request.POST.get("parent_id", ""):
            try:
                parent = Category.objects.get(
                    id=int(request.POST['parent_id']))
            except:
                return http.code_response(code=codes.CATEGORY_NOT_FOUND,
                                          message=messages.CATEGORY_NOT_FOUND)
        category, _ = Category.objects.get_or_create(name=category_name,
                                                     parent=parent)
        return {"result": category.full()}
    except Exception as exc:
        logger.error(exc)
        return http.code_response(codes.SERVER_ERROR, message=str(exc))
Exemple #20
0
def reset_email_password(request):
    """
        @apiDescription Cброс пароля по почте
        <br>Завершение Сброса пароля происходит в методе reset_email_password_complete

        @api {post} /core/reset_email_password/ 11. Cброс пароля по почте  [reset_email_password]

        @apiGroup 01. Core

        @apiParam {String} email Email
        @apiParam {String} new_password New Password

        @apiSuccess {json} result Json
    """
    if not User.objects.filter(
            email__iexact=request.POST.get("email")).exists():
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.USER_NOT_FOUND)
    Activation.objects.filter(email=request.POST.get("email"),
                              to_reset=True,
                              to_change_phone=False,
                              to_change_email=False,
                              used=False).update(used=True)
    activation = Activation.objects.create_email_reset_code(
        email=request.POST.get("email"),
        new_password=request.POST.get("new_password"))
    activation.send_reset_email()
    return http.code_response(code=codes.OK,
                              message=messages.EMAIL_HAS_BEEN_SENT)
Exemple #21
0
def phone_login(request):
    valid, phone = valid_phone(request.POST["phone"])
    if not valid:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=u"Неверный формат телефона")
    Activation.objects.filter(phone=phone, used=False).update(used=True)
    Activation.objects.create_code(phone)
    return http.code_response(code=codes.OK)
Exemple #22
0
def sign_up_complete(request):
    """
        @apiDescription Завершение регистрации. Полсе подтверждения высланного кода, регистрация считается завершенной, и только после
        этого пользователь числится в базе.

        @api {post} /core/sign_up_complete/ 03. Завершение регистрации [sign_up_complete]

        @apiName Sign Up Complete

        @apiGroup 01. Core

        @apiParam {String} username Registration phone or email
        @apiParam {String} code Code sent to phone or email

        @apiSuccess {json} result Json
    """
    username = request.POST.get("username")
    code = request.POST.get("code")
    if valid_email(username):
        if User.objects.filter(email=username).exists():
            # Check if user with such email already signed up.
            return http.code_response(code=codes.BAD_REQUEST,
                                      message=messages.USER_ALREADY_EXISTS)
        try:
            activation = Activation.objects.filter(email=username,
                                                   to_reset=False,
                                                   to_change_phone=False,
                                                   to_change_email=False,
                                                   code=code,
                                                   used=False)[0]
        except:
            return http.code_response(
                code=codes.BAD_REQUEST,
                message=messages.WRONG_ACTIVATION_KEY_OR_INVALID_EMAIL)
        u, _ = User.objects.get_or_create(email=activation.email)
    else:
        phone = format_phone(username)
        if User.objects.filter(phone=username).exists():
            # Check if user with such phone already signed up.
            return http.code_response(code=codes.BAD_REQUEST,
                                      message=messages.USER_ALREADY_EXISTS)
        try:
            activation = Activation.objects.filter(phone=phone,
                                                   to_reset=False,
                                                   to_change_phone=False,
                                                   to_change_email=False,
                                                   code=code,
                                                   used=False)[0]
        except:
            return http.code_response(
                code=codes.BAD_REQUEST,
                message=messages.WRONG_ACTIVATION_KEY_OR_INVALID_PHONE)
        u, _ = User.objects.get_or_create(phone=activation.phone)
    sign_up_user_complete(user=u, activation=activation)
    return {
        'token': token.create_token(u, remove_others=True),
        'user': u.json(user=u)
    }
Exemple #23
0
def update_cases(request, user):
    try:
        cases = request.POST.getlist("cases[]", [])
        if len(cases) == 0:
            return http.code_response(code=codes.NO_CASES,
                                      message=messages.NO_CASES)

        new_cases = []
        print(cases)

        for case in cases:
            case = json.loads(case)
            case_id = case["case_id"]
            if case_id is None:
                return http.code_response(code=codes.NO_CASE_ID,
                                          message=messages.NO_CASE_ID)
            current_case = Case.objects.get(id=case_id)
            print(current_case)
            full_name = case["full_name"]
            iin = case["iin"]
            address = case["address"]
            address_residential = case["address_residential"]
            contacts = case["contacts"]
            status = case["status"]
            place_of_work = case["place_of_work"]
            occupation = case["occupation"]
            income = case["income"]
            health_condition = case["health_condition"]
            description = case["description"]

            if full_name and iin and address and address_residential and \
                contacts and status and place_of_work and occupation and \
                income and health_condition and description:
                current_case.full_name = case["full_name"]
                current_case.iin = case["iin"]
                current_case.address = case["address"]
                current_case.address_residential = case["address_residential"]
                current_case.contacts = case["contacts"]
                current_case.status = case["status"]
                current_case.place_of_work = case["place_of_work"]
                current_case.occupation = case["occupation"]
                current_case.income = case["income"]
                current_case.health_condition = case["health_condition"]
                current_case.description = case["description"]
                current_case.save()
            else:
                return http.code_response(
                    code=codes.MISSING_REQUIRED_PARAMS,
                    message=messages.MISSING_REQUIRED_PARAMS)
            print("HERE")
            if case.get("parent_case") is not None:
                current_case.parent_case = case["parent_case"]
            if case.get("needs") is not None:
                current_case.needs = case["needs"]
Exemple #24
0
def logout(request, user, token_string):
    """
    """
    try:
        if token.delete_token(token_string):
            return http.ok_response()
        else:
            return http.code_response(code=codes.TOKEN_INVALID,
                                      message=messages.TOKEN_INVALID)
    except Exception as e:
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #25
0
def create_cases(request):
    try:
        cases = request.POST.getlist("cases[]", [])
        print(cases)
        if len(cases) == 0:
            return http.code_response(code=codes.NO_CASES,
                                      message=messages.NO_CASES)

        new_cases = []
        for case in cases:
            case = json.loads(case)
            full_name = case["full_name"]
            iin = case["iin"]
            address = case["address"]
            address_residential = case["address_residential"]
            contacts = case["contacts"]
            status = case["status"]
            place_of_work = case["place_of_work"]
            occupation = case["occupation"]
            income = case["income"]
            health_condition = case["health_condition"]
            description = case["description"]
            new_case = None
            if full_name and iin and address and address_residential and \
                contacts and status and place_of_work and occupation and \
                income and health_condition and description:
                new_case, _ = Case.objects.get_or_create(
                    full_name=full_name,
                    iin=iin,
                    address=address,
                    address_residential=address_residential,
                    contacts=contacts,
                    status=status,
                    place_of_work=place_of_work,
                    occupation=occupation,
                    income=income,
                    health_condition=health_condition,
                    description=description)
            else:
                return http.code_response(
                    code=codes.MISSING_REQUIRED_PARAMS,
                    message=messages.MISSING_REQUIRED_PARAMS)
            print(new_case)

            parent_case = new_cases[0].id if len(
                new_cases) > 0 else new_case.id
            new_case.parent_case = parent_case
            new_case.save()
            new_cases.append(new_case)

        return http.ok_response()
Exemple #26
0
def email_sign_up(email, password):
    if not valid_email(email):
        return None, http.code_response(code=codes.BAD_REQUEST,
                                        message=messages.INVALID_EMAIL)
    if User.objects.filter(email=email).exists():
        return None, http.code_response(code=codes.BAD_REQUEST,
                                        message=messages.EMAIL_ALREADY_EXISTS)
    Activation.objects.filter(email=email,
                              to_reset=False,
                              to_change_phone=False,
                              to_change_email=False,
                              used=False).update(used=True)
    activation = Activation.objects.create_email_signup_code(email, password)
    return activation, None
Exemple #27
0
def reset_password_complete(request):
    """
        @apiDescription Завершение сброса пароля.
        <br>Полсе подтверждения высланного кода, процесс считается завершенным.

        @api {post} /core/reset_password_complete/ 10. Завершение сброса пароля [reset_password_complete]

        @apiGroup 01. Core

        @apiParam {String} phone Phone or email
        @apiParam {String} code Code sent to phone or email

        @apiSuccess {json} result Json
    """
    phone = format_phone(request.POST.get("phone"))

    try:
        if len(phone) >= 10:
            if User.objects.filter(phone__endswith=phone[-10:]).count() == 1:
                user = User.objects.filter(phone__endswith=phone[-10:])[0]
            else:
                user = User.objects.get(phone__iexact=phone)
        else:
            user = User.objects.get(phone__iexact=phone)
    except:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.USER_NOT_FOUND)

    try:
        activation = Activation.objects.filter(phone=user.phone,
                                               to_reset=True,
                                               to_change_phone=False,
                                               code=request.POST.get("code"),
                                               used=False)[0]
    except:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.WRONG_ACTIVATION_KEY)

    user.password = activation.password
    user.save()

    activation.used = True
    activation.save()

    return {
        'token': token.create_token(user, remove_others=True),
        'user': user.json(user=user)
    }
Exemple #28
0
def feed(request, user):
    """
    @api {post} /moderators/template/feed/ PollTemplate feed method
    @apiName feed
    @apiGroup Moderators
    @apiHeader {String} Csrf-Token CSRF token.
    @apiHeader {String} Auth-Token Authentication token.
    @apiParam {Number} timestamp Timestamp of poll.
    @apiParam {Number} limit Limit per request.
    @apiParam {Number[]} category_ids[] category id to filter.
    @apiSuccess {Json[]} result Json representation of polls.
    """
    try:
        try:
            timestamp = int(request.POST["timestamp"])
        except:
            timestamp = Constants.TIMESTAMP_MAX
        try:
            limit = int(request.POST['limit'])
        except:
            limit = Constants.FEED_LIMIT
        query = {"timestamp__lt": timestamp, "is_active": True}
        if request.POST.getlist("category_ids[]"):
            category_ids = integer_list(request.POST.getlist("category_ids[]"))
            query["category_ids__overlap"] = category_ids
        polls = PollTemplate.objects.filter(
            **query).order_by('-timestamp')[:limit]
        return {'result': [p.full() for p in polls]}
    except Exception as exc:
        logger.error(exc)
        return http.code_response(codes.SERVER_ERROR, message=str(exc))
Exemple #29
0
def get_priorities(request):
    """
    """
    try:
        return {'priorities': [x.full() for x in Priority.objects.all()]}
    except Exception as e:
        return http.code_response(codes.SERVER_ERROR, message=str(e))
Exemple #30
0
def vk_login(request):
    """
        @apiIgnore
        @apiDescription Вход с помощью Аккаунта VK
        <br>С помощью <code>access_token</code> выполняется аутентификация пользователя
        @api {post} /core/vk_login/ 19. Вход с ВК [vk_login]
        @apiName vk_login
        @apiGroup 01. Core
        @apiParam {String} access_token Access token of vk user.
        @apiSuccess {json} result Json representation of user with generated token.
    """
    access_token = request.POST.get('access_token')
    info = oauth.get_vk_info(access_token)

    if info is None or 'error' in info:
        return http.code_response(code=codes.BAD_REQUEST,
                                  message=messages.INVALID_VK_TOKEN,
                                  error=info['error'])
    info = info['response'][0]
    vk_id = info['id']
    full_name = '{} {}'.format(info.get('first_name', ""),
                               info.get('last_name', ''))
    email = info.get('email')
    phone = info.get('phone')
    return social_authenticate("vk", vk_id, email, phone, full_name)