Source code for hal.internet.services.google.gauthenticator

# -*- coding: utf-8 -*-

"""Authenticate your Google APIs """

import os

import httplib2
from googleapiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage


[docs]class GoogleApiOAuth: """OAuth Google API""" def __init__(self, scope, app_name, app_secrets_path, user_credentials_path): """ :param scope: scope of api :param app_name: Name of app to display :param app_secrets_path: path to app secrets :param user_credentials_path: path to user credentials """ self.scope = str(scope) self.app_name = str(app_name) self.app_secrets = str(app_secrets_path) self.user_credentials = str(user_credentials_path) self.store = Storage(user_credentials_path)
[docs] def get_new_user_credentials(self): """Gets new credentials :return: New user credentials file upon user prompt """ # OAuth2.0 authorization flow flow = client.flow_from_clientsecrets(self.app_secrets, self.scope) flow.user_agent = self.app_name return tools.run_flow(flow, self.store)
[docs] def get_user_credentials(self): """Gets new credentials :return: User credentials created via OAuth """ # create path to user credentials if needed if not os.path.exists(os.path.dirname(self.user_credentials)): os.makedirs(os.path.dirname(self.user_credentials)) credentials = self.store.get() # retrieve credentials needs_to_be_updated = not credentials or credentials.invalid if needs_to_be_updated: self.get_new_user_credentials() # get new user credentials credentials = self.store.get() # retrieve new credentials return credentials
[docs] @staticmethod def authenticate(credentials): """Authenticates credentials :param credentials: authentication code created via OAuth :return: Http authenticated credentials """ http = httplib2.Http() credentials.authorize(http) return http
[docs] def get_driver(self, name, version): """Authenticates and creates new API driver to perform scope stuff :param name: Name of driver :param version: Version of driver :return: driver """ user_credentials = self.get_user_credentials() # get credentials return discovery.build( name, version, http=self.authenticate(user_credentials) ) # get new driver