# authentication.py

#

Copyright (C) 2010 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Subfunction for the Google command line tool, GoogleCL.

#

This function handles the authentication and storage of credentials for the services which use OAuth2

    import httplib2
    import logging
    import pickle
    import os
    import googlecl
    from oauth2client.file import Storage
    from oauth2client.client import OAuth2WebServerFlow
    from oauth2client.tools import run

    LOG = logging.getLogger(googlecl.LOGGER_NAME)

    TOKENS_FILENAME_FORMAT = 'dca_%s_%s'

#

Authenticates an provided http object,

    def authenticate(email, servicename, doc, http, client_id,
                     client_secret, force_auth=False):

#

rompts for user confirmation if necessary, and stores the credentials

rgs: email: The email address of the user servicename: The service which requires authentication doc: Documentation for the service (for determining scopes) http: The object being authenticated

eturns: The authorized object

      tokens_path = googlecl.get_data_path(TOKENS_FILENAME_FORMAT %
                                         (email, servicename),
                                         create_missing_dir=True)
      storage = Storage(tokens_path)
      credentials = storage.get()
      if credentials is None or credentials.invalid or force_auth:

#

Works with google-api-python-client-1.0beta2, but not with beta4. They're working on a way to allow deleting credentials. storage.put(None)

        desiredcred = ""
        for arg in doc['auth']['oauth2']['scopes']:
          desiredcred = desiredcred + arg + ' '
        FLOW = OAuth2WebServerFlow(client_id, client_secret,
          scope=desiredcred, user_agent='discoverycl')
        credentials = run(FLOW, storage)
      return credentials.authorize(http)