Merge pull request #7276 from electron/google-api-key-env2
allow GOOGLE_API_KEY to be set
This commit is contained in:
commit
805ce0dee9
3 changed files with 42 additions and 9 deletions
|
@ -4,10 +4,12 @@
|
||||||
|
|
||||||
#include "atom/browser/atom_access_token_store.h"
|
#include "atom/browser/atom_access_token_store.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "atom/browser/atom_browser_context.h"
|
#include "atom/browser/atom_browser_context.h"
|
||||||
#include "atom/common/google_api_key.h"
|
#include "atom/common/google_api_key.h"
|
||||||
|
#include "base/environment.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/browser/geolocation_provider.h"
|
#include "content/public/browser/geolocation_provider.h"
|
||||||
|
|
||||||
|
@ -17,13 +19,6 @@ namespace atom {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Notice that we just combined the api key with the url together here, because
|
|
||||||
// if we use the standard {url: key} format Chromium would override our key with
|
|
||||||
// the predefined one in common.gypi of libchromiumcontent, which is empty.
|
|
||||||
const char* kGeolocationProviderURL =
|
|
||||||
"https://www.googleapis.com/geolocation/v1/geolocate?key="
|
|
||||||
GOOGLEAPIS_API_KEY;
|
|
||||||
|
|
||||||
// Loads access tokens and other necessary data on the UI thread, and
|
// Loads access tokens and other necessary data on the UI thread, and
|
||||||
// calls back to the originator on the originating thread.
|
// calls back to the originator on the originating thread.
|
||||||
class TokenLoadingJob : public base::RefCountedThreadSafe<TokenLoadingJob> {
|
class TokenLoadingJob : public base::RefCountedThreadSafe<TokenLoadingJob> {
|
||||||
|
@ -49,15 +44,18 @@ class TokenLoadingJob : public base::RefCountedThreadSafe<TokenLoadingJob> {
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||||
auto browser_context = AtomBrowserContext::From("", false);
|
auto browser_context = AtomBrowserContext::From("", false);
|
||||||
request_context_getter_ = browser_context->GetRequestContext();
|
request_context_getter_ = browser_context->GetRequestContext();
|
||||||
|
std::unique_ptr<base::Environment> env(base::Environment::Create());
|
||||||
|
if (!env->GetVar("GOOGLE_API_KEY", &api_key_))
|
||||||
|
api_key_ = GOOGLEAPIS_API_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RespondOnOriginatingThread() {
|
void RespondOnOriginatingThread() {
|
||||||
// Equivelent to access_token_map[kGeolocationProviderURL].
|
// Equivalent to access_token_map[kGeolocationProviderURL].
|
||||||
// Somehow base::string16 is causing compilation errors when used in a pair
|
// Somehow base::string16 is causing compilation errors when used in a pair
|
||||||
// of std::map on Linux, this can work around it.
|
// of std::map on Linux, this can work around it.
|
||||||
content::AccessTokenStore::AccessTokenMap access_token_map;
|
content::AccessTokenStore::AccessTokenMap access_token_map;
|
||||||
std::pair<GURL, base::string16> token_pair;
|
std::pair<GURL, base::string16> token_pair;
|
||||||
token_pair.first = GURL(kGeolocationProviderURL);
|
token_pair.first = GURL(GOOGLEAPIS_ENDPOINT + api_key_);
|
||||||
access_token_map.insert(token_pair);
|
access_token_map.insert(token_pair);
|
||||||
|
|
||||||
callback_.Run(access_token_map, request_context_getter_);
|
callback_.Run(access_token_map, request_context_getter_);
|
||||||
|
@ -65,6 +63,7 @@ class TokenLoadingJob : public base::RefCountedThreadSafe<TokenLoadingJob> {
|
||||||
|
|
||||||
content::AccessTokenStore::LoadAccessTokensCallback callback_;
|
content::AccessTokenStore::LoadAccessTokensCallback callback_;
|
||||||
net::URLRequestContextGetter* request_context_getter_;
|
net::URLRequestContextGetter* request_context_getter_;
|
||||||
|
std::string api_key_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -5,6 +5,11 @@
|
||||||
#ifndef ATOM_COMMON_GOOGLE_API_KEY_H_
|
#ifndef ATOM_COMMON_GOOGLE_API_KEY_H_
|
||||||
#define ATOM_COMMON_GOOGLE_API_KEY_H_
|
#define ATOM_COMMON_GOOGLE_API_KEY_H_
|
||||||
|
|
||||||
|
#ifndef GOOGLEAPIS_ENDPOINT
|
||||||
|
#define GOOGLEAPIS_ENDPOINT \
|
||||||
|
"https://www.googleapis.com/geolocation/v1/geolocate?key="
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GOOGLEAPIS_API_KEY
|
#ifndef GOOGLEAPIS_API_KEY
|
||||||
#define GOOGLEAPIS_API_KEY "AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q"
|
#define GOOGLEAPIS_API_KEY "AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,6 +19,35 @@ Windows console example:
|
||||||
> electron
|
> electron
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Production Variables
|
||||||
|
|
||||||
|
The following environment variables are intended primarily for use at runtime
|
||||||
|
in packaged Electron applications.
|
||||||
|
|
||||||
|
### `GOOGLE_API_KEY`
|
||||||
|
|
||||||
|
Electron includes a hardcoded API key for making requests to Google's geocoding
|
||||||
|
webservice. Because this API key is included in every version of Electron, it
|
||||||
|
often exceeds its usage quota. To work around this, you can supply your own
|
||||||
|
Google API key in the environment. Place the following code in your main process
|
||||||
|
file, before opening any browser windows that will make geocoding requests:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
process.env.GOOGLE_API_KEY = 'YOUR_KEY_HERE'
|
||||||
|
```
|
||||||
|
|
||||||
|
For instructions on how to acquire a Google API key, see
|
||||||
|
https://www.chromium.org/developers/how-tos/api-keys
|
||||||
|
|
||||||
|
By default, a newly generated Google API key may not be allowed to make
|
||||||
|
geocoding requests. To enable geocoding requests, visit this page:
|
||||||
|
https://console.developers.google.com/apis/api/geolocation/overview
|
||||||
|
|
||||||
|
## Development Variables
|
||||||
|
|
||||||
|
The following environment variables are intended primarily for development and
|
||||||
|
debugging purposes.
|
||||||
|
|
||||||
### `ELECTRON_RUN_AS_NODE`
|
### `ELECTRON_RUN_AS_NODE`
|
||||||
|
|
||||||
Starts the process as a normal Node.js process.
|
Starts the process as a normal Node.js process.
|
||||||
|
|
Loading…
Reference in a new issue