diff --git a/dist/amd/aurelia-authentication.js b/dist/amd/aurelia-authentication.js index ed223ea..08c9af8 100644 --- a/dist/amd/aurelia-authentication.js +++ b/dist/amd/aurelia-authentication.js @@ -252,6 +252,7 @@ define(["exports", "./authFilterValueConverter", "./authenticatedValueConverter" this.autoUpdateToken = true; this.clientId = false; this.refreshTokenProp = 'refresh_token'; + this.refreshTokenSubmitProp = 'refresh_token'; this.refreshTokenName = 'token'; this.refreshTokenRoot = false; this.idTokenProp = 'id_token'; @@ -386,9 +387,7 @@ define(["exports", "./authFilterValueConverter", "./authenticatedValueConverter" clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -530,14 +529,12 @@ define(["exports", "./authFilterValueConverter", "./authenticatedValueConverter" name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -558,26 +555,46 @@ define(["exports", "./authFilterValueConverter", "./authenticatedValueConverter" this.storage.set(stateName, provider.state); } - this.lock = this.lock || new _aureliaPal.PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + var opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (_typeof(provider.popupOptions) === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + var lockOptions = (0, _extend2.default)(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new _aureliaPal.PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); var openPopup = new Promise(function (resolve, reject) { - var opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = _this3.storage.get(provider.name + '_state'); - - _this3.lock.show(provider.lockOptions, function (err, profile, tokenOrCode) { - if (err) { - reject(err); - } else { - resolve({ - access_token: tokenOrCode - }); + _this3.lock.on('authenticated', function (authResponse) { + if (!lockOptions.auth.redirect) { + _this3.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + _this3.lock.on('authorization_error', function (err) { + reject(err); + }); + _this3.lock.show(); }); return openPopup.then(function (lockResponse) { @@ -1207,10 +1224,11 @@ define(["exports", "./authFilterValueConverter", "./authenticatedValueConverter" if (this.authentication.updateTokenCallstack.length === 0) { var content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content).then(function (response) { _this10.setResponseObject(response); _this10.authentication.resolveUpdateTokenCallstack(_this10.isAuthenticated()); diff --git a/dist/aurelia-authentication.d.ts b/dist/aurelia-authentication.d.ts index af130ce..0d9b665 100644 --- a/dist/aurelia-authentication.d.ts +++ b/dist/aurelia-authentication.d.ts @@ -132,6 +132,9 @@ export declare class BaseConfig { // The the property from which to get the refresh token after a successful token refresh. Can also be dotted eg "refreshTokenProp.refreshTokenProp" refreshTokenProp: any; + // The proprety name used to send the existing token when refreshing `{ "refreshTokenSubmitProp": '...' }` + refreshTokenSubmitProp: any; + // If the property defined by `refreshTokenProp` is an object: // ----------------------------------------------------------- // This is the property from which to get the token `{ "refreshTokenProp": { "refreshTokenName" : '...' } }` @@ -541,6 +544,16 @@ export declare class FetchConfig { * @param {{}|Function} config */ export declare function configure(aurelia?: any, config?: any): any; +export declare class AuthFilterValueConverter { + + /** + * route toView predictator on route.config.auth === isAuthenticated + * @param {RouteConfig} routes the routes array to convert + * @param {Boolean} isAuthenticated authentication status + * @return {Boolean} show/hide element + */ + toView(routes?: any, isAuthenticated?: any): any; +} export declare class AuthenticatedFilterValueConverter { constructor(authService?: any); @@ -560,14 +573,4 @@ export declare class AuthenticatedValueConverter { * @return {Boolean} show/hide element */ toView(): any; -} -export declare class AuthFilterValueConverter { - - /** - * route toView predictator on route.config.auth === isAuthenticated - * @param {RouteConfig} routes the routes array to convert - * @param {Boolean} isAuthenticated authentication status - * @return {Boolean} show/hide element - */ - toView(routes?: any, isAuthenticated?: any): any; } \ No newline at end of file diff --git a/dist/aurelia-authentication.js b/dist/aurelia-authentication.js index dc6a374..5baf27b 100644 --- a/dist/aurelia-authentication.js +++ b/dist/aurelia-authentication.js @@ -248,6 +248,8 @@ export class BaseConfig { clientId = false; // The the property from which to get the refresh token after a successful token refresh. Can also be dotted eg "refreshTokenProp.refreshTokenProp" refreshTokenProp = 'refresh_token'; + // The proprety name used to send the existing token when refreshing `{ "refreshTokenSubmitProp": '...' }` + refreshTokenSubmitProp = 'refresh_token'; // If the property defined by `refreshTokenProp` is an object: // ----------------------------------------------------------- @@ -413,9 +415,7 @@ export class BaseConfig { clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -564,14 +564,12 @@ export class AuthLock { name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -591,27 +589,48 @@ export class AuthLock { this.storage.set(stateName, provider.state); } - this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + // transform provider options into auth0-lock options + let opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (typeof provider.popupOptions === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + let lockOptions = extend(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); const openPopup = new Promise((resolve, reject) => { - let opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = this.storage.get(provider.name + '_state'); - - this.lock.show(provider.lockOptions, (err, profile, tokenOrCode) => { - if (err) { - reject(err); - } else { - resolve({ - //NOTE: this is an id token (JWT) and it shouldn't be named access_token - access_token: tokenOrCode - }); + this.lock.on('authenticated', authResponse => { + if (!lockOptions.auth.redirect) { + // hides the lock popup, as it doesn't do so automatically + this.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + this.lock.on('authorization_error', err => { + reject(err); + }); + this.lock.show(); }); return openPopup @@ -1410,12 +1429,13 @@ export class AuthService { } if (this.authentication.updateTokenCallstack.length === 0) { - const content = { + let content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content) diff --git a/dist/commonjs/aurelia-authentication.js b/dist/commonjs/aurelia-authentication.js index 1949a04..e08eed8 100644 --- a/dist/commonjs/aurelia-authentication.js +++ b/dist/commonjs/aurelia-authentication.js @@ -243,6 +243,7 @@ var BaseConfig = exports.BaseConfig = function () { this.autoUpdateToken = true; this.clientId = false; this.refreshTokenProp = 'refresh_token'; + this.refreshTokenSubmitProp = 'refresh_token'; this.refreshTokenName = 'token'; this.refreshTokenRoot = false; this.idTokenProp = 'id_token'; @@ -377,9 +378,7 @@ var BaseConfig = exports.BaseConfig = function () { clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -521,14 +520,12 @@ var AuthLock = exports.AuthLock = (_dec2 = (0, _aureliaDependencyInjection.injec name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -549,26 +546,46 @@ var AuthLock = exports.AuthLock = (_dec2 = (0, _aureliaDependencyInjection.injec this.storage.set(stateName, provider.state); } - this.lock = this.lock || new _aureliaPal.PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + var opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (_typeof(provider.popupOptions) === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + var lockOptions = (0, _extend2.default)(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new _aureliaPal.PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); var openPopup = new Promise(function (resolve, reject) { - var opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = _this3.storage.get(provider.name + '_state'); - - _this3.lock.show(provider.lockOptions, function (err, profile, tokenOrCode) { - if (err) { - reject(err); - } else { - resolve({ - access_token: tokenOrCode - }); + _this3.lock.on('authenticated', function (authResponse) { + if (!lockOptions.auth.redirect) { + _this3.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + _this3.lock.on('authorization_error', function (err) { + reject(err); + }); + _this3.lock.show(); }); return openPopup.then(function (lockResponse) { @@ -1198,10 +1215,11 @@ var AuthService = exports.AuthService = (_dec12 = (0, _aureliaDependencyInjectio if (this.authentication.updateTokenCallstack.length === 0) { var content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content).then(function (response) { _this10.setResponseObject(response); _this10.authentication.resolveUpdateTokenCallstack(_this10.isAuthenticated()); diff --git a/dist/es2015/aurelia-authentication.js b/dist/es2015/aurelia-authentication.js index a8dd29d..14a0774 100644 --- a/dist/es2015/aurelia-authentication.js +++ b/dist/es2015/aurelia-authentication.js @@ -192,6 +192,7 @@ export let BaseConfig = class BaseConfig { this.autoUpdateToken = true; this.clientId = false; this.refreshTokenProp = 'refresh_token'; + this.refreshTokenSubmitProp = 'refresh_token'; this.refreshTokenName = 'token'; this.refreshTokenRoot = false; this.idTokenProp = 'id_token'; @@ -326,9 +327,7 @@ export let BaseConfig = class BaseConfig { clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -454,14 +453,12 @@ export let AuthLock = (_dec2 = inject(Storage, BaseConfig), _dec2(_class3 = clas name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -480,26 +477,46 @@ export let AuthLock = (_dec2 = inject(Storage, BaseConfig), _dec2(_class3 = clas this.storage.set(stateName, provider.state); } - this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + let opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (typeof provider.popupOptions === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + let lockOptions = extend(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); const openPopup = new Promise((resolve, reject) => { - let opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = this.storage.get(provider.name + '_state'); - - this.lock.show(provider.lockOptions, (err, profile, tokenOrCode) => { - if (err) { - reject(err); - } else { - resolve({ - access_token: tokenOrCode - }); + this.lock.on('authenticated', authResponse => { + if (!lockOptions.auth.redirect) { + this.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + this.lock.on('authorization_error', err => { + reject(err); + }); + this.lock.show(); }); return openPopup.then(lockResponse => { @@ -1093,12 +1110,13 @@ export let AuthService = (_dec12 = inject(Authentication, BaseConfig, BindingSig } if (this.authentication.updateTokenCallstack.length === 0) { - const content = { + let content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content).then(response => { this.setResponseObject(response); this.authentication.resolveUpdateTokenCallstack(this.isAuthenticated()); diff --git a/dist/native-modules/aurelia-authentication.js b/dist/native-modules/aurelia-authentication.js index 8b7011a..f8bdbbd 100644 --- a/dist/native-modules/aurelia-authentication.js +++ b/dist/native-modules/aurelia-authentication.js @@ -210,6 +210,7 @@ export var BaseConfig = function () { this.autoUpdateToken = true; this.clientId = false; this.refreshTokenProp = 'refresh_token'; + this.refreshTokenSubmitProp = 'refresh_token'; this.refreshTokenName = 'token'; this.refreshTokenRoot = false; this.idTokenProp = 'id_token'; @@ -344,9 +345,7 @@ export var BaseConfig = function () { clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -489,14 +488,12 @@ export var AuthLock = (_dec2 = inject(Storage, BaseConfig), _dec2(_class3 = func name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -517,26 +514,46 @@ export var AuthLock = (_dec2 = inject(Storage, BaseConfig), _dec2(_class3 = func this.storage.set(stateName, provider.state); } - this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + var opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (_typeof(provider.popupOptions) === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + var lockOptions = extend(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); var openPopup = new Promise(function (resolve, reject) { - var opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = _this3.storage.get(provider.name + '_state'); - - _this3.lock.show(provider.lockOptions, function (err, profile, tokenOrCode) { - if (err) { - reject(err); - } else { - resolve({ - access_token: tokenOrCode - }); + _this3.lock.on('authenticated', function (authResponse) { + if (!lockOptions.auth.redirect) { + _this3.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + _this3.lock.on('authorization_error', function (err) { + reject(err); + }); + _this3.lock.show(); }); return openPopup.then(function (lockResponse) { @@ -1168,10 +1185,11 @@ export var AuthService = (_dec12 = inject(Authentication, BaseConfig, BindingSig if (this.authentication.updateTokenCallstack.length === 0) { var content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content).then(function (response) { _this10.setResponseObject(response); _this10.authentication.resolveUpdateTokenCallstack(_this10.isAuthenticated()); diff --git a/dist/system/aurelia-authentication.js b/dist/system/aurelia-authentication.js index 37aeeba..9199a66 100644 --- a/dist/system/aurelia-authentication.js +++ b/dist/system/aurelia-authentication.js @@ -325,6 +325,7 @@ System.register(["./authFilterValueConverter", "./authenticatedValueConverter", this.autoUpdateToken = true; this.clientId = false; this.refreshTokenProp = 'refresh_token'; + this.refreshTokenSubmitProp = 'refresh_token'; this.refreshTokenName = 'token'; this.refreshTokenRoot = false; this.idTokenProp = 'id_token'; @@ -459,9 +460,7 @@ System.register(["./authFilterValueConverter", "./authenticatedValueConverter", clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState } @@ -603,14 +602,12 @@ System.register(["./authFilterValueConverter", "./authenticatedValueConverter", name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -631,26 +628,46 @@ System.register(["./authFilterValueConverter", "./authenticatedValueConverter", this.storage.set(stateName, provider.state); } - this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); + var opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (_typeof(provider.popupOptions) === 'object') { + opts.popupOptions = provider.popupOptions; + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + var lockOptions = extend(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); var openPopup = new Promise(function (resolve, reject) { - var opts = provider.lockOptions; - opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = _this3.storage.get(provider.name + '_state'); - - _this3.lock.show(provider.lockOptions, function (err, profile, tokenOrCode) { - if (err) { - reject(err); - } else { - resolve({ - access_token: tokenOrCode - }); + _this3.lock.on('authenticated', function (authResponse) { + if (!lockOptions.auth.redirect) { + _this3.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); }); + _this3.lock.on('authorization_error', function (err) { + reject(err); + }); + _this3.lock.show(); }); return openPopup.then(function (lockResponse) { @@ -1290,10 +1307,11 @@ System.register(["./authFilterValueConverter", "./authenticatedValueConverter", if (this.authentication.updateTokenCallstack.length === 0) { var content = { grant_type: 'refresh_token', - refresh_token: this.authentication.getRefreshToken(), client_id: this.config.clientId ? this.config.clientId : undefined }; + content[this.config.refreshTokenSubmitProp] = this.authentication.getRefreshToken(); + this.client.post(this.config.joinBase(this.config.refreshTokenUrl ? this.config.refreshTokenUrl : this.config.loginUrl), content).then(function (response) { _this10.setResponseObject(response); _this10.authentication.resolveUpdateTokenCallstack(_this10.isAuthenticated()); diff --git a/package.json b/package.json index a6327e6..d2e5502 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ }, "jspm": { "registry": "npm", - "jspmPackage": true, "main": "aurelia-authentication", "format": "amd", "directories": { @@ -47,20 +46,6 @@ "extend": "^3.0.0", "jwt-decode": "^2.0.0" }, - "peerDependencies": { - "aurelia-api": "^3.0.0-rc5", - "aurelia-dependency-injection": "^1.0.0-rc.1.0.0", - "aurelia-event-aggregator": "^1.0.0-rc.1.0.0", - "aurelia-fetch-client": "^1.0.0-rc.1.0.0", - "aurelia-logging": "^1.0.0-rc.1.0.0", - "aurelia-metadata": "^1.0.0-rc.1.0.0", - "aurelia-pal": "^1.0.0-rc.1.0.0", - "aurelia-path": "^1.0.0-rc.1.0.0", - "aurelia-router": "^1.0.0-rc.1.0.0", - "aurelia-templating-resources": "^1.0.0-rc.1.0.0", - "extend": "^3.0.0", - "jwt-decode": "^2.0.0" - }, "devDependencies": { "aurelia-binding": "^1.0.0-rc.1.0.0", "aurelia-bootstrapper": "^1.0.0-rc.1.0.0", diff --git a/src/authLock.js b/src/authLock.js index d38a593..c2930ba 100644 --- a/src/authLock.js +++ b/src/authLock.js @@ -13,14 +13,12 @@ export class AuthLock { name: null, state: null, scope: null, - scopeDelimiter: null, + scopeDelimiter: ' ', redirectUri: null, clientId: null, clientDomain: null, display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, popupOptions: null, responseType: 'token' }; @@ -40,27 +38,48 @@ export class AuthLock { this.storage.set(stateName, provider.state); } - this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain); - - const openPopup = new Promise((resolve, reject) => { - let opts = provider.lockOptions; + // transform provider options into auth0-lock options + let opts = { + auth: { + params: {} + } + }; + if (Array.isArray(provider.scope) && provider.scope.length) { + opts.auth.params.scope = provider.scope.join(provider.scopeDelimiter); + } + if (provider.state) { + opts.auth.params.state = this.storage.get(provider.name + '_state'); + } + if (provider.display === 'popup') { + opts.auth.redirect = false; + } else if (typeof provider.redirectUri === 'string') { + opts.auth.redirect = true; + opts.auth.redirectUrl = provider.redirectUri; + } + if (typeof provider.popupOptions === 'object') { opts.popupOptions = provider.popupOptions; - opts.responseType = provider.responseType; - opts.callbackURL = provider.redirectUri; - opts.authParams = opts.authParams || {}; - if (provider.scope) opts.authParams.scope = provider.scope; - if (provider.state) opts.authParams.state = this.storage.get(provider.name + '_state'); + } + if (typeof provider.responseType === 'string') { + opts.auth.responseType = provider.responseType; + } + let lockOptions = extend(true, {}, provider.lockOptions, opts); + + this.lock = this.lock || new PLATFORM.global.Auth0Lock(provider.clientId, provider.clientDomain, lockOptions); - this.lock.show(provider.lockOptions, (err, profile, tokenOrCode) => { - if (err) { - reject(err); - } else { - resolve({ - //NOTE: this is an id token (JWT) and it shouldn't be named access_token - access_token: tokenOrCode - }); + const openPopup = new Promise((resolve, reject) => { + this.lock.on('authenticated', authResponse => { + if (!lockOptions.auth.redirect) { + // hides the lock popup, as it doesn't do so automatically + this.lock.hide(); } + resolve({ + access_token: authResponse.idToken + }); + }); + this.lock.on('authorization_error', err => { + reject(err); }); + this.lock.show(); }); return openPopup diff --git a/src/baseConfig.js b/src/baseConfig.js index 9eb0aa1..f0ab605 100644 --- a/src/baseConfig.js +++ b/src/baseConfig.js @@ -287,9 +287,7 @@ export class BaseConfig { clientId: 'your_client_id', clientDomain: 'your_domain_url', display: 'popup', - lockOptions: { - popup: true - }, + lockOptions: {}, responseType: 'token', state: randomState }