def mirror_service(self): """Will bomb if the credentials don't work.""" http = httplib2.Http() self.credentials.authorize(http) mirror_service = discovery.build('mirror', 'v1', http=http) # TODO(elsigh): Figure out incremental scopes and re-auth here if # necessary. assert mirror_service return mirror_service
def _google_code_exchange(self): self.set_json_request_data() code = self.request.get("code", self._json_request_data["code"]) logging.info("_google_code_exchange CODE: %s" % code) assert code # Sets our identifying bit for the client to do it's subsequent # fetch flow with - It was called back with this code. self.session["user_token"] = code # Turn access code into Credentials. credentials = credentials_from_code( client_id=settings.GOOGLE_APP_ID, client_secret=settings.GOOGLE_APP_SECRET, scope="", code=code, redirect_uri="", ) logging.info("GOT credentials.id_token: %s" % credentials.id_token) # And now make a request to get the user's name info. http = httplib2.Http() credentials.authorize(http) service = discovery.build("plus", "v1", http=http) me = service.people().get(userId="me").execute() logging.info("GOT me: %s" % me) family_name = "" given_name = "" if "name" in me: family_name = me["name"]["familyName"] given_name = me["name"]["givenName"] user_data = { "id": me["id"], "picture": me["image"]["url"], "name": me["displayName"], "family_name": family_name, "given_name": given_name, "link": me["url"], "email": credentials.id_token["email"], } auth_info = { "access_token": credentials.access_token, "refresh_token": credentials.refresh_token, "expires_datetime": credentials.token_expiry, } self._on_signin(user_data, auth_info, "google", redirect=False)
def _get_google_user_info(self, auth_info, key=None, secret=None): """Returns a dict of currenly logging in user using discovery svc.""" logging.info("_get_google_user_info auth_info: %s" % auth_info) expires_datetime = None if "expires_in" in auth_info: oauth2_token_expires_in = auth_info["expires_in"] time_expires = int(time.time()) + oauth2_token_expires_in expires_datetime = datetime.datetime.utcfromtimestamp(time_expires) credentials = OAuth2Credentials( auth_info["access_token"], settings.GOOGLE_APP_ID, settings.GOOGLE_APP_SECRET, auth_info["refresh_token"], expires_datetime, token_uri="https://accounts.google.com/o/oauth2/token", user_agent=settings.USER_AGENT, ) # And now make a request to get the user's name info. http = httplib2.Http() credentials.authorize(http) service = discovery.build("plus", "v1", http=http) me = service.people().get(userId="me").execute() logging.info("GOT me: %s" % me) # Now get userinfo, so we can email - so sad. resp = self._oauth2_request("https://www.googleapis.com/oauth2/v3/userinfo?{0}", auth_info["access_token"]) userinfo = json.loads(resp) logging.info("GOT userinfo: %s" % userinfo) family_name = "" given_name = "" if "name" in me: family_name = me["name"]["familyName"] given_name = me["name"]["givenName"] user_data = { "id": me["id"], "picture": me["image"]["url"], "name": me["displayName"], "family_name": family_name, "given_name": given_name, "link": me["url"], "email": userinfo["email"], } return user_data