blob: 8f4bc7e9cacded2d94d0f9c697b87cfb0de42d08 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// 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#ifndef GOOGLE_APIS_GOOGLE_API_KEYS_H_
6#define GOOGLE_APIS_GOOGLE_API_KEYS_H_
7
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00008// If you add more includes to this file, you also need to add them to
9// google_api_keys_unittest.cc.
Torne (Richard Coles)58218062012-11-14 11:43:16 +000010#include <string>
11
12// These functions enable you to retrieve keys to use for Google APIs
13// such as Translate and Safe Browsing.
14//
15// You can retrieve either an "API key" (sometimes called a developer
16// key) which identifies you (or the company you work for) as a
17// developer, or you can retrieve the "client ID" and "client secret"
18// used by you (or the company you work for) to generate OAuth2
19// requests.
20//
21// Each developer (or group of developers working together for a
22// single company) must request a Google API key and the client ID and
23// client secret for OAuth2. See
24// https://developers.google.com/console/help/ and
25// https://developers.google.com/console/.
26//
27// The keys must either be provided using preprocessor variables (set
28// via e.g. ~/.gyp/include.gypi). Alternatively, they can be
29// overridden at runtime using environment variables of the same name.
30//
31// The names of the preprocessor variables (or environment variables
32// to override them at runtime) are as follows:
33// - GOOGLE_API_KEY: The API key, a.k.a. developer key.
34// - GOOGLE_DEFAULT_CLIENT_ID: If set, this is used as the default for
35// all client IDs not otherwise set. This is intended only for
36// development.
37// - GOOGLE_DEFAULT_CLIENT_SECRET: If set, this is used as the default
38// for all client secrets. This is intended only for development.
39// - GOOGLE_CLIENT_ID_[client name]
40// (e.g. GOOGLE_CLIENT_ID_CLOUD_PRINT, i.e. one for each item in the
41// OAuth2Client enumeration below)
42// - GOOGLE_CLIENT_SECRET_[client name]
43// (e.g. GOOGLE_CLIENT_SECRET_CLOUD_PRINT, i.e. one for each item in
44// the OAuth2Client enumeration below)
45//
46// The GOOGLE_CLIENT_ID_MAIN and GOOGLE_CLIENT_SECRET_MAIN values can
47// also be set via the command line (this overrides any other
48// setting). The command-line parameters are --oauth2-client-id and
49// --oauth2-client-secret.
50//
51// If some of the parameters mentioned above are not provided,
52// Chromium will still build and run, but services that require them
53// may fail to work without warning. They should do so gracefully,
54// similar to what would happen when a network connection is
55// unavailable.
56
57namespace google_apis {
58
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010059// Returns true if no dummy API keys or OAuth2 tokens are set.
60bool HasKeysConfigured();
61
62// Retrieves the API key, a.k.a. developer key, or a dummy string
Torne (Richard Coles)58218062012-11-14 11:43:16 +000063// if not set.
64//
65// Note that the key should be escaped for the context you use it in,
66// e.g. URL-escaped if you use it in a URL.
67std::string GetAPIKey();
68
69// Represents the different sets of client IDs and secrets in use.
70enum OAuth2Client {
71 CLIENT_MAIN, // Several different features use this.
72 CLIENT_CLOUD_PRINT,
73 CLIENT_REMOTING,
Torne (Richard Coles)3551c9c2013-08-23 16:39:15 +010074 CLIENT_REMOTING_HOST,
Torne (Richard Coles)58218062012-11-14 11:43:16 +000075
76 CLIENT_NUM_ITEMS // Must be last item.
77};
78
79// Retrieves the OAuth2 client ID for the specified client, or the
80// empty string if not set.
81//
82// Note that the ID should be escaped for the context you use it in,
83// e.g. URL-escaped if you use it in a URL.
84std::string GetOAuth2ClientID(OAuth2Client client);
85
86// Retrieves the OAuth2 client secret for the specified client, or the
87// empty string if not set.
88//
89// Note that the secret should be escaped for the context you use it
90// in, e.g. URL-escaped if you use it in a URL.
91std::string GetOAuth2ClientSecret(OAuth2Client client);
92
93} // namespace google_apis
94
95#endif // GOOGLE_APIS_GOOGLE_API_KEYS_H_