Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: chrome/common/net/google_apis/google_api_keys.cc

Issue 10928017: Moving google_apis and GaiaClient to src/google_apis. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to head Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/net/google_apis/google_api_keys.h ('k') | chrome/common_constants.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/common/net/google_apis/google_api_keys.h"
6
7 #include "base/command_line.h"
8 #include "base/environment.h"
9 #include "base/lazy_instance.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/stringize_macros.h"
12
13 #if defined(GOOGLE_CHROME_BUILD)
14 // TODO(joi): Include a src-internal file that defines the official
15 // keys for official builds, something like: #include
16 // "chrome/app/internal/official_google_api_keys.h"
17 #endif
18
19 #if !defined(GOOGLE_API_KEY)
20 // TODO(joi): This should be blank here, with the official key
21 // provided in official builds.
22 #define GOOGLE_API_KEY "abcNOTREALKEYxyz"
23 #endif
24
25 #if !defined(GOOGLE_CLIENT_ID_MAIN)
26 // TODO(joi): This should be blank here, but provided in official
27 // builds.
28 #define GOOGLE_CLIENT_ID_MAIN "77185425430.apps.googleusercontent.com"
29 #endif
30
31 #if !defined(GOOGLE_CLIENT_SECRET_MAIN)
32 // TODO(joi): This should be blank here, but provided in official
33 // builds.
34 #define GOOGLE_CLIENT_SECRET_MAIN "OTJgUOQcT7lO7GsGZq2G4IlT"
35 #endif
36
37 #if !defined(GOOGLE_CLIENT_ID_CLOUD_PRINT)
38 // TODO(joi): This should be blank here, but provided in official
39 // builds.
40 #define GOOGLE_CLIENT_ID_CLOUD_PRINT "551556820943.apps.googleusercontent.com"
41 #endif
42
43 #if !defined(GOOGLE_CLIENT_SECRET_CLOUD_PRINT)
44 // TODO(joi): This should be blank here, but provided in official
45 // builds.
46 #define GOOGLE_CLIENT_SECRET_CLOUD_PRINT "u3/mp8CgLFxh4uiX1855/MHe"
47 #endif
48
49 #if !defined(GOOGLE_CLIENT_ID_REMOTING)
50 // TODO(joi): This should be blank here, but provided in official
51 // builds.
52 #define GOOGLE_CLIENT_ID_REMOTING \
53 "440925447803-avn2sj1kc099s0r7v62je5s339mu0am1.apps.googleusercontent.com"
54 #endif
55
56 #if !defined(GOOGLE_CLIENT_SECRET_REMOTING)
57 // TODO(joi): This should be blank here, but provided in official
58 // builds.
59 #define GOOGLE_CLIENT_SECRET_REMOTING "Bgur6DFiOMM1h8x-AQpuTQlK"
60 #endif
61
62 // These are used as shortcuts for developers and users providing
63 // OAuth credentials via preprocessor defines or environment
64 // variables. If set, they will be used to replace any of the client
65 // IDs and secrets above that have not been set (and only those; they
66 // will not override already-set values).
67 #if !defined(GOOGLE_DEFAULT_CLIENT_ID)
68 #define GOOGLE_DEFAULT_CLIENT_ID ""
69 #endif
70 #if !defined(GOOGLE_DEFAULT_CLIENT_SECRET)
71 #define GOOGLE_DEFAULT_CLIENT_SECRET ""
72 #endif
73
74 namespace switches {
75
76 // Specifies custom OAuth2 client id for testing purposes.
77 const char kOAuth2ClientID[] = "oauth2-client-id";
78
79 // Specifies custom OAuth2 client secret for testing purposes.
80 const char kOAuth2ClientSecret[] = "oauth2-client-secret";
81
82 } // namespace switches
83
84 namespace google_apis {
85
86 namespace {
87
88 // This is used as a lazy instance to determine keys once and cache them.
89 class APIKeyCache {
90 public:
91 APIKeyCache() {
92 scoped_ptr<base::Environment> environment(base::Environment::Create());
93 CommandLine* command_line = CommandLine::ForCurrentProcess();
94
95 api_key_ = CalculateKeyValue(GOOGLE_API_KEY,
96 STRINGIZE_NO_EXPANSION(GOOGLE_API_KEY),
97 NULL, "",
98 environment.get(),
99 command_line);
100
101 std::string default_client_id = CalculateKeyValue(
102 GOOGLE_DEFAULT_CLIENT_ID,
103 STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID),
104 NULL, "",
105 environment.get(),
106 command_line);
107 std::string default_client_secret = CalculateKeyValue(
108 GOOGLE_DEFAULT_CLIENT_SECRET,
109 STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET),
110 NULL, "",
111 environment.get(),
112 command_line);
113
114 // We currently only allow overriding the baked-in values for the
115 // default OAuth2 client ID and secret using a command-line
116 // argument, since that is useful to enable testing against
117 // staging servers, and since that was what was possible and
118 // likely practiced by the QA team before this implementation was
119 // written.
120 client_ids_[CLIENT_MAIN] = CalculateKeyValue(
121 GOOGLE_CLIENT_ID_MAIN,
122 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_ID_MAIN),
123 switches::kOAuth2ClientID,
124 default_client_id,
125 environment.get(),
126 command_line);
127 client_secrets_[CLIENT_MAIN] = CalculateKeyValue(
128 GOOGLE_CLIENT_SECRET_MAIN,
129 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_SECRET_MAIN),
130 switches::kOAuth2ClientSecret,
131 default_client_secret,
132 environment.get(),
133 command_line);
134
135 client_ids_[CLIENT_CLOUD_PRINT] = CalculateKeyValue(
136 GOOGLE_CLIENT_ID_CLOUD_PRINT,
137 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_ID_CLOUD_PRINT),
138 NULL,
139 default_client_id,
140 environment.get(),
141 command_line);
142 client_secrets_[CLIENT_CLOUD_PRINT] = CalculateKeyValue(
143 GOOGLE_CLIENT_SECRET_CLOUD_PRINT,
144 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_SECRET_CLOUD_PRINT),
145 NULL,
146 default_client_secret,
147 environment.get(),
148 command_line);
149
150 client_ids_[CLIENT_REMOTING] = CalculateKeyValue(
151 GOOGLE_CLIENT_ID_REMOTING,
152 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_ID_REMOTING),
153 NULL,
154 default_client_id,
155 environment.get(),
156 command_line);
157 client_secrets_[CLIENT_REMOTING] = CalculateKeyValue(
158 GOOGLE_CLIENT_SECRET_REMOTING,
159 STRINGIZE_NO_EXPANSION(GOOGLE_CLIENT_SECRET_REMOTING),
160 NULL,
161 default_client_secret,
162 environment.get(),
163 command_line);
164 }
165
166 std::string api_key() const { return api_key_; }
167
168 std::string GetClientID(OAuth2Client client) const {
169 DCHECK_LT(client, CLIENT_NUM_ITEMS);
170 return client_ids_[client];
171 }
172
173 std::string GetClientSecret(OAuth2Client client) const {
174 DCHECK_LT(client, CLIENT_NUM_ITEMS);
175 return client_secrets_[client];
176 }
177
178 private:
179 // Gets a value for a key. In priority order, this will be the value
180 // provided via a command-line switch, the value provided via an
181 // environment variable, or finally a value baked into the build.
182 // |command_line_switch| may be NULL.
183 static std::string CalculateKeyValue(const char* baked_in_value,
184 const char* environment_variable_name,
185 const char* command_line_switch,
186 const std::string& default_if_unset,
187 base::Environment* environment,
188 CommandLine* command_line) {
189 std::string key_value = baked_in_value;
190 std::string temp;
191 if (environment->GetVar(environment_variable_name, &temp))
192 key_value = temp;
193 if (command_line_switch && command_line->HasSwitch(command_line_switch))
194 key_value = command_line->GetSwitchValueASCII(command_line_switch);
195
196 if (key_value.size() == 0) {
197 #if defined(GOOGLE_CHROME_BUILD)
198 // No key should be empty in an official build, except the
199 // default keys themselves, which will have an empty default.
200 CHECK(default_if_unset.size() == 0);
201 #endif
202 key_value = default_if_unset;
203 }
204
205 return key_value;
206 }
207
208 // If |default_value| itself is not empty, any empty strings in
209 // |array| (which has |array_count| items) will be replaced with a
210 // copy of the default value.
211 static void ReplaceEmptyItemsWithDefaultValue(
212 const std::string& default_value,
213 std::string* array,
214 size_t array_count) {
215 if (default_value.size() > 0) {
216 for (size_t i = 0; i < array_count; ++i) {
217 if (array[i].size() == 0) {
218 #if defined(GOOGLE_CHROME_BUILD)
219 // None of these should be empty in official builds.
220 CHECK(false);
221 #endif
222 array[i] = default_value;
223 }
224 }
225 }
226 }
227
228 std::string api_key_;
229 std::string client_ids_[CLIENT_NUM_ITEMS];
230 std::string client_secrets_[CLIENT_NUM_ITEMS];
231 };
232
233 static base::LazyInstance<APIKeyCache> g_api_key_cache =
234 LAZY_INSTANCE_INITIALIZER;
235
236 } // namespace
237
238 std::string GetAPIKey() {
239 return g_api_key_cache.Get().api_key();
240 }
241
242 std::string GetOAuth2ClientID(OAuth2Client client) {
243 return g_api_key_cache.Get().GetClientID(client);
244 }
245
246 std::string GetOAuth2ClientSecret(OAuth2Client client) {
247 return g_api_key_cache.Get().GetClientSecret(client);
248 }
249
250 } // namespace google_apis
OLDNEW
« no previous file with comments | « chrome/common/net/google_apis/google_api_keys.h ('k') | chrome/common_constants.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698