def synchronize(self): """Synchronize the user with Facebook's Graph API.""" if self.oauth_token.expired: raise ValueError('Signed request expired.') profile = get_facebook_profile(self.oauth_token.token) self.facebook_id = profile.get('id') self.facebook_username = profile.get('username') self.first_name = profile.get('first_name') self.last_name = profile.get('last_name') self.profile_url = profile.get('link') self.gender = profile.get('gender') self.hometown = profile['hometown']['name'] if profile.has_key('hometown') else None self.location = profile['location']['name'] if profile.has_key('location') else None self.bio = profile.get('bio') self.relationship_status = profile.get('relationship_status') self.political_views = profile.get('political') self.email = profile.get('email') self.website = profile.get('website') self.locale = profile.get('locale') self.verified = profile.get('verified') self.birthday = datetime.strptime(profile['birthday'], '%m/%d/%Y') if profile.has_key('birthday') else None self.save()
def synchronize(self): """Synchronize the user with Facebook's Graph API.""" if self.oauth_token.expired: raise ValueError('Signed request expired.') profile = get_facebook_profile(self.oauth_token.token) self.facebook_id = profile.get('id') self.facebook_username = profile.get('username') self.first_name = profile.get('first_name') self.last_name = profile.get('last_name') self.profile_url = profile.get('link') self.gender = profile.get('gender') self.hometown = profile['hometown']['name'] if profile.has_key( 'hometown') else None self.location = profile['location']['name'] if profile.has_key( 'location') else None self.bio = profile.get('bio') self.relationship_status = profile.get('relationship_status') self.political_views = profile.get('political') self.email = profile.get('email') self.website = profile.get('website') self.locale = profile.get('locale') self.verified = profile.get('verified') self.birthday = datetime.strptime( profile['birthday'], '%m/%d/%Y') if profile.has_key('birthday') else None self.save()
def process_request(self, request): """Populate request.facebook.""" if ENABLED_PATHS and DISABLED_PATHS: raise ImproperlyConfigured('You may configure either FANDJANGO_ENABLED_PATHS or FANDJANGO_DISABLED_PATHS, but not both.') if DISABLED_PATHS and is_disabled_path(request.path): return if ENABLED_PATHS and not is_enabled_path(request.path): return # Signed request found in either GET, POST or COOKIES... if 'signed_request' in request.REQUEST or 'signed_request' in request.COOKIES: request.facebook = Facebook() # If the request method is POST and its body only contains the signed request, # chances are it's a request from the Facebook platform and we'll override # the request method to HTTP GET to rectify their misinterpretation # of the HTTP protocol standard. # # References: # "POST for Canvas" migration at http://developers.facebook.com/docs/canvas/post/ # "Incorrect use of the HTTP protocol" discussion at http://forum.developers.facebook.net/viewtopic.php?id=93554 if request.method == 'POST' and 'signed_request' in request.POST: request.method = 'GET' request.facebook.signed_request = request.REQUEST.get('signed_request') or request.COOKIES.get('signed_request') facebook_data = parse_signed_request( signed_request = request.facebook.signed_request, app_secret = FACEBOOK_APPLICATION_SECRET_KEY ) # The application is accessed from a tab on a Facebook page... if 'page' in facebook_data: request.facebook.page = FacebookPage( id = facebook_data['page']['id'], is_admin = facebook_data['page']['admin'], is_liked = facebook_data['page']['liked'] ) # User has authorized the application... if 'user_id' in facebook_data: # Redirect to Facebook Authorization if the OAuth token has expired if facebook_data['expires'] and datetime.fromtimestamp(facebook_data['expires']) < datetime.now(): return redirect_to_facebook_authorization( redirect_uri = FACEBOOK_APPLICATION_URL + request.get_full_path() ) # Initialize a User object and its corresponding OAuth token try: user = User.objects.get(facebook_id=facebook_data['user_id']) except User.DoesNotExist: oauth_token = OAuthToken.objects.create( token = facebook_data['oauth_token'], issued_at = datetime.fromtimestamp(facebook_data['issued_at']), expires_at = datetime.fromtimestamp(facebook_data['expires']) ) profile = get_facebook_profile(oauth_token.token) user = User.objects.create( facebook_id = profile.get('id'), facebook_username = profile.get('username'), first_name = profile.get('first_name'), last_name = profile.get('last_name'), profile_url = profile.get('link'), gender = profile.get('gender'), hometown = profile['hometown']['name'] if profile.has_key('hometown') else None, location = profile['location']['name'] if profile.has_key('location') else None, bio = profile.get('bio'), relationship_status = profile.get('relationship_status'), political_views = profile.get('political'), email = profile.get('email'), website = profile.get('website'), locale = profile.get('locale'), verified = profile.get('verified'), birthday = datetime.strptime(profile['birthday'], '%m/%d/%Y') if profile.has_key('birthday') else None, oauth_token = oauth_token ) else: user.last_seen_at = datetime.now() user.authorized = True if facebook_data.has_key('oauth_token'): user.oauth_token.token = facebook_data['oauth_token'] user.oauth_token.issued_at = datetime.fromtimestamp(facebook_data['issued_at']) user.oauth_token.expires_at = datetime.fromtimestamp(facebook_data['expires']) if facebook_data['expires'] else None user.oauth_token.save() user.save() request.facebook.user = user # ... no signed request found. else: request.facebook = False
def process_request(self, request): """Populate request.facebook.""" if ENABLED_PATHS and DISABLED_PATHS: raise ImproperlyConfigured( "You may configure either FANDJANGO_ENABLED_PATHS or FANDJANGO_DISABLED_PATHS, but not both." ) if DISABLED_PATHS and is_disabled_path(request.path): return if ENABLED_PATHS and not is_enabled_path(request.path): return # Signed request found in either GET, POST or COOKIES... if "signed_request" in request.REQUEST or "signed_request" in request.COOKIES: request.facebook = Facebook() # If the request method is POST and its body only contains the signed request, # chances are it's a request from the Facebook platform and we'll override # the request method to HTTP GET to rectify their misinterpretation # of the HTTP protocol standard. # # References: # "POST for Canvas" migration at http://developers.facebook.com/docs/canvas/post/ # "Incorrect use of the HTTP protocol" discussion at http://forum.developers.facebook.net/viewtopic.php?id=93554 if request.method == "POST" and "signed_request" in request.POST: request.method = "GET" request.facebook.signed_request = request.REQUEST.get("signed_request") or request.COOKIES.get( "signed_request" ) facebook_data = parse_signed_request( signed_request=request.facebook.signed_request, app_secret=FACEBOOK_APPLICATION_SECRET_KEY ) # The application is accessed from a tab on a Facebook page... if "page" in facebook_data: request.facebook.page = FacebookPage( id=facebook_data["page"]["id"], is_admin=facebook_data["page"]["admin"], is_liked=facebook_data["page"]["liked"], ) # User has authorized the application... if "user_id" in facebook_data: # Redirect to Facebook Authorization if the OAuth token has expired if ( facebook_data.get("expires") and datetime.fromtimestamp(facebook_data.get("expires")) < datetime.now() ): return redirect_to_facebook_authorization( redirect_uri=FACEBOOK_APPLICATION_URL + request.get_full_path() ) # Initialize a User object and its corresponding OAuth token try: user = User.objects.get(facebook_id=facebook_data["user_id"]) except User.DoesNotExist: oauth_token = OAuthToken.objects.create( token=facebook_data["oauth_token"], issued_at=datetime.fromtimestamp(facebook_data["issued_at"]), expires_at=datetime.fromtimestamp(facebook_data.get("expires")) if facebook_data.get("expires") else None, ) profile = get_facebook_profile(oauth_token.token) user = User.objects.create( facebook_id=profile.get("id"), facebook_username=profile.get("username"), first_name=profile.get("first_name"), last_name=profile.get("last_name"), profile_url=profile.get("link"), gender=profile.get("gender"), hometown=profile["hometown"].get("name") if profile.has_key("hometown") else None, location=profile["location"].get("name") if profile.has_key("location") else None, bio=profile.get("bio"), relationship_status=profile.get("relationship_status"), political_views=profile.get("political"), email=profile.get("email"), website=profile.get("website"), locale=profile.get("locale"), verified=profile.get("verified"), birthday=datetime.strptime(profile["birthday"], "%m/%d/%Y") if profile.has_key("birthday") else None, oauth_token=oauth_token, ) else: user.last_seen_at = datetime.now() user.authorized = True if facebook_data.has_key("oauth_token"): user.oauth_token.token = facebook_data["oauth_token"] user.oauth_token.issued_at = datetime.fromtimestamp(facebook_data["issued_at"]) user.oauth_token.expires_at = ( datetime.fromtimestamp(facebook_data.get("expires")) if facebook_data.get("expires") else None ) user.oauth_token.save() user.save() request.facebook.user = user # ... no signed request found. else: request.facebook = False
def synchronize(self): """Synchronize the user with Facebook's Graph API.""" if self.oauth_token.expired: raise ValueError("Signed request expired.") profile = get_facebook_profile(self.oauth_token.token) self.facebook_id = profile.get("id") self.facebook_username = profile.get("username") self.first_name = profile.get("first_name") self.middle_name = profile.get("middle_name", None) self.last_name = profile.get("last_name") self.profile_url = profile.get("link") self.gender = profile.get("gender") self.hometown = profile["hometown"]["name"] if profile.has_key("hometown") else None self.location = profile["location"]["name"] if profile.has_key("location") else None self.bio = profile.get("bio") self.relationship_status = profile.get("relationship_status") self.political_views = profile.get("political") self.email = profile.get("email") self.website = profile.get("website") self.locale = profile.get("locale") self.verified = profile.get("verified") self.birthday = datetime.strptime(profile["birthday"], "%m/%d/%Y") if profile.has_key("birthday") else None self.timezone = profile.get("timezone", None) self.quotes = profile.get("quotes", None) self.inspirational_people = ( ", ".join([element["name"] for element in profile["inspirational_people"]]) if profile.has_key("inspirational_people") else None ) self.languages = ( ", ".join([element["name"] for element in profile["languages"]]) if profile.has_key("languages") else None ) self.sports = ( ", ".join([element["name"] for element in profile["sports"]]) if profile.has_key("sports") else None ) # getting extra objects using graph api self.activities = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/activities")]) self.interests = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/interests")]) self.music = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/music")]) self.books = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/books")]) self.movies = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/movies")]) self.television = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/television")]) self.games = ", ".join([element["name"] for element in self.graph.get(self.facebook_id + "/games")]) self.likes = "\n".join( [ "%s (%s)" % (element["name"], element["category"]) for element in self.graph.get(str(self.facebook_id) + "/likes") ] ) self.geolocation = ( ",".join( [ str(element[1]) for element in self.graph.get(str(profile["location"]["id"]))["location"].items() if element[0] in ["latitude", "longitude"] ] ) if profile.has_key("location") else None ) self.save()
def process_request(self, request): """Populate request.facebook.""" if ENABLED_PATHS and DISABLED_PATHS: raise ImproperlyConfigured( 'You may configure either FANDJANGO_ENABLED_PATHS or FANDJANGO_DISABLED_PATHS, but not both.' ) if DISABLED_PATHS and is_disabled_path(request.path): return if ENABLED_PATHS and not is_enabled_path(request.path): return # Signed request found in either GET, POST or COOKIES... if 'signed_request' in request.REQUEST or 'signed_request' in request.COOKIES: request.facebook = Facebook() # If the request method is POST and its body only contains the signed request, # chances are it's a request from the Facebook platform and we'll override # the request method to HTTP GET to rectify their misinterpretation # of the HTTP protocol standard. # # References: # "POST for Canvas" migration at http://developers.facebook.com/docs/canvas/post/ # "Incorrect use of the HTTP protocol" discussion at http://forum.developers.facebook.net/viewtopic.php?id=93554 if request.method == 'POST' and 'signed_request' in request.POST: request.method = 'GET' request.facebook.signed_request = request.REQUEST.get( 'signed_request') or request.COOKIES.get('signed_request') facebook_data = parse_signed_request( signed_request=request.facebook.signed_request, app_secret=FACEBOOK_APPLICATION_SECRET_KEY) # The application is accessed from a tab on a Facebook page... if 'page' in facebook_data: request.facebook.page = FacebookPage( id=facebook_data['page']['id'], is_admin=facebook_data['page']['admin'], is_liked=facebook_data['page']['liked']) # User has authorized the application... if 'user_id' in facebook_data: # Redirect to Facebook Authorization if the OAuth token has expired if facebook_data['expires']: if datetime.fromtimestamp( facebook_data['expires']) < datetime.now(): return redirect_to_facebook_authorization( redirect_uri=FACEBOOK_APPLICATION_URL + request.get_full_path()) # Initialize a User object and its corresponding OAuth token try: user = User.objects.get( facebook_id=facebook_data['user_id']) except User.DoesNotExist: oauth_token = OAuthToken.objects.create( token=facebook_data['oauth_token'], issued_at=datetime.fromtimestamp( facebook_data['issued_at']), expires_at=datetime.fromtimestamp( facebook_data['expires'])) profile = get_facebook_profile(oauth_token.token) user = User.objects.create( facebook_id=profile.get('id'), facebook_username=profile.get('username'), first_name=profile.get('first_name'), last_name=profile.get('last_name'), profile_url=profile.get('link'), gender=profile.get('gender'), hometown=profile['hometown']['name'] if profile.has_key('hometown') else None, location=profile['location']['name'] if profile.has_key('location') else None, bio=profile.get('bio'), relationship_status=profile.get('relationship_status'), political_views=profile.get('political'), email=profile.get('email'), website=profile.get('website'), locale=profile.get('locale'), verified=profile.get('verified'), birthday=datetime.strptime(profile['birthday'], '%m/%d/%Y') if profile.has_key('birthday') else None, oauth_token=oauth_token) else: user.last_seen_at = datetime.now() user.authorized = True user.save() if facebook_data.has_key('oauth_token'): user.oauth_token.token = facebook_data['oauth_token'] user.oauth_token.issued_at = datetime.fromtimestamp( facebook_data['issued_at']) user.oauth_token.expires_at = datetime.fromtimestamp( facebook_data['expires'] ) if facebook_data['expires'] else None user.oauth_token.save() request.facebook.user = user else: request.facebook = False