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)
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()
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()
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)
def search(self, app_id, query): #case-insensitive matching query = query.lower() q = App_User.all() all = q.count() q.filter("app_id =", app_id) app_users = q.fetch(all) results = set() for user in app_users: name_index = user.name.lower().find(query) id_index = user.id.lower().find(query) email_index = -1 if user.email: email_index = user.email.lower().find(query) matches = name_index >= 0 or id_index >= 0 or email_index >= 0 if matches: results.add(user) return results