def update_api_key(request): bot_keys = BotKey.objects.filter(user=request.user) for bot_key in bot_keys: bot_key.delete() new_code, token = utils.generate_codes(request.user, datetime.datetime.now()) new_code = BotKey(key=new_code, user=request.user) new_code.save() return JsonResponse({"data": new_code.key})
def forgot(request): context = {} if request.method == "POST": form = RecoverForm(request.POST) if form.is_valid(): users = User.objects.filter(email=form.data["email"]) if len(users) != 0: user = users[0] try: code_object = Code.objects.get(user=user, status=False) flag = True except Code.DoesNotExist: code_object = Code() flag = False if user.is_active or flag: code_object.user = user code_object.code, code_object.token = utils.generate_codes( user, datetime.datetime.now()) code_object.status = True code_object.save() code_object.user.is_active = False code_object.user.save() mail_context = { 'token': code_object.token, 'code': code_object.code, 'user': user } utils.send_mail(user.email, 'Восстановление Пароля', 'mail/recovery.html', mail_context) messages.warning( request, 'Инструкция по восстановлению пароля отправлена на почту.' ) return redirect(reverse('account:login')) else: try: code_object = Code.objects.get(user=user) code_object.delete() except Code.DoesNotExist: pass code_object = Code() code_object.user = user code_object.code, code_object.token = utils.generate_codes( user, datetime.datetime.now()) code_object.save() mail_context = { 'token': code_object.token, 'code': code_object.code, 'user': user } utils.send_mail(user.email, 'Подтверждение Регистрации', 'mail/confirmation.html', mail_context) messages.warning( request, 'Аккаунт не был активирован, поэтому письмо для подтверждения регистрации было повторно отправлено на почту.' ) else: messages.error(request, 'Пользователя с таким email не существует') else: messages.error("Проблемы с ReCaptcha") context["form"] = RecoverForm(request.POST) else: if request.user.is_authenticated: messages.warning(request, "Вы уже вошли в аккаунт.") return redirect(reverse('account:view_my')) context["form"] = RecoverForm() return render(request, "account/forgot.html", context)
def test_generate_codes_creates_same_number_codes(number_of_codes, expected): "Test that number of code generated is equal to the number of code requested" code_length = 6 assert len(generate_codes(number_of_codes, code_length)) == expected
def signup(request): context = {} if request.method == "POST": user_form = SignupForm(request.POST) if user_form.is_valid(): users_email = User.objects.filter(email=user_form.data["email"]) if len(users_email) != 0: messages.error(request, "Пользователь с таким email уже существует.") context["form"] = SignupForm(request.POST) return render(request, "account/signup.html", context) else: ok = check_blacklist(user_form.data['email']) if ok is not None: messages.error( request, f"Имя пользователя не должно содержать \"{ok}\"") context["form"] = SignupForm(request.POST) return render(request, "account/signup.html", context) else: new_user = user_form.save(commit=True) new_user.set_password(user_form.cleaned_data["password1"]) new_user.is_active = False new_user.save() profile = Profile(user=new_user, avatar_id=1) profile.save() code_object = Code() code_object.user = new_user code_object.code, code_object.token = utils.generate_codes( new_user, datetime.datetime.now()) code_object.save() mail_context = { 'token': code_object.token, 'code': code_object.code, 'user': new_user } utils.send_mail(new_user.email, 'Подтверждение Регистрации', 'mail/confirmation.html', mail_context) messages.warning( request, 'На вашу электронную почту было отправлено письмо, для подтверждения.' ) return redirect(reverse('account:login')) else: errors = user_form.errors.as_json() errors = json.loads(errors) codes = [] for key, message in errors.items(): for error in message: codes.append(error['code']) print(codes) if 'unique' in codes: messages.error(request, "Пользователь с таким именем уже существует.") if 'password_too_similar' in codes: messages.error(request, "Пароль и имя пользователя совпадают.") if 'password_mismatch' in codes: messages.error(request, "Пароли не совпадают.") if ('password_no_symbol' in codes) or ('password_no_lower' in codes) or ( 'password_no_upper' in codes) or ('password_no_number' in codes) or ( 'password_too_short' in codes) or ('password_too_common' in codes): messages.error( request, "Пароль не соответствует требованиям. (минимум: длина 8 символов, " "1 спец.символ, 1 строчная буква, 1 прописная буква, 1 цифра)" ) context["form"] = SignupForm(request.POST) else: if request.user.is_authenticated: messages.warning(request, "Вы уже вошли в аккаунт.") return redirect(reverse('account:view_my')) context["form"] = SignupForm() return render(request, "account/signup.html", context)
def test_generate_codes_creates_code_with_requested_length( code_length, expected): "Test that number of code generated is equal to the number of code requested" number_of_codes = 1 code = generate_codes(number_of_codes, code_length).pop() assert len(code) == expected