예제 #1
0
 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()
예제 #2
0
    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()
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
파일: models.py 프로젝트: MA3STR0/fandjango
    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()
예제 #6
0
    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