summaryrefslogtreecommitdiffstats
path: root/google_apis/google_api_keys.py
blob: 0f98c79f3c0866812664c56c34abbbf7a4d95db3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/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 does not have the exact same semantics as the C++ API
in google_api_keys.h, since it does not have access to gyp variables
or preprocessor defines.
"""

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(os.path.dirname(__file__),
                               '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 GetAPIKeyPhysicalWebTest():
  """Returns the API key to test Physical Web service."""
  return _GetToken('GOOGLE_API_KEY_PHYSICAL_WEB_TEST')


def GetAPIKeyRemoting():
  """Returns the simple API key."""
  return _GetToken('GOOGLE_API_KEY_REMOTING')


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_API_KEY_REMOTING=%s' % GetAPIKeyRemoting()
  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')
  print 'GOOGLE_CLIENT_ID_REMOTING_HOST=%s' % GetClientID('REMOTING_HOST')
  print 'GOOGLE_CLIENT_SECRET_REMOTING_HOST=%s' % GetClientSecret(
      'REMOTING_HOST')
  print 'GOOGLE_CLIENT_ID_REMOTING_IDENTITY_API=%s' %GetClientID(
      'REMOTING_IDENTITY_API')