def canvas(request): ''' Example of a canvas page. Canvas pages require redirects to work using javascript instead of http headers The facebook required and facebook required lazy decorator abstract this away ''' context = RequestContext(request) fb = require_persistent_graph(request) likes = fb.get('me/likes')['data'] context['likes'] = likes return render_to_response('greenroom.apps.django_facebook_patched/canvas.html', context)
def page_tab(request): ''' Example of a canvas page. Canvas pages require redirects to work using javascript instead of http headers The facebook required and facebook required lazy decorator abstract this away ''' context = RequestContext(request) facebook = require_persistent_graph(request) likes = facebook.get('me/likes')['data'] context['likes'] = likes from user.models import FacebookPageTab signed_request = request.REQUEST.get('signed_request') data = facebook.prefetched_data page_id = data['page']['id'] defaults = dict(created_by_user=data['user_id']) tab, created = FacebookPageTab.objects.get_or_create(page_id=page_id, defaults=defaults) context['facebook'] = facebook raise Exception, tab return render_to_response('greenroom.apps.django_facebook_patched/page_tab.html', context)
def connect(request): ''' Handles the view logic around connect user - (if authenticated) connect the user - login - register ''' backend = get_registration_backend() context = RequestContext(request) assert context.get('FACEBOOK_APP_ID'), 'Please specify a facebook app id '\ 'and ensure the context processor is enabled' facebook_login = bool(int(request.REQUEST.get('facebook_login', 0))) if facebook_login: logger.info('trying to connect using facebook') graph = require_persistent_graph(request) if graph: logger.info('found a graph object') facebook = FacebookUserConverter(graph) if facebook.is_authenticated(): logger.info('facebook is authenticated') facebook_data = facebook.facebook_profile_data() #either, login register or connect the user try: action, user = connect_user(request) logger.info('Django facebook performed action: %s', action) except facebook_exceptions.IncompleteProfileError, e: #show them a registration form to add additional data warning_format = u'Incomplete profile data encountered with error %s' warn_message = warning_format % e.message send_warning(warn_message, e=e, facebook_data=facebook_data) context['facebook_mode'] = True context['form'] = e.form return render_to_response( facebook_settings.FACEBOOK_REGISTRATION_TEMPLATE, context_instance=context, ) if action is CONNECT_ACTIONS.CONNECT: #connect means an existing account was attached to facebook messages.info(request, _("You have connected your account " "to %s's facebook profile") % facebook_data['name']) elif action is CONNECT_ACTIONS.REGISTER: #hook for tying in specific post registration functionality response = backend.post_registration_redirect(request, user) #compatability for django registration backends which return tuples instead of a response #alternatively we could wrap django registration backends, but that would be hard to understand response = response if isinstance(response, HttpResponse) else redirect(response) return response else: if 'attempt' in request.GET: return next_redirect(request, next_key=['error_next', 'next'], additional_params=dict(fb_error_or_cancel=1)) else: logger.info('Facebook authentication needed for connect, ' \ 'raising an error') raise OpenFacebookException('please authenticate') #for CONNECT and LOGIN we simple redirect to the next page return next_redirect(request, default=facebook_settings.FACEBOOK_LOGIN_DEFAULT_REDIRECT)