Esempio n. 1
0
def register(request, form):
    """Register a BrowserID-authed user with Affiliates.

    Not hooked up to a urlconf; called by other views.
    """
    if form.is_valid():
        verification = browserid_verify(request)
        if not verification:
            return None

        # Check if user exists (and auth if they do)
        user = authenticate(request=request)
        if user is None:
            email = verification['email']
            username = hashlib.sha1(email).hexdigest()[:30]
            display_name = form.cleaned_data['display_name']

            user = User.objects.create_user(username, email)
            user.is_active = True
            user.save()

            UserProfile.objects.create(user=user, display_name=display_name)

            # Subscribe user to mailing lists
            if form.cleaned_data['email_subscribe']:
                try:
                    subscribe(email, settings.BASKET_NEWSLETTER,
                              lang=get_language())
                except Exception, err:
                    log.warning(err)

            # New user must be authenticated to log in
            user = authenticate(request=request)
        login(request, user)
        return redirect('my_badges')
Esempio n. 2
0
def load_app(request):
    """
    Create or authenticate the Facebook user and direct them to the correct
    area of the app upon their entry.
    """
    # Temporary measure to handle when Facebook does a GET to the main URL when
    # a logged-out user views the app. In the future we should show a promo
    # page instead.
    if request.method != "POST":
        return request_authorization(request)

    signed_request = request.POST.get("signed_request", None)
    if signed_request is None:
        # App wasn't loaded within a canvas, redirect to the home page.
        return redirect("home")

    decoded_request = decode_signed_request(signed_request, settings.FACEBOOK_APP_SECRET)
    if decoded_request is None:
        return redirect("home")

    # If user is using Safari, we need to apply the cookie workaround.
    useragent = request.META.get("HTTP_USER_AGENT", "")
    using_safari = "Safari" in useragent and not "Chrome" in useragent
    workaround_applied = SAFARI_WORKAROUND_KEY in request.COOKIES
    if using_safari and not workaround_applied:
        return fb_redirect(request, absolutify(reverse("facebook.safari_workaround")))

    user, created = FacebookUser.objects.get_or_create_user_from_decoded_request(decoded_request)
    if user is None:
        # User has yet to authorize the app, offer authorization.
        return request_authorization(request)

    # Attach country data to the user object. This can only be retrieved from
    # the decoded request, so we add it here and login saves it.
    user.country = decoded_request["user"].get("country", user.country)

    # User has been authed, let's log them in.
    login(request, user)

    # Normally the FacebookAuthenticationMiddleware activates the locale for
    # the user, but since it does not run for this view, we need to activate it
    # manually.
    activate_locale(request, user.locale)

    return banner_list(request)
Esempio n. 3
0
def my_badges(request):
    # New users are redirected to the badge generator
    if not request.user.has_created_badges():
        return redirect('badges.new.step1')

    instance_categories = (BadgeInstance.objects.for_user_by_category(
        request.user))
    return dashboard(request, 'badges/my_badges.html',
                     {'instance_categories': instance_categories})
Esempio n. 4
0
def my_badges(request):
    # New users are redirected to the badge generator
    if not request.user.has_created_badges():
        return redirect('badges.new.step1')

    instance_categories = (BadgeInstance.objects
                           .for_user_by_category(request.user))
    return dashboard(request, 'badges/my_badges.html',
                     {'instance_categories': instance_categories})
Esempio n. 5
0
def load_app(request):
    """
    Create or authenticate the Facebook user and direct them to the correct
    area of the app upon their entry.
    """
    signed_request = request.POST.get('signed_request', None)
    if signed_request is None:
        # App wasn't loaded within a canvas, redirect to the home page.
        return redirect('home')

    decoded_request = decode_signed_request(signed_request,
                                            settings.FACEBOOK_APP_SECRET)
    if decoded_request is None:
        return redirect('home')

    # If user is using Safari, we need to apply the cookie workaround.
    useragent = request.META.get('HTTP_USER_AGENT', '')
    using_safari = 'Safari' in useragent and not 'Chrome' in useragent
    workaround_applied = SAFARI_WORKAROUND_KEY in request.COOKIES
    if using_safari and not workaround_applied:
        return fb_redirect(request,
                           absolutify(reverse('facebook.safari_workaround')),
                           top_window=True)

    user, created = (FacebookUser.objects.
            get_or_create_user_from_decoded_request(decoded_request))
    if user is None:
        # User has yet to authorize the app, redirect to the pre-auth promo.
        return fb_redirect(request,
                           absolutify(reverse('facebook.pre_auth_promo')))

    # Attach country data to the user object. This can only be retrieved from
    # the decoded request, so we add it here and login saves it.
    user.country = decoded_request['user'].get('country', user.country)

    # User has been authed, let's log them in.
    login(request, user)

    return fb_redirect(request, absolutify(reverse('facebook.banner_list')))
Esempio n. 6
0
def load_app(request):
    """
    Create or authenticate the Facebook user and direct them to the correct
    area of the app upon their entry.
    """
    signed_request = request.POST.get('signed_request', None)
    if signed_request is None:
        # App wasn't loaded within a canvas, redirect to the home page.
        return redirect('home')

    decoded_request = decode_signed_request(signed_request,
                                            settings.FACEBOOK_APP_SECRET)
    if decoded_request is None:
        return redirect('home')

    # If user is using Safari, we need to apply the cookie workaround.
    useragent = request.META.get('HTTP_USER_AGENT', '')
    using_safari = 'Safari' in useragent and not 'Chrome' in useragent
    workaround_applied = SAFARI_WORKAROUND_KEY in request.COOKIES
    if using_safari and not workaround_applied:
        return fb_redirect(request,
                           absolutify(reverse('facebook.safari_workaround')),
                           top_window=True)

    user, created = (FacebookUser.objects.
                     get_or_create_user_from_decoded_request(decoded_request))
    if user is None:
        # User has yet to authorize the app, redirect to the pre-auth promo.
        return fb_redirect(request,
                           absolutify(reverse('facebook.pre_auth_promo')))

    # Attach country data to the user object. This can only be retrieved from
    # the decoded request, so we add it here and login saves it.
    user.country = decoded_request['user'].get('country', user.country)

    # User has been authed, let's log them in.
    login(request, user)

    return fb_redirect(request, absolutify(reverse('facebook.banner_list')))
Esempio n. 7
0
def login(request):
    form = forms.LoginForm(data=(request.POST or None))
    if request.method == 'POST':
        # TODO: Handle inactive users
        if form.is_valid():
            auth_login(request, form.get_user())

            # Set session to not expire on browser close
            if form.cleaned_data['remember_me']:
                request.session.set_expiry(settings.SESSION_REMEMBER_DURATION)

            return redirect('my_badges')

    return home(request, login_form=form)
Esempio n. 8
0
def login(request):
    form = forms.LoginForm(data=(request.POST or None))
    if request.method == 'POST':
        # TODO: Handle inactive users
        if form.is_valid():
            auth_login(request, form.get_user())

            # Set session to not expire on browser close
            if form.cleaned_data['remember_me']:
                request.session.set_expiry(settings.SESSION_REMEMBER_DURATION)

            return redirect('my_badges')

    return home(request, login_form=form)
Esempio n. 9
0
def home(request, register_form=None, login_form=None):
    """Display the home page."""
    # Redirect logged-in users
    if request.user.is_authenticated():
        return redirect('badges.new.step1')

    if register_form is None:
        register_form = RegisterForm()
    if login_form is None:
        login_form = LoginForm()

    params = {'register_form': register_form,
              'login_form': login_form,
              'share_url': absolutify('/'),
              'tweet_text': urlquote_plus(TWEET_TEXT)}
    return jingo.render(request, 'badges/home.html', params)
Esempio n. 10
0
def edit_profile(request):
    """Edit an existing UserProfile."""
    if request.method == 'POST':
        data = request.POST.copy()

        # Remove password fields for BrowserID users
        if not request.user.has_usable_password():
            data['password'] = ''
            data['password2'] = ''
        form = forms.EditProfileForm(data, instance=request.user.get_profile())

        if form.is_valid():
            form.save()
            messages.success(request, unicode(EDIT_PROFILE_SUCCESS))
            return redirect('my_badges')
    else:
        form = forms.EditProfileForm(instance=request.user.get_profile())

    return jingo.render(request, 'users/edit_profile.html', {'form': form})
Esempio n. 11
0
def edit_profile(request):
    """Edit an existing UserProfile."""
    if request.method == 'POST':
        data = request.POST.copy()

        # Remove password fields for BrowserID users
        if not request.user.has_usable_password():
            data['password'] = ''
            data['password2'] = ''
        form = forms.EditProfileForm(data, instance=request.user.get_profile())

        if form.is_valid():
            form.save()
            messages.success(request, unicode(EDIT_PROFILE_SUCCESS))
            return redirect('my_badges')
    else:
        form = forms.EditProfileForm(instance=request.user.get_profile())

    return jingo.render(request, 'users/edit_profile.html', {'form': form})
Esempio n. 12
0
def home(request, register_form=None, login_form=None):
    """Display the home page."""
    # Redirect logged-in users
    if request.user.is_authenticated():
        return redirect('badges.new.step1')

    # en-US users see the BrowserID view instead
    if get_language() in settings.BROWSERID_LOCALES:
        return browserid_home(request)

    if register_form is None:
        register_form = RegisterForm()
    if login_form is None:
        login_form = LoginForm()

    params = {'register_form': register_form,
              'login_form': login_form,
              'share_url': absolutify('/', protocol='https'),
              'tweet_text': urlquote_plus(TWEET_TEXT)}
    return render(request, 'shared/home/normal.html', params)
Esempio n. 13
0
def customize(request, banner_pk=None):
    banner = get_object_or_404(Banner, pk=banner_pk)

    # Create a new banner
    form = BannerForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        image = form.cleaned_data['image']
        instance, created = BannerInstance.objects.get_or_create(
            badge=banner, user=request.user, image=image)
        return redirect('my_badges', anchor='banner_%s' % instance.pk)

    back_href = reverse('badges.new.step2',
                        kwargs={'subcategory_pk': banner.subcategory.pk})
    banner_images = BannerImage.objects.customize_values(banner=banner)

    return dashboard(request, 'banners/customize.html',
                     {'back_href': back_href,
                      'banner': banner,
                      'banner_images': json.dumps(banner_images),
                      'form': form,
                      'subcategory': banner.subcategory})
Esempio n. 14
0
def customize(request, banner_pk=None):
    banner = get_object_or_404(Banner, pk=banner_pk, displayed=True)

    # Create a new banner
    form = BannerForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        image = form.cleaned_data['image']
        instance, created = BannerInstance.objects.get_or_create(
            badge=banner, user=request.user, image=image)
        return redirect('my_badges', anchor='banner_%s' % instance.pk)

    back_href = reverse('badges.new.step2',
                        kwargs={'subcategory_pk': banner.subcategory.pk})
    banner_images = BannerImage.objects.customize_values(banner=banner)

    return dashboard(request, 'banners/customize.html',
                     {'back_href': back_href,
                      'banner': banner,
                      'banner_images': json.dumps(banner_images),
                      'form': form,
                      'subcategory': banner.subcategory})
Esempio n. 15
0
def home(request, register_form=None, login_form=None):
    """Display the home page."""
    # Redirect logged-in users
    if request.user.is_authenticated():
        return redirect('badges.new.step1')

    # en-US users see the BrowserID view instead
    if get_language() in settings.BROWSERID_LOCALES:
        return browserid_home(request)

    if register_form is None:
        register_form = RegisterForm()
    if login_form is None:
        login_form = LoginForm()

    params = {
        'register_form': register_form,
        'login_form': login_form,
        'share_url': absolutify('/', https=True),
        'tweet_text': urlquote_plus(TWEET_TEXT)
    }
    return render(request, 'shared/home/normal.html', params)
Esempio n. 16
0
def register(request, form):
    """Register a BrowserID-authed user with Affiliates.

    Not hooked up to a urlconf; called by other views.
    """
    if form.is_valid():
        verification = browserid_verify(request)
        if not verification:
            return None

        # Check if user exists (and auth if they do)
        user = authenticate(request=request)
        if user is None:
            email = verification['email']
            username = hashlib.sha1(email).hexdigest()[:30]
            display_name = form.cleaned_data['display_name']

            user = User.objects.create_user(username, email)
            user.is_active = True
            user.save()

            UserProfile.objects.create(user=user, display_name=display_name)

            # Subscribe user to mailing lists
            if form.cleaned_data['email_subscribe']:
                try:
                    subscribe(email,
                              settings.BASKET_NEWSLETTER,
                              lang=get_language())
                except Exception, err:
                    log.warning(err)

            # New user must be authenticated to log in
            user = authenticate(request=request)
        login(request, user)
        return redirect('my_badges')
Esempio n. 17
0
 def test_basic(self):
     response = redirect('mock_view')
     eq_(response.status_code, 302)
     eq_(response['Location'], '/en-US/mock_view')
Esempio n. 18
0
 def inner(request, *args, **kwargs):
     if is_logged_in(request):
         return func(request, *args, **kwargs)
     else:
         return redirect('home')
Esempio n. 19
0
 def inner(request, *args, **kwargs):
     if is_logged_in(request):
         return func(request, *args, **kwargs)
     else:
         return redirect('home')
Esempio n. 20
0
 def test_permanent(self):
     response = redirect('mock_view', permanent=True)
     eq_(response.status_code, 301)
     eq_(response['Location'], '/en-US/mock_view')
Esempio n. 21
0
 def test_basic(self):
     response = redirect('mock_view')
     eq_(response.status_code, 302)
     eq_(response['Location'], '/en-US/mock_view')
Esempio n. 22
0
 def decorator(request, *args, **kwargs):
     if request.user.is_authenticated():
         return view_func(request, *args, **kwargs)
     else:
         from shared.utils import redirect
         return redirect(settings.LOGIN_VIEW_NAME)
Esempio n. 23
0
 def test_permanent(self):
     response = redirect('mock_view', permanent=True)
     eq_(response.status_code, 301)
     eq_(response['Location'], '/en-US/mock_view')
Esempio n. 24
0
 def decorator(request, *args, **kwargs):
     if request.user.is_authenticated():
         return view_func(request, *args, **kwargs)
     else:
         from shared.utils import redirect
         return redirect(settings.LOGIN_VIEW_NAME)