diff --git a/oauth3.core.js b/oauth3.core.js index 3660ed9..0c71dc8 100644 --- a/oauth3.core.js +++ b/oauth3.core.js @@ -1086,7 +1086,11 @@ var result = { _clientUri: OAUTH3.clientUri(location) - , _providerUri: null + , _identityProviderUri: null + , _resourceProviderUri: null + , _identityProviderDirectives: null + , _resourceProviderDirectives: null + //, _resourceProviderMap: null // map between xyz.com and org.oauth3.domains , _init: function (location, opts) { var me = this; if (location) { @@ -1094,13 +1098,20 @@ } if (opts) { if (opts.providerUri) { - me._providerUri = opts.providerUri; + me._identityProviderUri = opts.providerUri; + me._resourceProviderUri = opts.providerUri; + } + if (opts.identityProviderUri) { + me._identityProviderUri = opts.providerUri; + } + if (opts.resourceProviderUri) { + me._resourceProviderUri = opts.providerUri; } if (opts.session) { - if (!me._providerUri) { + if (!me._identityProviderUri) { throw new Error("'providerUri' was not supplied"); } - opts.session.provider_uri = me._providerUri; + opts.session.provider_uri = me._identityProviderUri; opts.session.client_uri = me._clientUri; me.session(opts.session, opts.sessionId); } @@ -1108,35 +1119,62 @@ } , init: function (location/*, opts*/) { var me = this; - var p = OAUTH3.PromiseA.resolve(); + var p1 = OAUTH3.PromiseA.resolve(); + var p2 = OAUTH3.PromiseA.resolve(); me._init(location, opts); - if (me._providerUri) { + if (me._identityProviderUri) { // returns directives - p = OAUTH3.discover(me._providerUri, { client_id: this._clientUri }); + p1 = OAUTH3.discover(me._identityProviderUri, { client_id: this._clientUri }); + } + if (me._resourceProviderUri) { + // returns directives + p2 = OAUTH3.discover(me._resourceProviderUri, { client_id: this._clientUri }); } - return p.then(function () { - return OAUTH3.discover(me._clientUri, { client_id: me._clientUri }).then(function (clientDirectives) { - me._clientDirectives = clientDirectives; - return clientDirectives; + return p1.then(function () { + return p2.then(function () { + return OAUTH3.discover(me._clientUri, { client_id: me._clientUri }).then(function (clientDirectives) { + me._clientDirectives = clientDirectives; + return clientDirectives; + }); }); }); } , setProvider: function (providerUri) { var me = this; - me._providerUri = providerUri; + return me.init().then(function () { + return me.setIdentityProvider(providerUri).then(function () { + // TODO how to say "Use xyz.com for org.oauth3.domains, but abc.com for org.oauth3.dns"? + return me.setResourceProvider(providerUri); + }); + }); + } + , setIdentityProvider: function (providerUri) { + var me = this; + me._identityProviderUri = providerUri; return me.init().then(function () { // this should be synchronous the second time around - return OAUTH3.discover(me._providerUri, { client_id: me._clientUri }).then(function (directives) { - me._providerDirectives = directives; + return OAUTH3.discover(me._identityProviderUri, { client_id: me._clientUri }).then(function (directives) { + me._identityProviderDirectives = directives; + return directives; + }); + }); + } + , setResourceProvider: function (providerUri) { + var me = this; + me._resourceProviderUri = providerUri; + return me.init().then(function () { + // this should be synchronous the second time around + return OAUTH3.discover(me._resourceProviderUri, { client_id: me._clientUri }).then(function (directives) { + me._resourceProviderDirectives = directives; return directives; }); }); } , checkSession: function () { - return OAUTH3.hooks.session.get(this._providerUri); + return OAUTH3.hooks.session.get(this._identityProviderUri); } , login: function (opts) { var me = this; @@ -1148,16 +1186,16 @@ opts = opts || {}; opts.client_uri = me._clientUri; - return OAUTH3.implicitGrant(me._providerDirectives, opts).then(function (session) { + return OAUTH3.implicitGrant(me._identityProviderDirectives, opts).then(function (session) { me._session = true; return session; }); } , session: function (session, id) { if (!session) { - return JSON.parse(JSON.stringify(OAUTH3.hooks.session._getCached(this._providerUri) || null)); + return JSON.parse(JSON.stringify(OAUTH3.hooks.session._getCached(this._identityProviderUri) || null)); } - return OAUTH3.hooks.session.set(this._providerUri, session, id); + return OAUTH3.hooks.session.set(this._identityProviderUri, session, id); } , request: function (preq, opts) { opts = opts || {}; @@ -1165,10 +1203,10 @@ preq.client_id = this._clientUri; preq.method = preq.method || 'GET'; if (this._session) { - preq.session = preq.session || this.session(); // OAUTH3.hooks.session._getCached(this._providerUri); + preq.session = preq.session || this.session(); // OAUTH3.hooks.session._getCached(this._identityProviderUri); } // TODO maybe use a baseUrl from the directives file? - preq.url = OAUTH3.url.resolve(this._providerUri, preq.url); + preq.url = OAUTH3.url.resolve(this._resourceProviderUri, preq.url); return OAUTH3.request(preq, opts); } @@ -1177,16 +1215,16 @@ opts = opts || {}; opts.client_uri = this._clientUri; opts.client_id = this._clientUri; - opts.session = OAUTH3.hooks.session._getCached(this._providerUri); + opts.session = OAUTH3.hooks.session._getCached(this._identityProviderUri); - return OAUTH3.logout(this._providerUri, opts); + return OAUTH3.logout(this._identityProviderUri, opts); } , api: function (api, opts) { opts = opts || {}; opts.api = api; - opts.session = OAUTH3.hooks.session._getCached(this._providerUri); + opts.session = OAUTH3.hooks.session._getCached(this._identityProviderUri); - return OAUTH3.api(this._providerDirectives.api, opts); + return OAUTH3.api(this._resourceProviderDirectives.api, opts); } }; result.authenticate = result.login;