| Index: third_party/gsutil/third_party/oauth2client/scripts/run_system_tests.py
|
| diff --git a/third_party/gsutil/third_party/oauth2client/scripts/run_system_tests.py b/third_party/gsutil/third_party/oauth2client/scripts/run_system_tests.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3f7baba7d939902117e64a6f5ed091389c18ecd2
|
| --- /dev/null
|
| +++ b/third_party/gsutil/third_party/oauth2client/scripts/run_system_tests.py
|
| @@ -0,0 +1,106 @@
|
| +import json
|
| +import os
|
| +
|
| +import httplib2
|
| +from oauth2client import client
|
| +from oauth2client import service_account
|
| +
|
| +
|
| +JSON_KEY_PATH = os.getenv('OAUTH2CLIENT_TEST_JSON_KEY_PATH')
|
| +P12_KEY_PATH = os.getenv('OAUTH2CLIENT_TEST_P12_KEY_PATH')
|
| +P12_KEY_EMAIL = os.getenv('OAUTH2CLIENT_TEST_P12_KEY_EMAIL')
|
| +USER_KEY_PATH = os.getenv('OAUTH2CLIENT_TEST_USER_KEY_PATH')
|
| +USER_KEY_EMAIL = os.getenv('OAUTH2CLIENT_TEST_USER_KEY_EMAIL')
|
| +
|
| +SCOPE = ('https://www.googleapis.com/auth/plus.login',
|
| + 'https://www.googleapis.com/auth/plus.me',
|
| + 'https://www.googleapis.com/auth/userinfo.email',
|
| + 'https://www.googleapis.com/auth/userinfo.profile')
|
| +USER_INFO = 'https://www.googleapis.com/oauth2/v2/userinfo'
|
| +
|
| +
|
| +def _require_environ():
|
| + if (JSON_KEY_PATH is None or P12_KEY_PATH is None or
|
| + P12_KEY_EMAIL is None or USER_KEY_PATH is None or
|
| + USER_KEY_EMAIL is None):
|
| + raise EnvironmentError('Expected environment variables to be set:',
|
| + 'OAUTH2CLIENT_TEST_JSON_KEY_PATH',
|
| + 'OAUTH2CLIENT_TEST_P12_KEY_PATH',
|
| + 'OAUTH2CLIENT_TEST_P12_KEY_EMAIL',
|
| + 'OAUTH2CLIENT_TEST_USER_KEY_PATH',
|
| + 'OAUTH2CLIENT_TEST_USER_KEY_EMAIL')
|
| +
|
| + if not os.path.isfile(JSON_KEY_PATH):
|
| + raise EnvironmentError(JSON_KEY_PATH, 'is not a file')
|
| + if not os.path.isfile(P12_KEY_PATH):
|
| + raise EnvironmentError(P12_KEY_PATH, 'is not a file')
|
| + if not os.path.isfile(USER_KEY_PATH):
|
| + raise EnvironmentError(USER_KEY_PATH, 'is not a file')
|
| +
|
| +
|
| +def _check_user_info(credentials, expected_email):
|
| + http = credentials.authorize(httplib2.Http())
|
| + response, content = http.request(USER_INFO)
|
| + if response.status != 200:
|
| + raise ValueError('Expected 200 response.')
|
| +
|
| + content = content.decode('utf-8')
|
| + payload = json.loads(content)
|
| + if payload['email'] != expected_email:
|
| + raise ValueError('User info email does not match credentials.')
|
| +
|
| +
|
| +def run_json():
|
| + with open(JSON_KEY_PATH, 'r') as file_object:
|
| + client_credentials = json.load(file_object)
|
| +
|
| + credentials = service_account._ServiceAccountCredentials(
|
| + service_account_id=client_credentials['client_id'],
|
| + service_account_email=client_credentials['client_email'],
|
| + private_key_id=client_credentials['private_key_id'],
|
| + private_key_pkcs8_text=client_credentials['private_key'],
|
| + scopes=SCOPE,
|
| + )
|
| +
|
| + _check_user_info(credentials, client_credentials['client_email'])
|
| +
|
| +
|
| +def run_p12():
|
| + with open(P12_KEY_PATH, 'rb') as file_object:
|
| + private_key_contents = file_object.read()
|
| +
|
| + credentials = client.SignedJwtAssertionCredentials(
|
| + service_account_name=P12_KEY_EMAIL,
|
| + private_key=private_key_contents,
|
| + scope=SCOPE,
|
| + )
|
| +
|
| + _check_user_info(credentials, P12_KEY_EMAIL)
|
| +
|
| +
|
| +def run_user_json():
|
| + with open(USER_KEY_PATH, 'r') as file_object:
|
| + client_credentials = json.load(file_object)
|
| +
|
| + credentials = client.GoogleCredentials(
|
| + access_token=None,
|
| + client_id=client_credentials['client_id'],
|
| + client_secret=client_credentials['client_secret'],
|
| + refresh_token=client_credentials['refresh_token'],
|
| + token_expiry=None,
|
| + token_uri=client.GOOGLE_TOKEN_URI,
|
| + user_agent='Python client library',
|
| + )
|
| +
|
| + _check_user_info(credentials, USER_KEY_EMAIL)
|
| +
|
| +
|
| +def main():
|
| + _require_environ()
|
| + run_json()
|
| + run_p12()
|
| + run_user_json()
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|