Example #1
0
    def GetSessionCredentials(self):
        """Get OAuth 2.0 credentials for an HTTP session.

    If the user has a user id stored in their cookie session, extract that value
    and use it to load that user's credentials from the data store.

    Args:
      request: HTTP request to use session from.
    Returns:
      OAuth2.0 credentials suitable for authorizing clients.
    """
        # Try to load  the user id from the session
        session = sessions.LilCookies(self, SESSION_SECRET)
        userid = session.get_secure_cookie(name='userid')
        if not userid:
            # return None to indicate that no credentials could be loaded from the
            # session.
            return None

        # Load the credentials from the data store, using the userid as a key.
        creds = StorageByKeyName(Credentials, userid, 'credentials').get()

        # if the credentials are invalid, return None to indicate that the credentials
        # cannot be used.
        if creds and creds.invalid:
            return None

        return creds
Example #2
0
def load_session_credentials(request_handler):
  """Load credentials from the current session."""
  session = sessions.LilCookies(request_handler, SESSION_SECRET)
  userid = session.get_secure_cookie(name='userid')
  if userid:
    return userid, StorageByKeyName(Credentials, userid, 'credentials').get()
  else:
    return None, None
Example #3
0
    def GetCodeCredentials(self):
        """Create OAuth 2.0 credentials by extracting a code and performing OAuth2.0.

    The authorization code is extracted form the URI parameters. If it is absent,
    None is returned immediately. Otherwise, if it is present, it is used to
    perform step 2 of the OAuth 2.0 web server flow.

    Once a token is received, the user information is fetched from the userinfo
    service and stored in the session. The token is saved in the datastore against
    the user ID received from the userinfo service.

    Args:
      request: HTTP request used for extracting an authorization code and the
               session information.
    Returns:
      OAuth2.0 credentials suitable for authorizing clients or None if
      Authorization could not take place.
    """
        # Other frameworks use different API to get a query parameter.
        code = self.request.get('code')
        if not code:
            # returns None to indicate that no code was passed from Google Drive.
            return None

        # Auth flow is a controller that is loaded with the client information,
        # including client_id, client_secret, redirect_uri etc
        oauth_flow = self.CreateOAuthFlow()

        # Perform the exchange of the code. If there is a failure with exchanging
        # the code, return None.
        try:
            creds = oauth_flow.step2_exchange(code)
        except FlowExchangeError:
            return None

        # Create an API service that can use the userinfo API. Authorize it with our
        # credentials that we gained from the code exchange.
        users_service = CreateService('oauth2', 'v2', creds)

        # Make a call against the userinfo service to retrieve the user's information.
        # In this case we are interested in the user's "id" field.
        userid = users_service.userinfo().get().execute().get('id')

        # Store the user id in the user's cookie-based session.
        session = sessions.LilCookies(self, SESSION_SECRET)
        session.set_secure_cookie(name='userid', value=userid)

        # Store the credentials in the data store using the userid as the key.
        StorageByKeyName(Credentials, userid, 'credentials').put(creds)
        return creds
Example #4
0
def CreateDrive(handler):
    """Create a fully authorized drive service for this handler.

  Args:
    handler: RequestHandler from which drive service is generated.
  Returns:
    Authorized drive service, generated from the handler request.
  """
    request = handler.request
    request.session = sessions.LilCookies(handler, SESSION_SECRET)
    creds = GetCodeCredentials(request) or GetSessionCredentials(request)
    if creds:
        return CreateService(DRIVE_DISCOVERY_DOC, creds)
    else:
        RedirectAuth(handler)
Example #5
0
def store_userid(request_handler, userid):
  """Store current user's ID in session."""
  session = sessions.LilCookies(request_handler, SESSION_SECRET)
  session.set_secure_cookie(name='userid', value=userid)
Example #6
0
def load_session_userid(request_handler):
    """Load userid from the current session."""
    session = sessions.LilCookies(request_handler, SESSION_SECRET)
    userid = session.get_secure_cookie(name='userid')
    return userid