bugfixes from file renames
This commit is contained in:
		
							parent
							
								
									0b93cdc2fa
								
							
						
					
					
						commit
						6a56024c74
					
				@ -20,6 +20,11 @@
 | 
				
			|||||||
        // http://stackoverflow.com/questions/9677985/uncaught-typeerror-illegal-invocation-in-chrome
 | 
					        // http://stackoverflow.com/questions/9677985/uncaught-typeerror-illegal-invocation-in-chrome
 | 
				
			||||||
        return (exports.atob || require('atob'))(base64);
 | 
					        return (exports.atob || require('atob'))(base64);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    , btoa: function (b64) {
 | 
				
			||||||
 | 
					        // for directive passing in .well-known/oauth3
 | 
				
			||||||
 | 
					        // http://stackoverflow.com/questions/9677985/uncaught-typeerror-illegal-invocation-in-chrome
 | 
				
			||||||
 | 
					        return (exports.btoa || require('btoa'))(b64);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    , decodeUrlSafe: function (b64) {
 | 
					    , decodeUrlSafe: function (b64) {
 | 
				
			||||||
        // URL-safe Base64 to Base64
 | 
					        // URL-safe Base64 to Base64
 | 
				
			||||||
        // https://en.wikipedia.org/wiki/Base64
 | 
					        // https://en.wikipedia.org/wiki/Base64
 | 
				
			||||||
@ -30,6 +35,13 @@
 | 
				
			|||||||
        b64 = b64.replace(/-/g, '+').replace(/_/g, '/');
 | 
					        b64 = b64.replace(/-/g, '+').replace(/_/g, '/');
 | 
				
			||||||
        return OAUTH3._base64.atob(b64);
 | 
					        return OAUTH3._base64.atob(b64);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    , encodeUrlSafe: function (b64) {
 | 
				
			||||||
 | 
					        // for directive passing in .well-known/oauth3
 | 
				
			||||||
 | 
					        // Base64 to URL-safe Base64
 | 
				
			||||||
 | 
					        b64 = b64.replace(/\+/g, '-').replace(/\//g, '_');
 | 
				
			||||||
 | 
					        b64 = b64.replace(/=+/g, '');
 | 
				
			||||||
 | 
					        return OAUTH3._base64.btoa(b64);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  , uri: {
 | 
					  , uri: {
 | 
				
			||||||
      normalize: function (uri) {
 | 
					      normalize: function (uri) {
 | 
				
			||||||
@ -73,7 +85,38 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  , query: {
 | 
					  , query: {
 | 
				
			||||||
      stringify: function (params) {
 | 
					      parse: function (search) {
 | 
				
			||||||
 | 
					        // needed for .well-known/oauth3
 | 
				
			||||||
 | 
					        // parse a query or a hash
 | 
				
			||||||
 | 
					        if (-1 !== ['#', '?'].indexOf(search[0])) {
 | 
				
			||||||
 | 
					          search = search.substring(1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // Solve for case of search within hash
 | 
				
			||||||
 | 
					        // example: #/authorization_dialog/?state=...&redirect_uri=...
 | 
				
			||||||
 | 
					        var queryIndex = search.indexOf('?');
 | 
				
			||||||
 | 
					        if (-1 !== queryIndex) {
 | 
				
			||||||
 | 
					          search = search.substr(queryIndex + 1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var args = search.split('&');
 | 
				
			||||||
 | 
					        var argsParsed = {};
 | 
				
			||||||
 | 
					        var i, arg, kvp, key, value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (i = 0; i < args.length; i += 1) {
 | 
				
			||||||
 | 
					          arg = args[i];
 | 
				
			||||||
 | 
					          if (-1 === arg.indexOf('=')) {
 | 
				
			||||||
 | 
					            argsParsed[decodeURIComponent(arg).trim()] = true;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          else {
 | 
				
			||||||
 | 
					            kvp = arg.split('=');
 | 
				
			||||||
 | 
					            key = decodeURIComponent(kvp[0]).trim();
 | 
				
			||||||
 | 
					            value = decodeURIComponent(kvp[1]).trim();
 | 
				
			||||||
 | 
					            argsParsed[key] = value;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return argsParsed;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    , stringify: function (params) {
 | 
				
			||||||
        var qs = [];
 | 
					        var qs = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Object.keys(params).forEach(function (key) {
 | 
					        Object.keys(params).forEach(function (key) {
 | 
				
			||||||
@ -522,8 +565,6 @@
 | 
				
			|||||||
        return OAUTH3._requestHelper(preq, opts);
 | 
					        return OAUTH3._requestHelper(preq, opts);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      OAUTH3.url.resolve(preq.providerUri || preq.provider_uri || preq.directives && preq.directives.issuer, preq.url);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      if (!preq.session) {
 | 
					      if (!preq.session) {
 | 
				
			||||||
        return fetch();
 | 
					        return fetch();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -757,7 +798,7 @@
 | 
				
			|||||||
            , status: xhr.status
 | 
					            , status: xhr.status
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
          xhr.open(preq.method, preq.url, true);
 | 
					          xhr.open(preq.method || 'GET', preq.url, true);
 | 
				
			||||||
          var headers = preq.headers || {};
 | 
					          var headers = preq.headers || {};
 | 
				
			||||||
          Object.keys(headers).forEach(function (key) {
 | 
					          Object.keys(headers).forEach(function (key) {
 | 
				
			||||||
            xhr.setRequestHeader(key, headers[key]);
 | 
					            xhr.setRequestHeader(key, headers[key]);
 | 
				
			||||||
@ -989,9 +1030,12 @@
 | 
				
			|||||||
    , request: function (preq) {
 | 
					    , request: function (preq) {
 | 
				
			||||||
        preq.client_uri = this._clientUri;
 | 
					        preq.client_uri = this._clientUri;
 | 
				
			||||||
        preq.client_id = this._clientUri;
 | 
					        preq.client_id = this._clientUri;
 | 
				
			||||||
 | 
					        preq.method = preq.method || 'GET';
 | 
				
			||||||
        if (this._session) {
 | 
					        if (this._session) {
 | 
				
			||||||
          preq.session = preq.session || OAUTH3.hooks.session._getCached(this._providerUri);
 | 
					          preq.session = preq.session || OAUTH3.hooks.session._getCached(this._providerUri);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        // TODO maybe use a baseUrl from the directives file?
 | 
				
			||||||
 | 
					        preq.url = OAUTH3.url.resolve(this._providerUri, preq.url);
 | 
				
			||||||
        return OAUTH3.request(preq);
 | 
					        return OAUTH3.request(preq);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    , logout: function (opts) {
 | 
					    , logout: function (opts) {
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,73 @@
 | 
				
			|||||||
        <!-- TODO permanently cache with appcache (or service worker?) -->
 | 
					        <!-- TODO permanently cache with appcache (or service worker?) -->
 | 
				
			||||||
        <!-- TODO slim this all down to a single file -->
 | 
					        <!-- TODO slim this all down to a single file -->
 | 
				
			||||||
        <script src="/assets/org.oauth3/oauth3.core.js"></script>
 | 
					        <script src="/assets/org.oauth3/oauth3.core.js"></script>
 | 
				
			||||||
        <script src="callback.js"></script>
 | 
					        <script>
 | 
				
			||||||
 | 
					          ;(function () {
 | 
				
			||||||
 | 
					            'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var loc = window.location;
 | 
				
			||||||
 | 
					            var loginWinObj = window.OAUTH3.query.parse(loc.hash || loc.search);
 | 
				
			||||||
 | 
					            var prefix = "(" + window.location.hostname + ") [.well-known/oauth3/callback.html]";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (loginWinObj.debug) {
 | 
				
			||||||
 | 
					              console.warn(prefix, "DEBUG MODE ENABLED. Automatic redirects disabled.");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // '--oauth3-callback-' prefix exist for security so that an attacker can't social engineer execution an arbitrary function
 | 
				
			||||||
 | 
					            // TODO finalize name of '--oauth3-callback-', this will be a defacto standard
 | 
				
			||||||
 | 
					            // TODO maybe call it 'self-xss-' or 'hack-my-account-' to discourage people from doing dumb things?
 | 
				
			||||||
 | 
					            var callbackName = '--oauth3-callback-' + loginWinObj.state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            console.log(prefix, loc.href);
 | 
				
			||||||
 | 
					            console.log(prefix, 'Parsed URL Obj:', loginWinObj);
 | 
				
			||||||
 | 
					            console.log(prefix, 'callbackName:', callbackName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            window.oauth3complete = function () {
 | 
				
			||||||
 | 
					              // The hacks that used to be necessary for this on iOS should no longer be necessary in iOS 9+
 | 
				
			||||||
 | 
					              // see https://bugs.chromium.org/p/chromium/issues/detail?id=136610 and https://crbug.com/423444
 | 
				
			||||||
 | 
					              // TODO Should we still create an abstraction for older versions?
 | 
				
			||||||
 | 
					              if (window.parent) {
 | 
				
			||||||
 | 
					                // iframe
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                  window.parent[callbackName](loginWinObj);
 | 
				
			||||||
 | 
					                  return;
 | 
				
			||||||
 | 
					                } catch(e) {
 | 
				
			||||||
 | 
					                  console.warn(e);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              if (window.opener) {
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                  window.opener[callbackName](loginWinObj);
 | 
				
			||||||
 | 
					                  return;
 | 
				
			||||||
 | 
					                } catch(e) {
 | 
				
			||||||
 | 
					                  console.warn(e);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              console.error("neither window.parent nor window.opener existed to complete callback");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              /*
 | 
				
			||||||
 | 
					              // the caller should close (or signal to close) the window
 | 
				
			||||||
 | 
					              try {
 | 
				
			||||||
 | 
					                window.close();
 | 
				
			||||||
 | 
					              } catch (err) {
 | 
				
			||||||
 | 
					                console.log('Error: ', err);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              */
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!loginWinObj.debug) {
 | 
				
			||||||
 | 
					              window.oauth3complete();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					              document.body.innerHTML = window.location.hostname + window.location.pathname
 | 
				
			||||||
 | 
					                    + '<br/><br/>You\'ve passed the \'debug\' parameter so we\'re pausing'
 | 
				
			||||||
 | 
					                    + ' to let you look at logs or whatever it is that you intended to do.'
 | 
				
			||||||
 | 
					                    + '<br/><br/>Continue with callback: <a href="javascript:window.oauth3complete()">javascript:window.oauth3complete()</' + 'a>';
 | 
				
			||||||
 | 
					              return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          }());
 | 
				
			||||||
 | 
					        </script>
 | 
				
			||||||
    </body>
 | 
					    </body>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,66 +0,0 @@
 | 
				
			|||||||
;(function () {
 | 
					 | 
				
			||||||
	'use strict';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var loc = window.location;
 | 
					 | 
				
			||||||
	var loginWinObj = window.OAUTH3.query.parse(loc.hash || loc.search);
 | 
					 | 
				
			||||||
  var prefix = "(" + window.location.hostname + ") [.well-known/oauth3/callback.html]";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (loginWinObj.debug) {
 | 
					 | 
				
			||||||
    console.warn(prefix, "DEBUG MODE ENABLED. Automatic redirects disabled.");
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  // '--oauth3-callback-' prefix exist for security so that an attacker can't social engineer execution an arbitrary function
 | 
					 | 
				
			||||||
  // TODO finalize name of '--oauth3-callback-', this will be a defacto standard
 | 
					 | 
				
			||||||
  // TODO maybe call it 'self-xss-' or 'hack-my-account-' to discourage people from doing dumb things?
 | 
					 | 
				
			||||||
	var callbackName = '--oauth3-callback-' + loginWinObj.state;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	console.log(prefix, loc.href);
 | 
					 | 
				
			||||||
	console.log(prefix, 'Parsed URL Obj:', loginWinObj);
 | 
					 | 
				
			||||||
	console.log(prefix, 'callbackName:', callbackName);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  window.oauth3complete = function () {
 | 
					 | 
				
			||||||
    // The hacks that used to be necessary for this on iOS should no longer be necessary in iOS 9+
 | 
					 | 
				
			||||||
    // see https://bugs.chromium.org/p/chromium/issues/detail?id=136610 and https://crbug.com/423444
 | 
					 | 
				
			||||||
    // TODO Should we still create an abstraction for older versions?
 | 
					 | 
				
			||||||
    if (window.parent) {
 | 
					 | 
				
			||||||
      // iframe
 | 
					 | 
				
			||||||
      try {
 | 
					 | 
				
			||||||
        window.parent[callbackName](loginWinObj);
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
      } catch(e) {
 | 
					 | 
				
			||||||
        console.warn(e);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (window.opener) {
 | 
					 | 
				
			||||||
      try {
 | 
					 | 
				
			||||||
        window.opener[callbackName](loginWinObj);
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
      } catch(e) {
 | 
					 | 
				
			||||||
        console.warn(e);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    console.error("neither window.parent nor window.opener existed to complete callback");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
    // the caller should close (or signal to close) the window
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      window.close();
 | 
					 | 
				
			||||||
    } catch (err) {
 | 
					 | 
				
			||||||
      console.log('Error: ', err);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    */
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!loginWinObj.debug) {
 | 
					 | 
				
			||||||
    window.oauth3complete();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  else {
 | 
					 | 
				
			||||||
    document.body.innerHTML = window.location.hostname + window.location.pathname
 | 
					 | 
				
			||||||
          + '<br/><br/>You\'ve passed the \'debug\' parameter so we\'re pausing'
 | 
					 | 
				
			||||||
          + ' to let you look at logs or whatever it is that you intended to do.'
 | 
					 | 
				
			||||||
          + '<br/><br/>Continue with callback: <a href="javascript:window.oauth3complete()">javascript:window.oauth3complete()</' + 'a>';
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}());
 | 
					 | 
				
			||||||
@ -10,14 +10,16 @@
 | 
				
			|||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
  OAuth3 RPC
 | 
					  OAuth3 RPC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <script src="/assets/com.jquery/jquery-3.1.1.js"></script>
 | 
					 | 
				
			||||||
  <script src="/assets/org.oauth3/oauth3.core.js"></script>
 | 
					  <script src="/assets/org.oauth3/oauth3.core.js"></script>
 | 
				
			||||||
  <script>
 | 
					  <script>
 | 
				
			||||||
 | 
					    ;(function () {
 | 
				
			||||||
    'use strict';
 | 
					    'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Taken from oauth3.core.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO what about search within hash?
 | 
					    // TODO what about search within hash?
 | 
				
			||||||
    var prefix = "(" + window.location.hostname + ") [.well-known/oauth3/]";
 | 
					    var prefix = "(" + window.location.hostname + ") [.well-known/oauth3/]";
 | 
				
			||||||
    var params = OAUTH3_CORE.queryparse(window.location.hash || window.location.search);
 | 
					    var params = OAUTH3.query.parse(window.location.hash || window.location.search);
 | 
				
			||||||
    if (params.debug) {
 | 
					    if (params.debug) {
 | 
				
			||||||
      console.warn(prefix, "DEBUG MODE ENABLED. Automatic redirects disabled.");
 | 
					      console.warn(prefix, "DEBUG MODE ENABLED. Automatic redirects disabled.");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -28,9 +30,8 @@
 | 
				
			|||||||
    console.log(prefix, 'params:');
 | 
					    console.log(prefix, 'params:');
 | 
				
			||||||
    console.log(params);
 | 
					    console.log(params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $.ajax({ url: 'directives.json' }).then(function (resp) {
 | 
					    OAUTH3.request({ url: 'directives.json' }).then(function (resp) {
 | 
				
			||||||
      var b64 = btoa(JSON.stringify(resp, null, 0))
 | 
					      var urlsafe64 = OAUTH3._base64.encodeUrlSafe(JSON.stringify(resp, null, 0));
 | 
				
			||||||
      var urlsafe64 = OAUTH3_CORE.utils.base64ToUrlSafeBase64(b64);
 | 
					 | 
				
			||||||
      var redirect;
 | 
					      var redirect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      console.log(prefix, 'directives');
 | 
					      console.log(prefix, 'directives');
 | 
				
			||||||
@ -45,7 +46,7 @@
 | 
				
			|||||||
      // TODO make sure it's https NOT http
 | 
					      // TODO make sure it's https NOT http
 | 
				
			||||||
      // NOTE: this can be only up to 2,083 characters
 | 
					      // NOTE: this can be only up to 2,083 characters
 | 
				
			||||||
      console.log(prefix, 'params.redirect_uri:', params.redirect_uri);
 | 
					      console.log(prefix, 'params.redirect_uri:', params.redirect_uri);
 | 
				
			||||||
      redirect = params.redirect_uri + '?' + OAUTH3_CORE.querystringify({
 | 
					      redirect = params.redirect_uri + '?' + OAUTH3.query.stringify({
 | 
				
			||||||
        state: params.state
 | 
					        state: params.state
 | 
				
			||||||
      , directives: urlsafe64
 | 
					      , directives: urlsafe64
 | 
				
			||||||
      , debug: params.debug || undefined
 | 
					      , debug: params.debug || undefined
 | 
				
			||||||
@ -63,6 +64,8 @@
 | 
				
			|||||||
          + '<br/><br/>Continue with redirect: <a href="' + redirect + '">' + redirect + '</' + 'a>';
 | 
					          + '<br/><br/>Continue with redirect: <a href="' + redirect + '">' + redirect + '</' + 'a>';
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }());
 | 
				
			||||||
  </script>
 | 
					  </script>
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user