def profile(request, user_id): try: user = User.load(request.session, id=user_id) except NoResultFound: return {}, 'notfound.phtml', 404 return {'show_user': user}, 'profile.phtml'
def logged_user(self): try: service, service_id = self.client_session['login'] return User.load(self.session, service=service, service_id=service_id) except (KeyError, NoResultFound, ValueError): return None
def g_callback(request): # parse the original url from the google+ redirect state param original_url = request.args.get("state", "") code = request.args["code"] # authenticate the passed code q = requests.post( "https://accounts.google.com/o/oauth2/token", data={ "code": code, "client_id": G["client_id"], "client_secret": G["client_secret"], "redirect_uri": request.host_url + "login/callback/g", "grant_type": "authorization_code", }, ) if q.status_code != 200: stderr.write("Login error G+:\n %s\n" % q.content) return redirect("/?msg=AUTH_ERROR") content = loads(q.content) access_token = content["access_token"] del content # get userinfo q = requests.get("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + access_token) content = loads(q.content) service_id = content["id"] # save userinfo by id u = User.save_g_data(request.session, service_id, fullname=content["name"], email=content["email"]) u.img_url = content.get("picture") request.client_session["login"] = ["gmail", service_id] return redirect("/" + original_url)
q = requests.get("https://graph.facebook.com/me?access_token=" + access_token) if q.status_code != 200: return redirect("/?msg=2") userdata = loads(q.content) profile_id = userdata["id"] email = userdata.get("email") fullname = userdata["name"] img_url = None try: q = requests.get("https://graph.facebook.com/%s/picture?redirect=0" % profile_id) if q.status_code == 200: userdata = loads(q.content)["data"] img_url = userdata["url"] except Exception, exc: stderr.write("fb profile pic fetch error: " + str(exc)) # save userinfo by id u = User.save_fb_data(request.session, profile_id, fullname, email) u.img_url = img_url request.session.flush() # set redirect with cookie request.client_session["login"] = ["fb", profile_id] return redirect("/" + original_url)