1 #!/usr/bin/env python 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 """Python API for retrieving API keys. 7 8 Note that this does not have the exact same semantics as the C++ API 9 in google_api_keys.h, since it does not have access to gyp variables 10 or preprocessor defines. 11 """ 12 13 import os 14 import re 15 import sys 16 17 18 # The token returned when an API key is unset. 19 DUMMY_TOKEN = 'dummytoken' 20 21 22 def _GetTokenFromOfficialFile(token_name): 23 """Parses the token from the official file if it exists, else returns None.""" 24 official_path = os.path.join(os.path.dirname(__file__), 25 'internal/google_chrome_api_keys.h') 26 if not os.path.isfile(official_path): 27 return None 28 29 line_regexp = '^#define\s*%s\s*"([^"]+)"' % token_name 30 line_pattern = re.compile(line_regexp) 31 def ParseLine(current_line): 32 result = line_pattern.match(current_line) 33 if result: 34 return result.group(1) 35 else: 36 return None 37 38 with open(official_path) as f: 39 current_line = '' 40 for line in f: 41 if line.endswith('\\\n'): 42 current_line += line[:-2] 43 else: 44 # Last line in multi-line #define, or a line that is not a 45 # continuation line. 46 current_line += line 47 token = ParseLine(current_line) 48 if token: 49 if current_line.count('"') != 2: 50 raise Exception( 51 'Embedded quotes and multi-line strings are not supported.') 52 return token 53 current_line = '' 54 return None 55 56 57 def _GetToken(token_name): 58 """Returns the API token with the given name, or DUMMY_TOKEN by default.""" 59 if token_name in os.environ: 60 return os.environ[token_name] 61 token = _GetTokenFromOfficialFile(token_name) 62 if token: 63 return token 64 else: 65 return DUMMY_TOKEN 66 67 68 def GetAPIKey(): 69 """Returns the simple API key.""" 70 return _GetToken('GOOGLE_API_KEY') 71 72 73 def GetClientID(client_name): 74 """Returns the OAuth 2.0 client ID for the client of the given name.""" 75 return _GetToken('GOOGLE_CLIENT_ID_%s' % client_name) 76 77 78 def GetClientSecret(client_name): 79 """Returns the OAuth 2.0 client secret for the client of the given name.""" 80 return _GetToken('GOOGLE_CLIENT_SECRET_%s' % client_name) 81 82 83 if __name__ == "__main__": 84 print 'GOOGLE_API_KEY=%s' % GetAPIKey() 85 print 'GOOGLE_CLIENT_ID_MAIN=%s' % GetClientID('MAIN') 86 print 'GOOGLE_CLIENT_SECRET_MAIN=%s' % GetClientSecret('MAIN') 87 print 'GOOGLE_CLIENT_ID_CLOUD_PRINT=%s' % GetClientID('CLOUD_PRINT') 88 print 'GOOGLE_CLIENT_SECRET_CLOUD_PRINT=%s' % GetClientSecret('CLOUD_PRINT') 89 print 'GOOGLE_CLIENT_ID_REMOTING=%s' % GetClientID('REMOTING') 90 print 'GOOGLE_CLIENT_SECRET_REMOTING=%s' % GetClientSecret('REMOTING') 91 print 'GOOGLE_CLIENT_ID_REMOTING_HOST=%s' % GetClientID('REMOTING_HOST') 92 print 'GOOGLE_CLIENT_SECRET_REMOTING_HOST=%s' % GetClientSecret( 93 'REMOTING_HOST') 94 print 'GOOGLE_CLIENT_ID_REMOTING_IDENTITY_API=%s' %GetClientID( 95 'REMOTING_IDENTITY_API') 96