WIP request rpc
This commit is contained in:
		
							parent
							
								
									bc82bb6f1b
								
							
						
					
					
						commit
						d015e66f17
					
				| @ -294,25 +294,23 @@ | ||||
|       } | ||||
|     } | ||||
|   , urls: { | ||||
|     , discover: function (providerUri, opts) { | ||||
|     , rpc: function (providerUri, opts) { | ||||
|         if (!providerUri) { | ||||
|           throw new Error("cannot discover without providerUri"); | ||||
|           throw new Error("cannot run rpc without providerUri"); | ||||
|         } | ||||
|         if (!opts.client_id) { | ||||
|           throw new Error("cannot discover without options.client_id"); | ||||
|           throw new Error("cannot run rpc without options.client_id"); | ||||
|         } | ||||
|         var clientId = OAUTH3.url.normalize(opts.client_id || opts.client_uri); | ||||
|         providerUri = OAUTH3.url.normalize(providerUri); | ||||
|         var discoverFile = opts.discoverFile || "directives.json"; | ||||
| 
 | ||||
|         var params = { | ||||
|           action: 'directives' //TODO:  change this to not be directive specific. Is it even used?
 | ||||
|         , state: opts.state || OAUTH3.utils.randomState() | ||||
|           state: opts.state || OAUTH3.utils.randomState() | ||||
|         , redirect_uri: clientId + (opts.client_callback_path || '/.well-known/oauth3/callback.html#/') | ||||
|         , response_type: 'rpc' | ||||
|         , discoverFile: opts.discoveFile || "directives.json" | ||||
|         , _method: 'GET' | ||||
|         , _pathname: '.well-known/oauth3/directives.json' | ||||
|         , _scheme: opts._scheme | ||||
|         , _pathname: opts._pathname | ||||
|         , debug: opts.debug || undefined | ||||
|         }; | ||||
| 
 | ||||
| @ -325,6 +323,13 @@ | ||||
| 
 | ||||
|         return toRequest; | ||||
|       } | ||||
|     , discover: function (providerUri, opts) { | ||||
|         return OAUTH3.urls.directives(providerUri, opts); | ||||
|       } | ||||
|     , directives: function (providerUri, opts) { | ||||
|         opts._pathname = ".well-known/oauth3/scopes.json"; | ||||
|         return OAUTH3.urls.rpc(providerUri, opts); | ||||
|       } | ||||
|     , implicitGrant: function (directive, opts) { | ||||
|         //
 | ||||
|         // Example Implicit Grant Request
 | ||||
| @ -669,21 +674,26 @@ | ||||
|       } | ||||
|     } | ||||
|   , discoverScopes: function (providerUri, opts) { | ||||
|       return OAUTH.scopes(providerUri, opts); | ||||
|     } | ||||
|   , scopes: function (providerUri, opts) { | ||||
|       if (!providerUri) { | ||||
|         throw new Error('oauth3.discoverScopes(providerUri, opts) received providerUri as :', providerUri); | ||||
|       } | ||||
| 
 | ||||
|       var opts = opts || {}; | ||||
|       opts.discoverFile = "scopes.json"; | ||||
|       opts = opts || {}; | ||||
|       opts._pathname = ".well-known/oauth3/scopes.json"; | ||||
| 
 | ||||
|       //TODO: add caching
 | ||||
| 
 | ||||
|       return OAUTH3._discoverHelper(providerUri, opts).then(function(scopes) { | ||||
|       return OAUTH3._rpcHelper(providerUri, opts).then(function(scopes) { | ||||
|         return scopes; | ||||
|       }); | ||||
|   } | ||||
| 
 | ||||
|     } | ||||
|   , discover: function (providerUri, opts) { | ||||
|       return OAUTH3.directives(providerUri, opts); | ||||
|     } | ||||
|   , directives: function (providerUri, opts) { | ||||
|       if (!providerUri) { | ||||
|         throw new Error('oauth3.discover(providerUri, opts) received providerUri as :', providerUri); | ||||
|       } | ||||
| @ -693,7 +703,8 @@ | ||||
|           return directives; | ||||
|         } | ||||
| 
 | ||||
|         return OAUTH3._discoverHelper(providerUri, opts).then(function (directives) { | ||||
|         opts._pathname = ".well-known/oauth3/directives.json"; | ||||
|         return OAUTH3._rpcHelper(providerUri, opts).then(function (directives) { | ||||
|           directives.azp = directives.azp || OAUTH3.url.normalize(providerUri); | ||||
|           directives.issuer = directives.issuer || OAUTH3.url.normalize(providerUri); | ||||
|           directives.api = OAUTH3.url.normalize((directives.api||':hostname').replace(/:hostname/, OAUTH3.uri.normalize(directives.issuer) || OAUTH3.uri.normalize(providerUri))); | ||||
| @ -702,9 +713,8 @@ | ||||
|         }); | ||||
|       }); | ||||
|     } | ||||
|   , _discoverHelper: function(providerUri, opts) { | ||||
|       opts.discoverFile = "directives.json"; | ||||
|       return OAUTH3._browser.discover(providerUri, opts); | ||||
|   , _rpcHelper: function(providerUri, opts) { | ||||
|       return OAUTH3._browser.rpc(providerUri, opts); | ||||
|     } | ||||
|   , request: function (preq, opts) { | ||||
|       function fetch() { | ||||
| @ -884,28 +894,28 @@ | ||||
|     //
 | ||||
|   , _browser: { | ||||
|       window: 'undefined' !== typeof window ? window : null | ||||
|       // TODO we don't need to include this if we're using jQuery or angular
 | ||||
|     , discover: function(providerUri, opts) { | ||||
|     , rpc: function(providerUri, opts) { | ||||
|         opts = opts || {}; | ||||
|         providerUri = OAUTH3.url.normalize(providerUri); | ||||
| 
 | ||||
|         //  If no discoverFile was specified, who knows what they want, but
 | ||||
|         //  this function used to only support directives.json, so it's worth
 | ||||
|         //  a shot.
 | ||||
|         var discoverFile = opts.discoverFile || "directives.json"; | ||||
| 
 | ||||
|         // TODO SECURITY should we whitelist our own self?
 | ||||
|         if (OAUTH3.uri.normalize(providerUri).replace(/\/.*/, '') === OAUTH3.uri.normalize(OAUTH3._browser.window.location.hostname)) { | ||||
|           console.warn("It looks like you're a provider trying to discover on yourself," | ||||
|           console.warn("It looks like you're a provider trying to run rpc on yourself," | ||||
|             + " so we we're just gonna use" | ||||
|             + " OAUTH3.request({ method: 'GET', url: " | ||||
|             + "'/.well-known/oauth3/" + discoverFile + "' })"); | ||||
|             + "'" + opts._pathname + "' })"); | ||||
| 
 | ||||
|           return OAUTH3.request({ | ||||
|             method: 'GET' | ||||
|           , url: OAUTH3.url.normalize(providerUri) + '/.well-known/oauth3/' + discoverFile | ||||
|           }).then(function (resp) { | ||||
|             return resp.data; | ||||
|           }); | ||||
|           if (/localstorage/i.test(opts._scheme)) { | ||||
|             return OAUTH3.PromiseA.resolve(localStorage.getItem(opts._pathname)); | ||||
|           } | ||||
|           else { | ||||
|             return OAUTH3.request({ | ||||
|               method: 'GET' | ||||
|             , url: OAUTH3.url.normalize(providerUri) + opts._pathname // '/.well-known/oauth3/' + discoverFile
 | ||||
|             }).then(function (resp) { | ||||
|               return resp.data; | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         if (!(opts.client_id || opts.client_uri).match(OAUTH3._browser.window.location.hostname)) { | ||||
| @ -914,18 +924,20 @@ | ||||
|           console.warn(opts.client_id || opts.client_uri, OAUTH3._browser.window.location.hostname); | ||||
|         } | ||||
| 
 | ||||
|         var discReq = OAUTH3.urls.discover( | ||||
|         var discReq = OAUTH3.urls.rpc( | ||||
|           providerUri | ||||
|         , { client_id: (opts.client_id || opts.client_uri || OAUTH3.clientUri(OAUTH3._browser.window.location)) | ||||
|           , windowType: opts.broker && opts.windowType || 'background' | ||||
|           , broker: opts.broker | ||||
|           , state: opts._state || undefined | ||||
|           , debug: opts.debug | ||||
|           , discoverFile: opts.discoverFile | ||||
|           , _scheme: opts._scheme | ||||
|           , _pathname: opts._pathname | ||||
|           , _method: opts._method | ||||
|           } | ||||
|         ); | ||||
|         opts._state = discReq.state; | ||||
|         //var discReq = OAUTH3.urls.discover(providerUri, opts);
 | ||||
|         //var discReq = OAUTH3.urls.rpc(providerUri, opts);
 | ||||
| 
 | ||||
|         // hmm... we're gonna need a broker for this since switching windows is distracting,
 | ||||
|         // popups are obnoxious, iframes are sometimes blocked, and most servers don't implement CORS
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user