diff options
Diffstat (limited to 'google_apis')
-rwxr-xr-x | google_apis/google_api_keys.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/google_apis/google_api_keys.py b/google_apis/google_api_keys.py new file mode 100755 index 0000000..26fd236 --- /dev/null +++ b/google_apis/google_api_keys.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Python API for retrieving API keys. + +Note that this cannot have the exact same semantics (at the moment) as +the C++ API in google_api_keys.h, since it does not have access to gyp +variables or preprocessor defines. + +TODO(joi): Give this have the same semantics as the C++ API. +""" + +import os +import re +import sys + + +# The token returned when an API key is unset. +DUMMY_TOKEN = 'dummytoken' + + +def _GetTokenFromOfficialFile(token_name): + """Parses the token from the official file if it exists, else returns None.""" + official_path = os.path.join(sys.path[0], + 'internal/google_chrome_api_keys.h') + if not os.path.isfile(official_path): + return None + + line_regexp = '^#define\s*%s\s*"([^"]+)"' % token_name + line_pattern = re.compile(line_regexp) + def ParseLine(current_line): + result = line_pattern.match(current_line) + if result: + return result.group(1) + else: + return None + + with open(official_path) as f: + current_line = '' + for line in f: + if line.endswith('\\\n'): + current_line += line[:-2] + else: + # Last line in multi-line #define, or a line that is not a + # continuation line. + current_line += line + token = ParseLine(current_line) + if token: + if current_line.count('"') != 2: + raise Exception( + 'Embedded quotes and multi-line strings are not supported.') + return token + current_line = '' + return None + + +def _GetToken(token_name): + """Returns the API token with the given name, or DUMMY_TOKEN by default.""" + if token_name in os.environ: + return os.environ[token_name] + token = _GetTokenFromOfficialFile(token_name) + if token: + return token + else: + return DUMMY_TOKEN + + +def GetAPIKey(): + """Returns the simple API key.""" + return _GetToken('GOOGLE_API_KEY') + + +def GetClientID(client_name): + """Returns the OAuth 2.0 client ID for the client of the given name.""" + return _GetToken('GOOGLE_CLIENT_ID_%s' % client_name) + + +def GetClientSecret(client_name): + """Returns the OAuth 2.0 client secret for the client of the given name.""" + return _GetToken('GOOGLE_CLIENT_SECRET_%s' % client_name) + + +if __name__ == "__main__": + print 'GOOGLE_API_KEY=%s' % GetAPIKey() + print 'GOOGLE_CLIENT_ID_MAIN=%s' % GetClientID('MAIN') + print 'GOOGLE_CLIENT_SECRET_MAIN=%s' % GetClientSecret('MAIN') + print 'GOOGLE_CLIENT_ID_CLOUD_PRINT=%s' % GetClientID('CLOUD_PRINT') + print 'GOOGLE_CLIENT_SECRET_CLOUD_PRINT=%s' % GetClientSecret('CLOUD_PRINT') + print 'GOOGLE_CLIENT_ID_REMOTING=%s' % GetClientID('REMOTING') + print 'GOOGLE_CLIENT_SECRET_REMOTING=%s' % GetClientSecret('REMOTING') |