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')
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)
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})
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})
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')))
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)
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)
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})
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)
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})
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})
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)
def test_basic(self): response = redirect('mock_view') eq_(response.status_code, 302) eq_(response['Location'], '/en-US/mock_view')
def inner(request, *args, **kwargs): if is_logged_in(request): return func(request, *args, **kwargs) else: return redirect('home')
def test_permanent(self): response = redirect('mock_view', permanent=True) eq_(response.status_code, 301) eq_(response['Location'], '/en-US/mock_view')
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)