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)