Beispiel #1
0
def signup(request):
    """
    Creates a new Uniauth profile with the provided
    primary email address and password.

    Prompts user to verify the email address before
    profile is fully created.
    """
    next_url = request.GET.get('next')
    context = _get_global_context(request)

    if not next_url:
        next_url = get_redirect_url(request)

    # If the user is already authenticated + has a Uniauth
    # profile, proceed to next page
    if request.user.is_authenticated and not is_tmp_user(request.user) \
            and not is_unlinked_account(request.user):
        return HttpResponseRedirect(next_url)

    # If it's a POST request, attempt to validate the form
    if request.method == "POST":
        form = SignupForm(request.POST)

        # Validation successful: setup temporary user
        if form.is_valid():
            form_email = form.cleaned_data['email']
            user = request.user

            # If the user is not already authenticated, create a User
            if not user or not user.is_authenticated:
                tmp_username = get_random_username()
                user_model = get_user_model()
                user = user_model.objects.create(username=tmp_username)

            # Set user's password + create linked email
            user.set_password(form.cleaned_data["password1"])
            user.save()
            email, _ = LinkedEmail.objects.get_or_create(
                profile=user.uniauth_profile,
                address=form_email,
                is_verified=False)

            # Send verification email + render waiting template
            _send_verification_email(request, email.address, email)
            return render(request, 'uniauth/verification-waiting.html', {
                'email': email.address,
                'is_signup': True
            })

        # Validation failed: render form errors
        else:
            context['form'] = form
            return render(request, 'uniauth/signup.html', context)

    # Otherwise, render a blank Signup form
    else:
        form = SignupForm()
        context['form'] = form
        return render(request, 'uniauth/signup.html', context)
 def test_get_random_username_valid(self):
     """
     Ensure all outputted usernames have the 'tmp' prefix
     """
     for i in range(100):
         username = get_random_username()
         if not username.startswith("tmp"):
             self.fail("get_random_username outputted a username that "
                       "did not start with 'tmp_': %s" % username)
 def test_get_random_username_unique(self):
     """
     Ensure all outputted usernames are unique
     """
     usernames = []
     for i in range(100):
         username = get_random_username()
         if username in usernames:
             self.fail("get_random_username outputted a duplicate "
                       "username: %s" % username)
         usernames.append(username)