15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Python API for retrieving API keys. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochNote that this does not have the exact same semantics as the C++ API 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochin google_api_keys.h, since it does not have access to gyp variables 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochor preprocessor defines. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The token returned when an API key is unset. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DUMMY_TOKEN = 'dummytoken' 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _GetTokenFromOfficialFile(token_name): 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Parses the token from the official file if it exists, else returns None.""" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) official_path = os.path.join(os.path.dirname(__file__), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'internal/google_chrome_api_keys.h') 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not os.path.isfile(official_path): 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line_regexp = '^#define\s*%s\s*"([^"]+)"' % token_name 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line_pattern = re.compile(line_regexp) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def ParseLine(current_line): 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = line_pattern.match(current_line) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if result: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result.group(1) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) with open(official_path) as f: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_line = '' 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for line in f: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if line.endswith('\\\n'): 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_line += line[:-2] 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Last line in multi-line #define, or a line that is not a 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # continuation line. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_line += line 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token = ParseLine(current_line) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if token: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if current_line.count('"') != 2: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise Exception( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Embedded quotes and multi-line strings are not supported.') 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return token 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current_line = '' 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _GetToken(token_name): 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns the API token with the given name, or DUMMY_TOKEN by default.""" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if token_name in os.environ: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os.environ[token_name] 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token = _GetTokenFromOfficialFile(token_name) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if token: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return token 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return DUMMY_TOKEN 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetAPIKey(): 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns the simple API key.""" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _GetToken('GOOGLE_API_KEY') 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetClientID(client_name): 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns the OAuth 2.0 client ID for the client of the given name.""" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _GetToken('GOOGLE_CLIENT_ID_%s' % client_name) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetClientSecret(client_name): 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns the OAuth 2.0 client secret for the client of the given name.""" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _GetToken('GOOGLE_CLIENT_SECRET_%s' % client_name) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == "__main__": 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_API_KEY=%s' % GetAPIKey() 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_ID_MAIN=%s' % GetClientID('MAIN') 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_SECRET_MAIN=%s' % GetClientSecret('MAIN') 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_ID_CLOUD_PRINT=%s' % GetClientID('CLOUD_PRINT') 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_SECRET_CLOUD_PRINT=%s' % GetClientSecret('CLOUD_PRINT') 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_ID_REMOTING=%s' % GetClientID('REMOTING') 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'GOOGLE_CLIENT_SECRET_REMOTING=%s' % GetClientSecret('REMOTING') 91