Esempio n. 1
0
    def get(self):
        app_id = self.request.get("app_id")
        app_id_args = dict(app_id=app_id)
        redirect_uri = self.request.path_url + "?" + urllib.urlencode(
            app_id_args)
        args = dict(client_id=app_id, redirect_uri=redirect_uri)

        if self.request.get("code"):
            self.response.out.write("OAuth Dance Step 2 for App ID '" +
                                    app_id + "'.<br>\n")

            query = db.Query(App)
            query.filter('app_id =', app_id)
            app = query.fetch(limit=1)[0]

            app_secret = app.app_secret
            args["client_secret"] = app_secret
            args["client_id"] = app_id
            args["code"] = self.request.get("code")
            response = cgi.parse_qs(
                urllib2.urlopen(
                    "https://graph.facebook.com/oauth/access_token?" +
                    urllib.urlencode(args)).read())
            access_token = response["access_token"][-1]

            # Download the user profile and cache a local instance of the basic profile info
            profile = json.load(
                urllib.urlopen("https://graph.facebook.com/me?" +
                               urllib.urlencode(dict(
                                   access_token=access_token))))
            user_id = str(profile["id"])
            key_name = app_id + "_" + user_id
            user = App_User(key_name=key_name,
                            id=user_id,
                            app_id=app_id,
                            name=profile["name"],
                            email=profile["email"],
                            access_token=access_token,
                            profile_url=profile["link"],
                            token_status="Active")
            user.put()
            set_cookie(self.response,
                       "fb_user",
                       str(profile["id"]),
                       expires=time.time() + 30 * 86400,
                       secret=app_secret)

            encoded_app_id = base64.b64encode(app_id)
            self.redirect("/show_users?app_id=" + encoded_app_id)
        else:
            scope = cgi.escape(self.request.get("scope"))
            custom_scope = "&scope=" + scope
            custom_request_url = "https://www.facebook.com/dialog/oauth?" + urllib.urlencode(
                args) + custom_scope
            self.redirect(custom_request_url)
Esempio n. 2
0
    def post(self):
        app_id = self.request.get("app_id")
        access_token = self.request.get("access_token")

        logging.info("App ID %s || Access Token: %s" % (app_id, access_token))
        profile = json.load(
            urllib.urlopen("https://graph.facebook.com/me?" +
                           urllib.urlencode(dict(access_token=access_token))))
        user_id = str(profile["id"])
        key_name = app_id + "_" + user_id
        user = App_User(key_name=key_name,
                        id=user_id,
                        app_id=app_id,
                        name=profile["name"],
                        email=profile["email"],
                        access_token=access_token,
                        profile_url=profile["link"],
                        token_status="Active")
        user.put()