示例#1
0
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})
示例#2
0
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
示例#4
0
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