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(), }
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(), }
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(), }
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(), }
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))
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))
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)
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)
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))
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()}
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))
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))
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))
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()}
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))
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()
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)
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))
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))
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)
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)
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) }
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"]
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))
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()
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
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) }
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))
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))
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)