Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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"))
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)