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