diff --git a/example/index.html b/example/index.html
index 45048322..01a19295 100644
--- a/example/index.html
+++ b/example/index.html
@@ -62,7 +62,7 @@
if (err) {
return this.dump(err, 'error');
}
- if (data.error) {
+ if (data && data.error) {
return this.dump(data, 'error');
}
if (data) {
@@ -175,13 +175,20 @@
Console:
});
webAuth.parseHash(function(err, data) {
+ console.log(err,data);
if (err) {
return htmlConsole.dumpCallback(err);
}
- htmlConsole.dumpCallback(null, data);
+ if (data) {
+ htmlConsole.dumpCallback(null, data);
+
+ if (data.accessToken) {
+ webAuth.client.userInfo(data.accessToken, htmlConsole.dumpCallback.bind(htmlConsole));
+ }
+ }
+
window.location.hash = '';
- webAuth.client.userInfo(data.accessToken, htmlConsole.dumpCallback.bind(htmlConsole));
});
$('#clear-console').click(function () {
@@ -198,7 +205,7 @@ Console:
$('.login-db').click(function (e) {
e.preventDefault();
- webAuth.redirect.login({
+ webAuth.redirect.loginWithCredentials({
connection: 'tests',
username: $('.login-username').val(),
password: $('.login-password').val(),
@@ -216,7 +223,7 @@ Console:
$('.popup-login-db').click(function (e) {
e.preventDefault();
- webAuth.popup.login({
+ webAuth.popup.loginWithCredentials({
connection: 'tests',
username: $('.popup-login-username').val(),
password: $('.popup-login-password').val(),
@@ -235,28 +242,28 @@ Console:
audience: 'urn:test'
}, function(err, data) {
htmlConsole.dumpCallback.bind(htmlConsole)(err, data);
- this.webAuth.client.userInfo(data.access_token, htmlConsole.dumpCallback.bind(htmlConsole));
+ this.webAuth.client.userInfo(data.accessToken, htmlConsole.dumpCallback.bind(htmlConsole));
});
});
$('.login-facebook').click(function (e) {
e.preventDefault();
- webAuth.login({ connection: 'facebook' });
+ webAuth.authorize({ connection: 'facebook' });
});
$('.login-hosted').click(function (e) {
e.preventDefault();
- webAuth.login({});
+ webAuth.authorize({});
});
$('.login-twitter').click(function (e) {
e.preventDefault();
- webAuth.login({ connection: 'twitter' });
+ webAuth.authorize({ connection: 'twitter' });
});
$('.login-github').click(function (e) {
e.preventDefault();
- webAuth.login({ connection: 'github' });
+ webAuth.authorize({ connection: 'github' });
});
$('.popup-login-facebook').click(function (e) {
diff --git a/package.json b/package.json
index 39293779..31eb88e8 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"license": "MIT",
"dependencies": {
"base64-js": "^1.2.0",
- "idtoken-verifier": "^1.0.0",
+ "idtoken-verifier": "^1.0.1",
"superagent": "^3.3.1",
"url-join": "^1.1.0",
"winchan": "^0.1.4"
diff --git a/src/helper/assert.js b/src/helper/assert.js
index 64dfba73..19185737 100644
--- a/src/helper/assert.js
+++ b/src/helper/assert.js
@@ -23,7 +23,10 @@ function check(o, config, attributes) {
variable(o, config.type, config.message);
}
if (config.type === 'object' && attributes) {
- Object.keys(attributes).forEach(function (a) { // eslint-disable-line
+ var keys = Object.keys(attributes);
+
+ for (var index = 0; index < keys.length; index++ ) {
+ var a = keys[index];
if (!attributes[a].optional || o[a]) {
if (!attributes[a].condition || attributes[a].condition(o)) {
attribute(o, a, attributes[a].type, attributes[a].message);
@@ -32,7 +35,8 @@ function check(o, config, attributes) {
}
}
}
- });
+ }
+
}
}
diff --git a/src/helper/jwt.js b/src/helper/jwt.js
deleted file mode 100644
index 4852d9fe..00000000
--- a/src/helper/jwt.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var base64Url = require('./base64_url');
-
-function getPayload(jwt) {
- var encoded = jwt && jwt.split('.')[1];
- return JSON.parse(base64Url.decode(encoded));
-}
-
-module.exports = {
- getPayload: getPayload
-};
diff --git a/src/helper/object-assign.js b/src/helper/object-assign.js
new file mode 100644
index 00000000..1c14342c
--- /dev/null
+++ b/src/helper/object-assign.js
@@ -0,0 +1,37 @@
+function get() {
+ if (!Object.assign) {
+ return objectAssignPolyfill;
+ }
+
+ return Object.assign;
+}
+
+function objectAssignPolyfill(target) {
+ 'use strict';
+ if (target === undefined || target === null) {
+ throw new TypeError('Cannot convert first argument to object');
+ }
+
+ var to = Object(target);
+ for (var i = 1; i < arguments.length; i++) {
+ var nextSource = arguments[i];
+ if (nextSource === undefined || nextSource === null) {
+ continue;
+ }
+
+ var keysArray = Object.keys(Object(nextSource));
+ for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
+ var nextKey = keysArray[nextIndex];
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+ if (desc !== undefined && desc.enumerable) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ return to;
+}
+
+module.exports = {
+ get: get,
+ objectAssignPolyfill: objectAssignPolyfill
+};
\ No newline at end of file
diff --git a/src/helper/object.js b/src/helper/object.js
index 8b1d857b..2c4d33d6 100644
--- a/src/helper/object.js
+++ b/src/helper/object.js
@@ -1,5 +1,7 @@
/* eslint-disable no-param-reassign */
+var objectAssign = require('./object-assign');
+
function pick(object, keys) {
return keys.reduce(function (prev, key) {
if (object[key]) {
@@ -9,10 +11,18 @@ function pick(object, keys) {
}, {});
}
+function objectValues(obj) {
+ var values = [];
+ for (key in obj) {
+ values.push(obj[key]);
+ }
+ return values;
+}
+
function extend() {
- var params = Array.from(arguments);
+ var params = objectValues(arguments);
params.unshift({});
- return Object.assign.apply(undefined, params);
+ return objectAssign.get().apply(undefined, params);
}
function merge(object, keys) {
diff --git a/src/helper/random.js b/src/helper/random.js
index ab93701a..84cdb6ea 100644
--- a/src/helper/random.js
+++ b/src/helper/random.js
@@ -12,9 +12,9 @@ function randomString(length) {
var random = cryptoObj.getRandomValues(bytes);
- random.forEach(function (c) {
- result.push(charset[c % charset.length]);
- });
+ for (var a = 0; a < random.length; a++) {
+ result.push(charset[random[a] % charset.length]);
+ }
return result.join('');
}
diff --git a/src/helper/request-builder.js b/src/helper/request-builder.js
index c314d333..6aca4555 100644
--- a/src/helper/request-builder.js
+++ b/src/helper/request-builder.js
@@ -76,9 +76,13 @@ RequestBuilder.prototype.setCommonConfiguration = function (ongoingRequest, opti
var headers = this.headers;
ongoingRequest = ongoingRequest.set('Content-Type', 'application/json');
- Object.keys(this.headers).forEach(function (header) {
- ongoingRequest = ongoingRequest.set(header, headers[header]);
- });
+
+ var keys = Object.keys(this.headers);
+
+ for (var a = 0; a < keys.length; a++) {
+ ongoingRequest = ongoingRequest.set(keys[a], headers[keys[a]]);
+ }
+
if (this._sendTelemetry) {
ongoingRequest = ongoingRequest.set('Auth0-Client', this.getTelemetryData());
}
diff --git a/src/web-auth/index.js b/src/web-auth/index.js
index 924055f5..9560b8ce 100644
--- a/src/web-auth/index.js
+++ b/src/web-auth/index.js
@@ -2,7 +2,6 @@ var IdTokenVerifier = require('idtoken-verifier');
var assert = require('../helper/assert');
var error = require('../helper/error');
-var jwt = require('../helper/jwt');
var qs = require('../helper/qs');
var windowHelper = require('../helper/window');
var objectHelper = require('../helper/object');
diff --git a/src/web-auth/redirect.js b/src/web-auth/redirect.js
index a2a12088..cc21a70b 100644
--- a/src/web-auth/redirect.js
+++ b/src/web-auth/redirect.js
@@ -1,5 +1,4 @@
var UsernamePassword = require('./username-password');
-var TransactionManager = require('./transaction-manager');
var objectHelper = require('../helper/object');
var Warn = require('../helper/warn');
var assert = require('../helper/assert');
@@ -8,7 +7,6 @@ function Redirect(client, options) {
this.baseOptions = options;
this.client = client;
- this.transactionManager = new TransactionManager(this.baseOptions.transaction);
this.warn = new Warn({
disableWarnings: !!options._disableDeprecationWarnings
});
@@ -41,8 +39,6 @@ Redirect.prototype.loginWithCredentials = function (options, cb) {
responseType: { type: 'string', message: 'responseType option is required' }
});
- params = this.transactionManager.process(params);
-
usernamePassword = new UsernamePassword(this.baseOptions);
return usernamePassword.login(params, function (err, data) {
if (err) {
diff --git a/src/web-auth/transaction-manager.js b/src/web-auth/transaction-manager.js
index e7cff41b..4ffa7be9 100644
--- a/src/web-auth/transaction-manager.js
+++ b/src/web-auth/transaction-manager.js
@@ -20,7 +20,7 @@ TransactionManager.prototype.process = function (options) {
return options;
}
- transaction = this.generateTransaction(options.appState, options.state);
+ transaction = this.generateTransaction(options.appState, options.state, options.nonce);
options.state = transaction.state;
@@ -31,12 +31,12 @@ TransactionManager.prototype.process = function (options) {
return options;
};
-TransactionManager.prototype.generateTransaction = function (appState, state) {
+TransactionManager.prototype.generateTransaction = function (appState, state, nonce) {
var transaction;
var nonce;
transaction = state || random.randomString(this.keyLength);
- nonce = random.randomString(this.keyLength);
+ nonce = nonce || random.randomString(this.keyLength);
storage.setItem(this.namespace + transaction, {
nonce:nonce,
diff --git a/test/helper/object.test.js b/test/helper/object.test.js
index 4bf176d5..be8aeabb 100644
--- a/test/helper/object.test.js
+++ b/test/helper/object.test.js
@@ -1,5 +1,7 @@
var expect = require('expect.js');
+var stub = require('sinon').stub;
+var objectAssign = require('../../src/helper/object-assign');
var objectHelper = require('../../src/helper/object');
describe('helpers', function () {
@@ -73,6 +75,41 @@ describe('helpers', function () {
});
});
+ it('shold merge objects attributes with polyfill', function () {
+
+ stub(objectAssign, 'get', function() {
+ return objectAssign.objectAssignPolyfill;
+ });
+
+ var object1 = {
+ attr1: 'attribute_1',
+ attr2: 'attribute_2'
+ };
+
+ var object2 = {
+ attr3: 'attribute_3'
+ };
+
+ var newObject = objectHelper.extend(object1, object2);
+
+ expect(newObject).to.eql({
+ attr1: 'attribute_1',
+ attr2: 'attribute_2',
+ attr3: 'attribute_3'
+ });
+
+ expect(object1).to.eql({
+ attr1: 'attribute_1',
+ attr2: 'attribute_2'
+ });
+
+ expect(object2).to.eql({
+ attr3: 'attribute_3'
+ });
+
+ objectAssign.get.restore();
+ });
+
it('shold merge objects attributes and override the first object ones', function () {
var object1 = {
attr1: 'attribute_1',
diff --git a/test/web-auth/redirect.test.js b/test/web-auth/redirect.test.js
index 99c819ec..a8a07fce 100644
--- a/test/web-auth/redirect.test.js
+++ b/test/web-auth/redirect.test.js
@@ -94,9 +94,7 @@ describe('auth0.WebAuth.redirect', function () {
response_type: 'id_token',
scope: 'openid',
tenant: 'me',
- username: 'me@example.com',
- state: 'ABCDEFGHIJ',
- nonce: 'ABCDEFGHIJ'
+ username: 'me@example.com'
},
headers: {
'Content-Type': 'application/json',
@@ -176,7 +174,6 @@ describe('auth0.WebAuth.redirect', function () {
response_type: 'token',
scope: 'openid',
tenant: 'me',
- state: 'ABCDEFGHIJ',
username: 'me@example.com'
},
headers: {
@@ -261,7 +258,6 @@ describe('auth0.WebAuth.redirect', function () {
client_id: '...',
connection: 'the_connection',
password: '123456',
- state: 'ABCDEFGHIJ',
redirect_uri: 'http://page.com/callback',
response_type: 'token',
scope: 'openid',