def test_permissions(request, scope_list, redirect_uri=None): ''' Call Facebook me/permissions to see if we are allowed to do this ''' from greenroom.apps.django_facebook_patched.api import get_persistent_graph fb = get_persistent_graph(request, redirect_uri=redirect_uri) permissions_dict = {} if fb: #see what permissions we have permissions_dict = fb.permissions() # see if we have all permissions scope_allowed = True for permission in scope_list: if permission not in permissions_dict: scope_allowed = False # raise if this happens after a redirect though if not scope_allowed and request.GET.get('attempt'): raise ValueError( 'Somehow facebook is not giving us the permissions needed, ' \ 'lets break instead of endless redirects. Fb was %s and ' \ 'permissions %s' % (fb, permissions_dict)) return scope_allowed
def wall_post(request): fb = get_persistent_graph(request) message = request.REQUEST.get('message') fb.set('me/feed', message=message) messages.info(request, 'Posted the message to your wall') return next_redirect(request)
def image_upload(request): fb = get_persistent_graph(request) pictures = request.REQUEST.getlist('pictures') for picture in pictures: fb.set('me/photos', url=picture, message='the writing is one The ' 'wall image %s' % picture) messages.info(request, 'The images have been added to your profile!') return next_redirect(request)
def open_graph_beta(request): ''' Simple example on how to do open graph postings ''' fb = get_persistent_graph(request) entity_url = 'http://www.fashiolista.com/item/2081202/' fb.set('me/fashiolista:love', item=entity_url) messages.info(request, 'Frictionless sharing to open graph beta action ' \ 'fashiolista:love with item_url %s, this url contains ' \ 'open graph data which Facebook scrapes' % entity_url)
def test_gender_matching(self): request = RequestMock().get('/') request.session = {} request.user = AnonymousUser() graph = get_persistent_graph(request, access_token='paul') converter = FacebookUserConverter(graph) base_data = converter.facebook_profile_data() self.assertEqual(base_data['gender'], 'male') data = converter.facebook_registration_data() self.assertEqual(data['gender'], 'm') action, user = connect_user(self.request, facebook_graph=graph) self.assertEqual(user.get_profile().gender, 'm')
def _wrapped_view(request, *args, **kwargs): oauth_url, current_uri, redirect_uri = get_oauth_url(request, scope_list, extra_params=extra_params) try: # call get persistent graph and convert the # token with correct redirect uri get_persistent_graph(request, redirect_uri=current_uri) #Note we're not requiring a persistent graph here #You should require a persistent graph in the view when you start using this return view_func(request, *args, **kwargs) except open_facebook_exceptions.OpenFacebookException, e: permission_granted = test_permissions(request, scope_list, current_uri) if permission_granted: # an error if we already have permissions # shouldn't have been caught # raise to prevent bugs with error mapping to cause issues raise else: logger.info(u'requesting access with redirect uri: %s, error was %s', redirect_uri, e) response = response_redirect(oauth_url, canvas=canvas) return response
def connect_async_ajax(request): ''' Not yet implemented: The idea is to run the entire connect flow on the background using celery Freeing up webserver resources, when facebook has issues ''' from greenroom.apps.django_facebook_patched import tasks as facebook_tasks graph = get_persistent_graph(request) output = {} if graph: FacebookUserConverter(graph) task = facebook_tasks.async_connect_user(request, graph) output['task_id'] = task.id from open_facebook.utils import json json_dump = json.dumps(output) return HttpResponse(json_dump)
def get_users_fb_email(request): app_access_token = FacebookAuthorization.get_cached_app_access_token() graph = get_persistent_graph(request, access_token=app_access_token) return graph.me()['email']
def test_persistent_graph(self): request = RequestMock().get('/') request.session = {} request.user = AnonymousUser() get_persistent_graph(request, access_token='short_username')
def get_facebook_friends(request): app_access_token = FacebookAuthorization.get_cached_app_access_token() graph = get_persistent_graph(request, access_token=app_access_token) converter = FacebookUserConverter(graph) friends_uids = ','.join([str(f['uid']) for f in converter.get_friends()]) return graph.fql('SELECT name, username, pic_square, pic FROM user WHERE uid IN (%s)' % friends_uids)