mirror of
https://github.com/HackPlan/google-auth-library-nodejs.git
synced 2026-01-12 22:44:19 +08:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,3 +1,15 @@
|
||||
## 0.9.8 (05/10/2016)
|
||||
|
||||
### Changes
|
||||
|
||||
* Update README.md ([@tbetbetbe][])
|
||||
* Check that pem exists before verifying it ([@murgatroid99][])
|
||||
* Fix User-Agent header ([@matthewloring][])
|
||||
* Fix some lint errors ([@murgatroid99][])
|
||||
* Added test for OAuth2Client#request retry, fixed implementation ([@murgatroid99][])
|
||||
* Fixed returned toString encoding of OAuth2Client.prototype.decodeBase64 method. ([@yamafaktory][])
|
||||
* Use full compute metadata DNS name ([@jonparrot][])
|
||||
|
||||
## 0.9.7 (11/06/2015)
|
||||
|
||||
### Changes
|
||||
@@ -41,3 +53,7 @@
|
||||
[@ryan-devrel]: https://github.com/ryan-devrel
|
||||
[@stephenplusplus]: https://github.com/stephenplusplus
|
||||
[@tbetbetbe]: https://github.com/tbetbetbe
|
||||
[@murgatroid99]: https//github.com/murgatroid99
|
||||
[@matthewloring]: https://github.com/matthewloring
|
||||
[@yamafaktory]: https://github.com/yamafaktory
|
||||
[@jonparrot]: https://github.com/jonparrot
|
||||
|
||||
116
README.md
116
README.md
@@ -6,10 +6,6 @@
|
||||
This is Google's officially supported [node.js][node] client library for using
|
||||
OAuth 2.0 authorization and authentication with Google APIs.
|
||||
|
||||
### Alpha
|
||||
|
||||
This library is in Alpha. We will make an effort to support the library, but we reserve the right to make incompatible changes when necessary.
|
||||
|
||||
### Questions/problems?
|
||||
|
||||
* Ask your development related questions on [![Ask a question on Stackoverflow][overflowimg]][stackoverflow]
|
||||
@@ -24,46 +20,10 @@ run the following command:
|
||||
$ npm install google-auth-library --save
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
This library is licensed under Apache 2.0. Full license text is
|
||||
available in [COPYING][copying].
|
||||
|
||||
## Example Usage
|
||||
|
||||
``` js
|
||||
var GoogleAuth = require('google-auth-library');
|
||||
|
||||
// Get the environment configured authorization
|
||||
(new GoogleAuth).getApplicationDefault(function(err, authClient) {
|
||||
if (err === null) {
|
||||
// Inject scopes if they have not been injected by the environment
|
||||
if (authClient.createScopedRequired && authClient.createScopedRequired()) {
|
||||
var scopes = [
|
||||
'https://www.googleapis.com/auth/cloud-platform',
|
||||
'https://www.googleapis.com/auth/compute'
|
||||
];
|
||||
authClient = authClient.createScoped(scopes);
|
||||
}
|
||||
|
||||
// Fetch the access token
|
||||
var _ = require(lodash);
|
||||
var optionalUri = null; // optionally specify the URI being authorized
|
||||
var reqHeaders = {};
|
||||
authClient.getRequestMetadata(optionalUri, function(err, headers) {
|
||||
if (err === null) {
|
||||
// Use authorization headers
|
||||
reqHeaders = _.merge(allHeaders, headers);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Application Default Credentials
|
||||
This library provides an implementation of application default credentials for Node.js.
|
||||
This library provides an implementation of [Application Default Credentials][] for Node.js.
|
||||
|
||||
The Application Default Credentials provide a simple way to get authorization credentials for use
|
||||
The [Application Default Credentials][] provide a simple way to get authorization credentials for use
|
||||
in calling Google APIs.
|
||||
|
||||
They are best suited for cases when the call needs to have the same identity and authorization
|
||||
@@ -71,10 +31,81 @@ level for the application independent of the user. This is the recommended appro
|
||||
calls to Cloud APIs, particularly when you're building an application that uses Google Compute
|
||||
Engine.
|
||||
|
||||
#### Download your Service Account Credentials JSON file
|
||||
|
||||
To use `Application Default Credentials`, You first need to download a set of
|
||||
JSON credentials for your project. Go to **APIs & Auth** > **Credentials** in
|
||||
the [Google Developers Console](developer console) and select
|
||||
**Service account** from the **Add credentials** dropdown.
|
||||
|
||||
> This file is your *only copy* of these credentials. It should never be
|
||||
> committed with your source code, and should be stored securely.
|
||||
|
||||
Once downloaded, store the path to this file in the
|
||||
`GOOGLE_APPLICATION_CREDENTIALS` environment variable.
|
||||
|
||||
#### Enable the API you want to use
|
||||
|
||||
Before making your API call, you must be sure the API you're calling has been
|
||||
enabled. Go to **APIs & Auth** > **APIs** in the
|
||||
[Google Developers Console](developer console) and enable the APIs you'd like to
|
||||
call. For the example below, you must enable the `DNS API`.
|
||||
|
||||
#### Call an API
|
||||
|
||||
As long as you update the environment variable below to point to *your* JSON
|
||||
credentials file, and the fill in the placeholder variables from your project,
|
||||
the following snippet should work.
|
||||
|
||||
```js
|
||||
var google = require('googleapis');
|
||||
var GoogleAuth = require('google-auth-library');
|
||||
|
||||
var authFactory = new GoogleAuth();
|
||||
var dns = google.dns('v1');
|
||||
|
||||
authFactory.getApplicationDefault(function(err, authClient) {
|
||||
if (err) {
|
||||
console.log('Authentication failed because of ', err);
|
||||
return;
|
||||
}
|
||||
if (authClient.createScopedRequired && authClient.createScopedRequired()) {
|
||||
var scopes = ['https://www.googleapis.com/auth/cloud-platform'];
|
||||
authClient = authClient.createScoped(scopes);
|
||||
}
|
||||
|
||||
var request = {
|
||||
// TODO: Change placeholders below to values for parameters to the 'get' method:
|
||||
|
||||
// Identifies the project addressed by this request.
|
||||
project: "",
|
||||
// Identifies the managed zone addressed by this request. Can be the managed zone name or id.
|
||||
managedZone: "",
|
||||
// The identifier of the requested change, from a previous ResourceRecordSetsChangeResponse.
|
||||
changeId: "",
|
||||
// Auth client
|
||||
auth: authClient
|
||||
};
|
||||
|
||||
dns.changes.get(request, function(err, result) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
console.log(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
See [CONTRIBUTING][contributing].
|
||||
|
||||
## License
|
||||
|
||||
This library is licensed under Apache 2.0. Full license text is
|
||||
available in [COPYING][copying].
|
||||
|
||||
[travisimg]: https://api.travis-ci.org/google/google-auth-library-nodejs.svg
|
||||
[bugs]: https://github.com/google/google-auth-library-nodejs/issues
|
||||
[node]: http://nodejs.org/
|
||||
@@ -98,3 +129,4 @@ See [CONTRIBUTING][contributing].
|
||||
[cloudplatform]: https://developers.google.com/cloud/
|
||||
[coveralls]: https://coveralls.io/r/google/google-auth-library-nodejs?branch=master
|
||||
[coverallsimg]: https://img.shields.io/coveralls/google/google-auth-library-nodejs.svg
|
||||
[Application Default Credentials]: https://developers.google.com/identity/protocols/application-default-credentials#callingnode
|
||||
|
||||
@@ -22,7 +22,7 @@ var fs = require('fs');
|
||||
var os = require('os');
|
||||
var path = require('path');
|
||||
var util = require('util');
|
||||
var defaultTransporter = require('../transporters.js');
|
||||
var DefaultTransporter = require('../transporters.js');
|
||||
|
||||
/**
|
||||
* GoogleAuth account manager.
|
||||
@@ -161,7 +161,7 @@ GoogleAuth.prototype._checkIsGCE = function(callback) {
|
||||
callback(that._isGCE);
|
||||
} else {
|
||||
if (!that.transporter) {
|
||||
that.transporter = new defaultTransporter();
|
||||
that.transporter = new DefaultTransporter();
|
||||
}
|
||||
that.transporter.request({
|
||||
method: 'GET',
|
||||
|
||||
@@ -336,11 +336,29 @@ OAuth2Client.prototype.revokeCredentials = function(callback) {
|
||||
* @return {Request} Request object
|
||||
*/
|
||||
OAuth2Client.prototype.request = function(opts, callback) {
|
||||
/* jshint latedef:false */
|
||||
var that = this;
|
||||
|
||||
// Callbacks will close over this to ensure that we only retry once
|
||||
var retry = true;
|
||||
|
||||
// Hook the callback routine to call the _postRequest method.
|
||||
var postRequestCb = function(err, body, resp) {
|
||||
that._postRequest(err, body, resp, callback);
|
||||
// Automatically retry 401 and 403 responses
|
||||
// if err is set, then getting credentials failed, and retrying won't help
|
||||
if (retry && !err && resp &&
|
||||
(resp.statusCode === 401 || resp.statusCode === 403)) {
|
||||
/* It only makes sense to retry once, because the retry is intended to
|
||||
* handle expiration-related failures. If refreshing the token does not
|
||||
* fix the failure, then refreshing again probably won't help */
|
||||
retry = false;
|
||||
// Force token refresh
|
||||
that.refreshAccessToken(function() {
|
||||
that.getRequestMetadata(unusedUri, authCb);
|
||||
});
|
||||
} else {
|
||||
that._postRequest(err, body, resp, callback);
|
||||
}
|
||||
};
|
||||
|
||||
var authCb = function(err, headers, response) {
|
||||
@@ -354,6 +372,7 @@ OAuth2Client.prototype.request = function(opts, callback) {
|
||||
return that._makeRequest(opts, postRequestCb);
|
||||
}
|
||||
};
|
||||
|
||||
var unusedUri = null;
|
||||
return this.getRequestMetadata(unusedUri, authCb);
|
||||
};
|
||||
@@ -492,6 +511,10 @@ OAuth2Client.prototype.verifySignedJwtWithCerts =
|
||||
throw new Error('Can\'t parse token payload: ' + segments[1]);
|
||||
}
|
||||
|
||||
if (!certs.hasOwnProperty(envelope.kid)) {
|
||||
// If this is not present, then there's no reason to attempt verification
|
||||
throw new Error('No pem found for envelope: ' + JSON.stringify(envelope));
|
||||
}
|
||||
var pem = certs[envelope.kid];
|
||||
var pemVerifier = new PemVerifier();
|
||||
var verified = pemVerifier.verify(pem, signed, signature, 'base64');
|
||||
|
||||
@@ -39,8 +39,11 @@ DefaultTransporter.prototype.USER_AGENT =
|
||||
DefaultTransporter.prototype.configure = function(opts) {
|
||||
// set transporter user agent
|
||||
opts.headers = opts.headers || {};
|
||||
opts.headers['User-Agent'] = opts.headers['User-Agent'] ?
|
||||
opts.headers['User-Agent'] + ' ' + this.USER_AGENT : this.USER_AGENT;
|
||||
if (!opts.headers['User-Agent']) {
|
||||
opts.headers['User-Agent'] = this.USER_AGENT;
|
||||
} else if (opts.headers['User-Agent'].indexOf(this.USER_AGENT) === -1) {
|
||||
opts.headers['User-Agent'] = opts.headers['User-Agent'] + ' ' + this.USER_AGENT;
|
||||
}
|
||||
return opts;
|
||||
};
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"gtoken": "^1.1.0",
|
||||
"lodash.noop": "~3.0.0",
|
||||
"jws": "~3.0.0",
|
||||
"request": "~2.60.0",
|
||||
"request": "~2.72.0",
|
||||
"string-template": "~0.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var nock = require('nock');
|
||||
|
||||
nock.disableNetConnect();
|
||||
@@ -27,7 +27,7 @@ describe('Initial credentials', function() {
|
||||
it('should create a dummy refresh token string', function () {
|
||||
// It is important that the compute client is created with a refresh token value filled
|
||||
// in, or else the rest of the logic will not work.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var compute = new auth.Compute();
|
||||
assert.equal('compute-placeholder', compute.credentials.refresh_token);
|
||||
});
|
||||
@@ -37,7 +37,7 @@ describe('Compute auth client', function() {
|
||||
// set up compute client.
|
||||
var compute;
|
||||
beforeEach(function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
compute = new auth.Compute();
|
||||
});
|
||||
|
||||
@@ -81,7 +81,7 @@ describe('Compute auth client', function() {
|
||||
|
||||
describe('.createScopedRequired', function () {
|
||||
it('should return false', function () {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var compute = new auth.Compute();
|
||||
assert.equal(false, compute.createScopedRequired());
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var nock = require('nock');
|
||||
var fs = require('fs');
|
||||
|
||||
@@ -117,11 +117,11 @@ function doneWhen(doneCallback, count) {
|
||||
};
|
||||
}
|
||||
|
||||
describe('googleAuth', function() {
|
||||
describe('GoogleAuth', function() {
|
||||
describe('.fromJson', function () {
|
||||
|
||||
it('should error on null json', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(null, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -131,7 +131,7 @@ describe('googleAuth', function() {
|
||||
describe('JWT token', function() {
|
||||
|
||||
it('should error on empty json', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON({}, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -142,7 +142,7 @@ describe('googleAuth', function() {
|
||||
var json = createJwtJSON();
|
||||
delete json.client_email;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -153,7 +153,7 @@ describe('googleAuth', function() {
|
||||
var json = createJwtJSON();
|
||||
delete json.private_key;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -162,7 +162,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should create JWT with client_email', function (done) {
|
||||
var json = createJwtJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
assert.equal(json.client_email, result.email);
|
||||
@@ -172,7 +172,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should create JWT with private_key', function (done) {
|
||||
var json = createJwtJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
assert.equal(json.private_key, result.key);
|
||||
@@ -182,7 +182,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should create JWT with null scopes', function (done) {
|
||||
var json = createJwtJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
assert.equal(null, result.scopes);
|
||||
@@ -192,7 +192,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should create JWT with null subject', function (done) {
|
||||
var json = createJwtJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
assert.equal(null, result.subject);
|
||||
@@ -202,7 +202,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should create JWT with null keyFile', function (done) {
|
||||
var json = createJwtJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromJSON(json, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
assert.equal(null, result.keyFile);
|
||||
@@ -212,7 +212,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
describe('Refresh token', function() {
|
||||
it('should error on empty json', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT();
|
||||
jwt.fromJSON({}, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -224,7 +224,7 @@ describe('googleAuth', function() {
|
||||
var json = createRefreshJSON();
|
||||
delete json.client_id;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT();
|
||||
jwt.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -236,7 +236,7 @@ describe('googleAuth', function() {
|
||||
var json = createRefreshJSON();
|
||||
delete json.client_secret;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT();
|
||||
jwt.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -248,7 +248,7 @@ describe('googleAuth', function() {
|
||||
var json = createRefreshJSON();
|
||||
delete json.refresh_token;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT();
|
||||
jwt.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -261,7 +261,7 @@ describe('googleAuth', function() {
|
||||
describe('.fromStream', function () {
|
||||
|
||||
it('should error on null stream', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromStream(null, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -277,7 +277,7 @@ describe('googleAuth', function() {
|
||||
var stream = fs.createReadStream('./test/fixtures/private.json');
|
||||
|
||||
// And pass it into the fromStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromStream(stream, function (err, result) {
|
||||
assert.equal(null, err);
|
||||
|
||||
@@ -301,7 +301,7 @@ describe('googleAuth', function() {
|
||||
var stream = fs.createReadStream('./test/fixtures/refresh.json');
|
||||
|
||||
// And pass it into the fromStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromStream(stream, function (err, result) {
|
||||
assert.ifError(err);
|
||||
|
||||
@@ -318,7 +318,7 @@ describe('googleAuth', function() {
|
||||
describe('._getApplicationCredentialsFromFilePath', function () {
|
||||
|
||||
it('should error on null file path', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath(null, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -326,7 +326,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('should error on empty file path', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath('', function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -334,7 +334,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('should error on non-string file path', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath(2, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
done();
|
||||
@@ -342,7 +342,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('should error on invalid file path', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath('./nonexistantfile.json',
|
||||
function (err) {
|
||||
|
||||
@@ -357,7 +357,7 @@ describe('googleAuth', function() {
|
||||
assert.equal(true, fs.lstatSync(directory).isDirectory());
|
||||
|
||||
// Execute.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath(directory,
|
||||
function (err) {
|
||||
|
||||
@@ -368,7 +368,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should handle errors thrown from createReadStream', function (done) {
|
||||
// Set up a mock to throw from the createReadStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._createReadStream = function () {
|
||||
throw new Error('Hans and Chewbacca');
|
||||
};
|
||||
@@ -383,7 +383,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should handle errors thrown from fromStream', function (done) {
|
||||
// Set up a mock to throw from the fromStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromStream = function () {
|
||||
throw new Error('Darth Maul');
|
||||
};
|
||||
@@ -398,7 +398,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should handle errors passed from fromStream', function (done) {
|
||||
// Set up a mock to return an error from the fromStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth.fromStream = function (stream, callback) {
|
||||
callback(new Error('Princess Leia'));
|
||||
};
|
||||
@@ -417,7 +417,7 @@ describe('googleAuth', function() {
|
||||
var json = JSON.parse(fileContents);
|
||||
|
||||
// Now pass the same path to the auth loader.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
auth._getApplicationCredentialsFromFilePath('./test/fixtures/private.json',
|
||||
function (err, result) {
|
||||
|
||||
@@ -436,7 +436,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should return false when env var is not set', function (done) {
|
||||
// Set up a mock to return a null path string.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
insertEnvironmentVariableIntoAuth(auth, 'GOOGLE_APPLICATION_CREDENTIALS', null);
|
||||
|
||||
// The test ends successfully after 1 step has completed.
|
||||
@@ -453,7 +453,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should return false when env var is empty string', function (done) {
|
||||
// Set up a mock to return an empty path string.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
insertEnvironmentVariableIntoAuth(auth, 'GOOGLE_APPLICATION_CREDENTIALS', '');
|
||||
|
||||
// The test ends successfully after 1 step has completed.
|
||||
@@ -470,7 +470,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should handle invalid environment variable', function (done) {
|
||||
// Set up a mock to return a path to an invalid file.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
insertEnvironmentVariableIntoAuth(auth, 'GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'./nonexistantfile.json');
|
||||
|
||||
@@ -489,7 +489,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should handle valid environment variable', function (done) {
|
||||
// Set up a mock to return path to a valid credentials file.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
insertEnvironmentVariableIntoAuth(auth, 'GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'./test/fixtures/private.json');
|
||||
|
||||
@@ -523,7 +523,7 @@ describe('googleAuth', function() {
|
||||
var correctLocation = false;
|
||||
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -547,7 +547,7 @@ describe('googleAuth', function() {
|
||||
var correctLocation = false;
|
||||
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'HOME', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -570,7 +570,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should fail on Windows when APPDATA is not defined', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', null);
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -592,7 +592,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should fail on non-Windows when HOME is not defined', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'HOME', null);
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -614,7 +614,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should fail on Windows when file does not exist', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -636,7 +636,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should fail on non-Windows when file does not exist', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'HOME', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -659,7 +659,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should succeeds on Windows', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -686,7 +686,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should succeeds on non-Windows', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'HOME', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -713,7 +713,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should pass along a failure on Windows', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -740,7 +740,7 @@ describe('googleAuth', function() {
|
||||
|
||||
it('should pass along a failure on non-Windows', function (done) {
|
||||
// Set up mocks.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'HOME', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -784,7 +784,7 @@ describe('googleAuth', function() {
|
||||
};
|
||||
|
||||
// Set up a new GoogleAuth and prepare it for local environment variable handling.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
setUpAuthForEnvironmentVariable(auth);
|
||||
|
||||
// Ask for credentials, the first time.
|
||||
@@ -818,7 +818,7 @@ describe('googleAuth', function() {
|
||||
|
||||
// Now create a second GoogleAuth instance, and ask for credentials. We should
|
||||
// get a new credentials instance this time.
|
||||
var auth2 = new googleAuth();
|
||||
var auth2 = new GoogleAuth();
|
||||
setUpAuthForEnvironmentVariable(auth2);
|
||||
|
||||
// Step 2 has completed.
|
||||
@@ -848,7 +848,7 @@ describe('googleAuth', function() {
|
||||
// * Environment variable is set up to point to private.json
|
||||
// * Well-known file is set up to point to private2.json
|
||||
// * Running on GCE is set to true.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
insertEnvironmentVariableIntoAuth(auth, 'GOOGLE_APPLICATION_CREDENTIALS',
|
||||
'./test/fixtures/private.json');
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
@@ -880,7 +880,7 @@ describe('googleAuth', function() {
|
||||
// * Environment variable is not set.
|
||||
// * Well-known file is set up to point to private2.json
|
||||
// * Running on GCE is set to true.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -907,7 +907,7 @@ describe('googleAuth', function() {
|
||||
// * Environment variable is not set.
|
||||
// * Well-known file is not set.
|
||||
// * Running on GCE is set to true.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
blockGoogleApplicationCredentialEnvironmentVariable(auth);
|
||||
insertEnvironmentVariableIntoAuth(auth, 'APPDATA', 'foo');
|
||||
auth._pathJoin = pathJoin;
|
||||
@@ -929,7 +929,7 @@ describe('googleAuth', function() {
|
||||
describe('._checkIsGCE', function () {
|
||||
|
||||
it('should set the _isGCE flag when running on GCE', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
|
||||
// Mock the transport layer to return the correct header indicating that
|
||||
// we're running on GCE.
|
||||
@@ -950,7 +950,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('should not set the _isGCE flag when not running on GCE', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
|
||||
// Mock the transport layer to indicate that we're not running on GCE.
|
||||
auth.transporter = new MockTransporter(false);
|
||||
@@ -970,7 +970,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('Does not execute the second time when running on GCE', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
|
||||
// Mock the transport layer to indicate that we're not running on GCE.
|
||||
auth.transporter = new MockTransporter(true);
|
||||
@@ -1001,7 +1001,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('Does not execute the second time when not running on GCE', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
|
||||
// Mock the transport layer to indicate that we're not running on GCE.
|
||||
auth.transporter = new MockTransporter(false);
|
||||
@@ -1031,7 +1031,7 @@ describe('googleAuth', function() {
|
||||
});
|
||||
|
||||
it('Returns false on transport error', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
|
||||
// Mock the transport layer to indicate that we're not running on GCE, but also to
|
||||
// throw an error.
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
|
||||
describe('.getRequestMetadata', function() {
|
||||
var test_selector = 'a-test-selector';
|
||||
var test_token = 'a-test-token';
|
||||
var client;
|
||||
beforeEach(function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
client = new auth.IAMAuth(test_selector, test_token);
|
||||
});
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
var assert = require('assert');
|
||||
var fs = require('fs');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var jws = require('jws');
|
||||
var keypair = require('keypair');
|
||||
var nock = require('nock');
|
||||
@@ -41,7 +41,7 @@ describe('Initial credentials', function() {
|
||||
it('should create a dummy refresh token string', function () {
|
||||
// It is important that the compute client is created with a refresh token value filled
|
||||
// in, or else the rest of the logic will not work.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT();
|
||||
assert.equal('jwt-placeholder', jwt.credentials.refresh_token);
|
||||
});
|
||||
@@ -53,7 +53,7 @@ describe('JWT auth client', function() {
|
||||
describe('.authorize', function() {
|
||||
|
||||
it('should get an initial access token', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -83,7 +83,7 @@ describe('JWT auth client', function() {
|
||||
});
|
||||
|
||||
it('should accept scope as string', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -109,7 +109,7 @@ describe('JWT auth client', function() {
|
||||
describe('when scopes are set', function() {
|
||||
|
||||
it('can get obtain new access token', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -144,7 +144,7 @@ describe('JWT auth client', function() {
|
||||
describe('when scopes are set', function() {
|
||||
|
||||
it('can obtain new access token', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -182,7 +182,7 @@ describe('JWT auth client', function() {
|
||||
it('gets a jwt header access token', function(done) {
|
||||
var keys = keypair(1024 /* bitsize of private key */);
|
||||
var email = 'foo@serviceaccount.com';
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
null,
|
||||
@@ -216,7 +216,7 @@ describe('JWT auth client', function() {
|
||||
describe('.request', function() {
|
||||
|
||||
it('should refresh token if missing access token', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -241,7 +241,7 @@ describe('JWT auth client', function() {
|
||||
});
|
||||
|
||||
it('should refresh token if expired', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -267,13 +267,46 @@ describe('JWT auth client', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('should refresh token if the server returns 403', function(done) {
|
||||
nock('http://example.com')
|
||||
.log(console.log)
|
||||
.get('/access')
|
||||
.reply(403);
|
||||
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
null,
|
||||
['http://example.com'],
|
||||
'bar@subjectaccount.com');
|
||||
|
||||
jwt.credentials = {
|
||||
access_token: 'woot',
|
||||
refresh_token: 'jwt-placeholder',
|
||||
expiry_date: (new Date()).getTime() + 5000
|
||||
};
|
||||
|
||||
jwt.gtoken = {
|
||||
getToken: function(callback) {
|
||||
return callback(null, 'abc123');
|
||||
}
|
||||
};
|
||||
|
||||
jwt.request({ uri : 'http://example.com/access' }, function() {
|
||||
assert.equal('abc123', jwt.credentials.access_token);
|
||||
nock.cleanAll();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not refresh if not expired', function(done) {
|
||||
var scope = nock('https://accounts.google.com')
|
||||
.log(console.log)
|
||||
.post('/o/oauth2/token', '*')
|
||||
.reply(200, { access_token: 'abc123', expires_in: 10000 });
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -301,7 +334,7 @@ describe('JWT auth client', function() {
|
||||
.post('/o/oauth2/token', '*')
|
||||
.reply(200, { access_token: 'abc123', expires_in: 10000 });
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -325,7 +358,7 @@ describe('JWT auth client', function() {
|
||||
});
|
||||
|
||||
it('should return expiry_date in milliseconds', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -358,7 +391,7 @@ describe('.createScoped', function() {
|
||||
// set up the auth module.
|
||||
var auth;
|
||||
beforeEach(function() {
|
||||
auth = new googleAuth();
|
||||
auth = new GoogleAuth();
|
||||
});
|
||||
|
||||
it('should clone stuff', function() {
|
||||
@@ -457,7 +490,7 @@ describe('.createScopedRequired', function() {
|
||||
// set up the auth module.
|
||||
var auth;
|
||||
beforeEach(function() {
|
||||
auth = new googleAuth();
|
||||
auth = new GoogleAuth();
|
||||
});
|
||||
|
||||
it('should return true when scopes is null', function () {
|
||||
@@ -505,7 +538,7 @@ describe('.createScopedRequired', function() {
|
||||
});
|
||||
|
||||
it('should return false when scopes is a filled-in array', function () {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -519,7 +552,7 @@ describe('.createScopedRequired', function() {
|
||||
it('should return false when scopes is not an array or a string, but can be used as a string',
|
||||
function () {
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var jwt = new auth.JWT(
|
||||
'foo@serviceaccount.com',
|
||||
'/path/to/key.pem',
|
||||
@@ -536,7 +569,7 @@ describe('.fromJson', function () {
|
||||
var jwt, json;
|
||||
beforeEach(function() {
|
||||
json = createJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
jwt = new auth.JWT();
|
||||
});
|
||||
|
||||
@@ -618,7 +651,7 @@ describe('.fromStream', function () {
|
||||
// set up the jwt instance being tested.
|
||||
var jwt;
|
||||
beforeEach(function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
jwt = new auth.JWT();
|
||||
});
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
var assert = require('assert');
|
||||
var fs = require('fs');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var keypair = require('keypair');
|
||||
var jws = require('jws');
|
||||
|
||||
@@ -40,7 +40,7 @@ describe('.getRequestMetadata', function() {
|
||||
var keys = keypair(1024 /* bitsize of private key */);
|
||||
var testUri = 'http:/example.com/my_test_service';
|
||||
var email = 'foo@serviceaccount.com';
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var client = new auth.JWTAccess(email, keys['private']);
|
||||
|
||||
var retValue = 'dummy';
|
||||
@@ -63,7 +63,7 @@ describe('.getRequestMetadata', function() {
|
||||
describe('.createScopedRequired', function() {
|
||||
|
||||
it('should return false', function () {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var client = new auth.JWTAccess(
|
||||
'foo@serviceaccount.com',
|
||||
null);
|
||||
@@ -78,7 +78,7 @@ describe('.fromJson', function () {
|
||||
var json, client;
|
||||
beforeEach(function() {
|
||||
json = createJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
client = new auth.JWTAccess();
|
||||
});
|
||||
|
||||
@@ -136,7 +136,7 @@ describe('.fromStream', function () {
|
||||
// set up the client instance being tested.
|
||||
var client;
|
||||
beforeEach(function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
client = new auth.JWTAccess();
|
||||
});
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ var url = require('url');
|
||||
var assert = require('assert');
|
||||
var qs = require('querystring');
|
||||
var fs = require('fs');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var crypto = require('crypto');
|
||||
var nock = require('nock');
|
||||
var AuthClient = require('../lib/auth/authclient.js');
|
||||
@@ -43,7 +43,7 @@ describe('OAuth2 client', function() {
|
||||
response_type: 'code token'
|
||||
};
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl(opts);
|
||||
var parsed = url.parse(generated);
|
||||
@@ -71,7 +71,7 @@ describe('OAuth2 client', function() {
|
||||
response_type: 'code token'
|
||||
};
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl(opts);
|
||||
var parsed = url.parse(generated);
|
||||
@@ -83,7 +83,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
it('should set response_type param to code if none is given while' +
|
||||
'generating the consent page url', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl();
|
||||
var parsed = url.parse(generated);
|
||||
@@ -96,7 +96,7 @@ describe('OAuth2 client', function() {
|
||||
// jason: keep
|
||||
/*
|
||||
it('should return err no access or refresh token is set before making a request', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new googleapis.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
new googleapis.GoogleApis()
|
||||
.urlshortener('v1').url.get({ shortUrl: '123', auth: oauth2client }, function(err, result) {
|
||||
@@ -166,7 +166,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var login = oauth2client.verifySignedJwtWithCerts(data,
|
||||
{keyid: publicKey}, 'testaudience');
|
||||
@@ -210,7 +210,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -258,7 +258,7 @@ describe('OAuth2 client', function() {
|
||||
//Originally: data += '.'+signature;
|
||||
data += signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -309,7 +309,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -360,7 +360,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -404,7 +404,7 @@ describe('OAuth2 client', function() {
|
||||
'.' + new Buffer(idToken).toString('base64') +
|
||||
'.' + 'broken-signature';
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -452,7 +452,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -502,7 +502,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -552,7 +552,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -603,7 +603,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.verifySignedJwtWithCerts(
|
||||
data,
|
||||
@@ -652,7 +652,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -704,7 +704,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -754,7 +754,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
assert.throws(
|
||||
function() {
|
||||
@@ -805,7 +805,7 @@ describe('OAuth2 client', function() {
|
||||
|
||||
data += '.' + signature;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.verifySignedJwtWithCerts(
|
||||
data,
|
||||
@@ -821,7 +821,7 @@ describe('OAuth2 client', function() {
|
||||
var scope = nock('https://www.googleapis.com')
|
||||
.get('/oauth2/v1/certs')
|
||||
.replyWithFile(200, __dirname + '/fixtures/oauthcerts.json');
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.getFederatedSignonCerts(function(err, certs) {
|
||||
assert.equal(err, null);
|
||||
@@ -842,7 +842,7 @@ describe('OAuth2 client', function() {
|
||||
.get('/oauth2/v1/certs')
|
||||
.once()
|
||||
.replyWithFile(200, __dirname + '/fixtures/oauthcerts.json');
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.getFederatedSignonCerts(function(err, certs) {
|
||||
assert.equal(err, null);
|
||||
@@ -859,7 +859,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should set redirect_uri if not provided in options', function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl({});
|
||||
var parsed = url.parse(generated);
|
||||
@@ -868,7 +868,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should set client_id if not provided in options', function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl({});
|
||||
var parsed = url.parse(generated);
|
||||
@@ -877,7 +877,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should override redirect_uri if provided in options', function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl({ redirect_uri: 'overridden' });
|
||||
var parsed = url.parse(generated);
|
||||
@@ -886,7 +886,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should override client_id if provided in options', function() {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
var generated = oauth2client.generateAuthUrl({ client_id: 'client_override' });
|
||||
var parsed = url.parse(generated);
|
||||
@@ -895,7 +895,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should return error in callback on request', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.request({}, function(err, result) {
|
||||
assert.equal(err.message, 'No access or refresh token is set.');
|
||||
@@ -905,7 +905,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should return error in callback on refreshAccessToken', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.refreshAccessToken(function(err, result) {
|
||||
assert.equal(err.message, 'No refresh token is set.');
|
||||
@@ -996,7 +996,7 @@ describe('OAuth2 client', function() {
|
||||
var scope = nock('https://accounts.google.com')
|
||||
.get('/o/oauth2/revoke?token=abc')
|
||||
.reply(200, { success: true });
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.credentials = { access_token: 'abc', refresh_token: 'abc' };
|
||||
oauth2client.revokeCredentials(function(err, result) {
|
||||
@@ -1009,7 +1009,7 @@ describe('OAuth2 client', function() {
|
||||
});
|
||||
|
||||
it('should clear credentials and return error if no access token to revoke', function(done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.credentials = { refresh_token: 'abc' };
|
||||
oauth2client.revokeCredentials(function(err, result) {
|
||||
@@ -1027,7 +1027,7 @@ describe('OAuth2 client', function() {
|
||||
var scope = nock('https://accounts.google.com')
|
||||
.post('/o/oauth2/token')
|
||||
.reply(200, { access_token: 'abc', refresh_token: '123', expires_in: 10 });
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var oauth2client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
|
||||
oauth2client.getToken('code here', function(err, tokens) {
|
||||
assert(tokens.expiry_date >= now + (10 * 1000));
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var googleAuth = require('../lib/auth/googleauth.js');
|
||||
var GoogleAuth = require('../lib/auth/googleauth.js');
|
||||
var nock = require('nock');
|
||||
var fs = require('fs');
|
||||
|
||||
@@ -40,7 +40,7 @@ describe('Refresh Token auth client', function() {
|
||||
describe('.fromJson', function () {
|
||||
|
||||
it('should error on null json', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(null, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -49,7 +49,7 @@ describe('.fromJson', function () {
|
||||
});
|
||||
|
||||
it('should error on empty json', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON({}, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -61,7 +61,7 @@ describe('.fromJson', function () {
|
||||
var json = createJSON();
|
||||
delete json.client_id;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -73,7 +73,7 @@ describe('.fromJson', function () {
|
||||
var json = createJSON();
|
||||
delete json.client_secret;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -85,7 +85,7 @@ describe('.fromJson', function () {
|
||||
var json = createJSON();
|
||||
delete json.refresh_token;
|
||||
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -95,7 +95,7 @@ describe('.fromJson', function () {
|
||||
|
||||
it('should create UserRefreshClient with clientId_', function(done) {
|
||||
var json = createJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.ifError(err);
|
||||
@@ -106,7 +106,7 @@ describe('.fromJson', function () {
|
||||
|
||||
it('should create UserRefreshClient with clientSecret_', function(done) {
|
||||
var json = createJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.ifError(err);
|
||||
@@ -117,7 +117,7 @@ describe('.fromJson', function () {
|
||||
|
||||
it('should create UserRefreshClient with _refreshToken', function(done) {
|
||||
var json = createJSON();
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromJSON(json, function (err) {
|
||||
assert.ifError(err);
|
||||
@@ -130,7 +130,7 @@ describe('.fromJson', function () {
|
||||
describe('.fromStream', function () {
|
||||
|
||||
it('should error on null stream', function (done) {
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromStream(null, function (err) {
|
||||
assert.equal(true, err instanceof Error);
|
||||
@@ -147,7 +147,7 @@ describe('.fromStream', function () {
|
||||
var stream = fs.createReadStream('./test/fixtures/refresh.json');
|
||||
|
||||
// And pass it into the fromStream method.
|
||||
var auth = new googleAuth();
|
||||
var auth = new GoogleAuth();
|
||||
var refresh = new auth.UserRefreshClient();
|
||||
refresh.fromStream(stream, function (err) {
|
||||
assert.ifError(err);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
var assert = require('assert');
|
||||
var DefaultTransporter = require('../lib/transporters');
|
||||
var nock = require('nock');
|
||||
var version = require('../package.json').version;
|
||||
|
||||
nock.disableNetConnect();
|
||||
|
||||
@@ -42,6 +43,15 @@ describe('Transporters', function() {
|
||||
assert(re.test(opts.headers['User-Agent']));
|
||||
});
|
||||
|
||||
it('should not append default client user agent to the existing user ' +
|
||||
'agent more than once', function() {
|
||||
var applicationName = 'MyTestApplication-1.0 google-api-nodejs-client/' + version;
|
||||
var opts = transporter.configure({
|
||||
headers: { 'User-Agent': applicationName }
|
||||
});
|
||||
assert.equal(opts.headers['User-Agent'], applicationName);
|
||||
});
|
||||
|
||||
it('should create a single error from multiple response errors', function(done) {
|
||||
var firstError = {
|
||||
message: 'Error 1'
|
||||
|
||||
Reference in New Issue
Block a user