def browserid_signup(request): next = request.REQUEST.get('next') redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/') redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/') email = request.session.get('browserid-email', None) contributor = 'contributor' in request.POST if email: form = BrowserIDSignupForm(request.REQUEST) if form.is_valid(): user = User.objects.create_user(form.cleaned_data['username'], email) user.save() # Create a new profile for the user Profile.objects.create(user=user, locale=request.LANGUAGE_CODE) # Check if the user should be added to the contributor group if contributor: add_to_contributors(request, user) # Log the user in user.backend = 'django_browserid.auth.BrowserIDBackend' auth.login(request, user) return redirect(redirect_to) else: form.fields['username'].initial = suggest_username(email) return render(request, 'users/browserid_signup.html', {'persona_email': email, 'next': next, 'form': form, 'contributor': contributor}) return redirect(redirect_to_failure)
def browserid_signup(request): next = request.REQUEST.get("next") redirect_to = next or getattr(settings, "LOGIN_REDIRECT_URL", "/") redirect_to_failure = getattr(settings, "LOGIN_REDIRECT_URL_FAILURE", "/") email = request.session.get("browserid-email", None) contributor = "contributor" in request.POST if email: form = BrowserIDSignupForm(request.REQUEST) if form.is_valid(): user = User.objects.create_user(form.cleaned_data["username"], email) user.save() # Create a new profile for the user Profile.objects.create(user=user, locale=request.LANGUAGE_CODE) # Check if the user should be added to the contributor group if contributor: add_to_contributors(request, user) # Log the user in user.backend = "django_browserid.auth.BrowserIDBackend" auth.login(request, user) return redirect(redirect_to) else: return render( request, "users/browserid_signup.html", {"email": email, "next": next, "form": form, "contributor": contributor}, ) return redirect(redirect_to_failure)
def create_user(self, claims): """Override create user method to mark the profile as migrated.""" user = super(FXAAuthBackend, self).create_user(claims) # Create a user profile for the user and populate it with data from # Firefox Accounts profile, _ = Profile.objects.get_or_create(user=user) profile.is_fxa_migrated = True profile.fxa_uid = claims.get('uid') profile.fxa_avatar = claims.get('avatar', '') profile.name = claims.get('displayName', '') # Let's get the first element even if it's an empty string # A few assertions return a locale of None so we need to default to empty string fxa_locale = (claims.get('locale', '') or '').split(',')[0] if fxa_locale in settings.SUMO_LANGUAGES: profile.locale = fxa_locale else: profile.locale = settings.LANGUAGE_CODE profile.save() # This is a new sumo profile, redirect to the edit profile page self.request.session['oidc_login_next'] = reverse( 'users.edit_my_profile') messages.info(self.request, 'fxa_notification_created') if self.request.session.get('is_contributor', False): add_to_contributors(user, self.request.LANGUAGE_CODE) del self.request.session['is_contributor'] return user
def make_contributor(request): """Adds the logged in user to the contributor group""" add_to_contributors(request.user, request.LANGUAGE_CODE) if "return_to" in request.POST: return HttpResponseRedirect(request.POST["return_to"]) else: return HttpResponseRedirect(reverse("landings.get_involved"))
def create_user(self, claims): """Override create user method to mark the profile as migrated.""" user = super(FXAAuthBackend, self).create_user(claims) # Create a user profile for the user and populate it with data from # Firefox Accounts profile, created = Profile.objects.get_or_create(user=user) profile.is_fxa_migrated = True profile.fxa_uid = claims.get("uid") profile.fxa_avatar = claims.get("avatar", "") profile.name = claims.get("displayName", "") subscriptions = claims.get("subscriptions", []) # Let's get the first element even if it's an empty string # A few assertions return a locale of None so we need to default to empty string fxa_locale = (claims.get("locale", "") or "").split(",")[0] if fxa_locale in settings.SUMO_LANGUAGES: profile.locale = fxa_locale else: profile.locale = self.request.session.get("login_locale", settings.LANGUAGE_CODE) activate(profile.locale) # If there is a refresh token, store it if self.refresh_token: profile.fxa_refresh_token = self.refresh_token profile.save() # User subscription information products = Product.objects.filter(codename__in=subscriptions) profile.products.clear() profile.products.add(*products) # This is a new sumo profile, show edit profile message messages.success( self.request, _("<strong>Welcome!</strong> You are now logged in using Firefox Accounts. " + "{a_profile}Edit your profile.{a_close}<br>" + "Already have a different Mozilla Support Account? " + "{a_more}Read more.{a_close}").format( a_profile='<a href="' + reverse("users.edit_my_profile") + '" target="_blank">', a_more='<a href="' + reverse("wiki.document", args=["firefox-accounts-mozilla-support-faq"]) + '" target="_blank">', a_close="</a>", ), extra_tags="safe", ) if self.request.session.get("is_contributor", False): add_to_contributors(user, profile.locale) del self.request.session["is_contributor"] return user
def create_user(self, claims): """Override create user method to mark the profile as migrated.""" user = super(FXAAuthBackend, self).create_user(claims) # Create a user profile for the user and populate it with data from # Firefox Accounts profile, created = Profile.objects.get_or_create(user=user) profile.is_fxa_migrated = True profile.fxa_uid = claims.get('uid') profile.fxa_avatar = claims.get('avatar', '') profile.name = claims.get('displayName', '') subscriptions = claims.get('subscriptions', []) # Let's get the first element even if it's an empty string # A few assertions return a locale of None so we need to default to empty string fxa_locale = (claims.get('locale', '') or '').split(',')[0] if fxa_locale in settings.SUMO_LANGUAGES: profile.locale = fxa_locale else: profile.locale = settings.LANGUAGE_CODE profile.save() # User subscription information products = Product.objects.filter(codename__in=subscriptions) profile.products.clear() profile.products.add(*products) # This is a new sumo profile, show edit profile message messages.success( self.request, _('<strong>Welcome!</strong> You are now logged in using Firefox Accounts. ' + '{a_profile}Edit your profile.{a_close}<br>' + 'Already have a different Mozilla Support Account? ' + '{a_more}Read more.{a_close}').format( a_profile='<a href="' + reverse('users.edit_my_profile') + '" target="_blank">', a_more='<a href="' + reverse('wiki.document', args=['firefox-accounts-mozilla-support-faq']) + '" target="_blank">', a_close='</a>'), extra_tags="safe") if self.request.session.get('is_contributor', False): add_to_contributors(user, self.request.LANGUAGE_CODE) del self.request.session['is_contributor'] return user
def browserid_verify(request): next = request.REQUEST.get('next') redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/') redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/') form = BrowserIDForm(data=request.POST) if form.is_valid(): verifier = BrowserIDBackend().get_verifier() result = verifier.verify(form.cleaned_data['assertion'], get_audience(request)) if result: if (request.user.is_authenticated() and request.user.email != result.email): # User is already signed and wants to change their email. request.user.email = result.email request.user.save() return redirect(reverse('users.edit_profile')) else: # Verified so log in email = result.email user = User.objects.filter(email=email) contributor = 'contributor' in request.POST if len(user) == 0: # Add the email to the session and redirect to signup request.session['browserid-email'] = email signup_url = reverse('users.browserid_signup') return redirect('%s?%s' % (signup_url, urlencode({'next': next}))) else: user = user[0] user.backend = 'django_browserid.auth.BrowserIDBackend' if contributor: add_to_contributors(request, user) auth.login(request, user) return redirect(redirect_to) return redirect(redirect_to_failure)
def browserid_verify(request): next = request.REQUEST.get("next") redirect_to = next or getattr(settings, "LOGIN_REDIRECT_URL", "/") redirect_to_failure = getattr(settings, "LOGIN_REDIRECT_URL_FAILURE", "/") form = BrowserIDForm(data=request.POST) if form.is_valid(): result = verify(form.cleaned_data["assertion"], get_audience(request)) if result: if request.user.is_authenticated(): # User is already signed in so they must want an email change request.user.email = result["email"] request.user.save() return redirect(reverse("users.edit_profile")) else: # Verified so log in email = result["email"] user = User.objects.filter(email=email) contributor = "contributor" in request.POST if len(user) == 0: form = BrowserIDSignupForm() request.session["browserid-email"] = email return render( request, "users/browserid_signup.html", {"email": email, "next": next, "form": form, "contributor": contributor}, ) else: user = user[0] user.backend = "django_browserid.auth.BrowserIDBackend" if contributor: add_to_contributors(request, user) auth.login(request, user) return redirect(redirect_to) return redirect(redirect_to_failure)
def browserid_signup(request, template): next = request.REQUEST.get('next') redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/') redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/') email = request.session.get('browserid-email', None) contributor = 'contributor' in request.POST if email: data = request.POST if request.method == 'POST' else None form = BrowserIDSignupForm(data) if form.is_valid(): user = User.objects.create_user(form.cleaned_data['username'], email) user.save() # Create a new profile for the user Profile.objects.create(user=user, locale=request.LANGUAGE_CODE) # Check if the user should be added to the contributor group if contributor: add_to_contributors(request, user) # Log the user in user.backend = 'django_browserid.auth.BrowserIDBackend' auth.login(request, user) return redirect(redirect_to) else: form.fields['username'].initial = suggest_username(email) return render( request, template, { 'persona_email': email, 'next': next, 'form': form, 'contributor': contributor }) return redirect(redirect_to_failure)
def browserid_verify(request): next = request.REQUEST.get('next') redirect_to = next or getattr(settings, 'LOGIN_REDIRECT_URL', '/') redirect_to_failure = getattr(settings, 'LOGIN_REDIRECT_URL_FAILURE', '/') form = BrowserIDForm(data=request.POST) if form.is_valid(): result = verify(form.cleaned_data['assertion'], get_audience(request)) if result: if request.user.is_authenticated(): # User is already signed in so they must want an email change request.user.email = result['email'] request.user.save() return redirect(reverse('users.edit_profile')) else: # Verified so log in email = result['email'] user = User.objects.filter(email=email) contributor = 'contributor' in request.POST if len(user) == 0: form = BrowserIDSignupForm() request.session['browserid-email'] = email form.fields['username'].initial = suggest_username(email) return render(request, 'users/browserid_signup.html', {'persona_email': email, 'next': next, 'form': form, 'contributor': contributor}) else: user = user[0] user.backend = 'django_browserid.auth.BrowserIDBackend' if contributor: add_to_contributors(request, user) auth.login(request, user) return redirect(redirect_to) return redirect(redirect_to_failure)