Beispiel #1
0
 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
Beispiel #2
0
    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)
Beispiel #3
0
    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