tools to debug scope
This commit is contained in:
parent
84a8090d49
commit
6eb5ea0f3d
36
index.html
36
index.html
|
@ -166,7 +166,7 @@
|
||||||
<button class="btn btn-link" ng-if="!vm.advanced" ng-click="vm.fn.toggleAdvanced()">open advanced</button>
|
<button class="btn btn-link" ng-if="!vm.advanced" ng-click="vm.fn.toggleAdvanced()">open advanced</button>
|
||||||
<button class="btn btn-link" ng-if="vm.advanced" ng-click="vm.fn.toggleAdvanced()">close advanced</button>
|
<button class="btn btn-link" ng-if="vm.advanced" ng-click="vm.fn.toggleAdvanced()">close advanced</button>
|
||||||
<button class="btn btn-primary" ng-click="vm.api.implicitGrant()" ng-disabled="!vm.validated.provider">Login</button>
|
<button class="btn btn-primary" ng-click="vm.api.implicitGrant()" ng-disabled="!vm.validated.provider">Login</button>
|
||||||
<label><input type="checkbox" ng-model="vm.debug" /> Debug OAuth3 Flow?</label>
|
<label><input type="checkbox" ng-model="vm.conf.debug" ng-change="vm.fn.updateDebug()"/> Debug OAuth3 Flow?</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -244,6 +244,40 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<strong>Scopes</strong>: <span ng-bind="vm.form.scopes"></span>
|
||||||
|
<br>
|
||||||
|
(these are used to lookup the descriptions of grant permissions)
|
||||||
|
</div>
|
||||||
|
<div class="col-md-9">
|
||||||
|
<input class="form-input" type="text" ng-model="vm.form.scopes" placeholder="ex: authn@oauth3.org,photos@example.com,dns@domains.org">
|
||||||
|
<button class="btn btn-default" ng-click="vm.api.discoverScopes()" ng-disabled="!vm.form.scopes">Discover Scopes</button>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li ng-repeat="scope in vm.defaults.scopes">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" ng-model="scope.checked" ng-change="vm.fn.updateScopes()"/>
|
||||||
|
<strong ng-bind="scope.name">name</strong>
|
||||||
|
</label>
|
||||||
|
<span ng-bind="scope.desc">desc</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<pre><code>OAUTH3.urls.scope(directives, opts);</code></pre>
|
||||||
|
<pre ng-if="vm.scopeUrl"><code><span ng-bind="vm.scopeUrl"></span></code></pre>
|
||||||
|
<pre ng-if="vm.discoverScopeUrl"><code><span ng-bind="vm.discoverScopeUrl"></span></code></pre>
|
||||||
|
|
||||||
|
<pre><code>OAUTH3.discoverScopes(directives, opts);</code></pre>
|
||||||
|
|
||||||
|
<button ng-if="vm.scopesObj" class="btn btn-default" ng-click="vm.fn.clearScopes()">[X]</button>
|
||||||
|
<pre ng-if="vm.scopesObj"><code><span ng-bind="vm.scopesObj | json"></span></code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="row" ng-if="vm.validated.provider">
|
<div class="row" ng-if="vm.validated.provider">
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|
116
js/playground.js
116
js/playground.js
|
@ -27,17 +27,25 @@
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
|
||||||
vm.clientUri = OAUTH3.clientUri(window.location);
|
vm.clientUri = OAUTH3.clientUri(window.location);
|
||||||
vm.conf = { client_id: vm.clientUri, client_uri: vm.clientUri, provider_uri: vm.clientUri };
|
vm.conf = { debug: undefined, client_id: vm.clientUri, client_uri: vm.clientUri, provider_uri: vm.clientUri };
|
||||||
vm.providerUri = vm.conf.client_uri;
|
vm.providerUri = vm.conf.client_uri;
|
||||||
// map of things being debounced presently
|
// map of things being debounced presently
|
||||||
vm.debouncing = {};
|
vm.debouncing = {};
|
||||||
vm.defaults = { provider: vm.conf.provider_uri, directives: null };
|
vm.defaults = { provider: vm.conf.provider_uri, directives: null };
|
||||||
|
vm.defaults.scopes = [
|
||||||
|
{ name: 'oauth3_authn', desc: "Basic secure authentication", checked: true }
|
||||||
|
//{ name: 'authn@oauth3.org', desc: "Basic secure authentication" }
|
||||||
|
, { name: 'photos@daplie.com', desc: "Access to photos" }
|
||||||
|
, { name: 'dns', desc: "DNS records (A/AAAA, TXT, SRV, MX, etc)" }
|
||||||
|
, { name: '*', desc: "FULL ACCOUNT ACCESS" }
|
||||||
|
];
|
||||||
|
|
||||||
vm.form = {};
|
vm.form = {};
|
||||||
vm.form.id = '';
|
vm.form.id = '';
|
||||||
vm.form.subject = '';
|
vm.form.subject = '';
|
||||||
vm.form.userProvider = '';
|
vm.form.userProvider = '';
|
||||||
vm.form.provider = '';
|
vm.form.provider = '';
|
||||||
|
vm.form.scopes = '';
|
||||||
|
|
||||||
vm.locks = {};
|
vm.locks = {};
|
||||||
vm.validated = {};
|
vm.validated = {};
|
||||||
|
@ -126,6 +134,34 @@
|
||||||
vm.fn.changeUser();
|
vm.fn.changeUser();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
vm.fn.updateDebug = function () {
|
||||||
|
if (!vm.conf.debug) {
|
||||||
|
vm.conf.debug = undefined;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
vm.fn.updateScopes = function () {
|
||||||
|
var scopes = {};
|
||||||
|
|
||||||
|
(vm.scopes && vm.scopes.split(',') || []).forEach(function (name) {
|
||||||
|
scopes[name] = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
vm.defaults.scopes.forEach(function (scope) {
|
||||||
|
if (scope.checked) {
|
||||||
|
scopes[scope.name] = true;
|
||||||
|
} else {
|
||||||
|
scopes[scope.name] = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
vm.form.scopes = Object.keys(scopes).filter(function (key) {
|
||||||
|
return scopes[key];
|
||||||
|
}).map(function (key) {
|
||||||
|
return key;
|
||||||
|
}).join(',');
|
||||||
|
|
||||||
|
vm.api.urls.implicitGrant();
|
||||||
|
};
|
||||||
|
|
||||||
vm.fn.lock = function () {
|
vm.fn.lock = function () {
|
||||||
vm._working = true;
|
vm._working = true;
|
||||||
|
@ -167,6 +203,21 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
vm.api._discoverCount = 0;
|
vm.api._discoverCount = 0;
|
||||||
|
vm.api.urls = {};
|
||||||
|
vm.api.urls.implicitGrant = function (provider) {
|
||||||
|
if (!vm.directives) {
|
||||||
|
console.log('[DEBUG] skipping implicit grant due to missing directives');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var opts = {
|
||||||
|
client_uri: vm.conf.client_uri
|
||||||
|
, subject: vm.form.subject || undefined
|
||||||
|
, debug: vm.conf.debug || undefined
|
||||||
|
, scope: vm.form.scopes || undefined
|
||||||
|
};
|
||||||
|
var implicitGrantObj = OAUTH3.urls.implicitGrant(vm.directives, opts);
|
||||||
|
vm.implicitGrantUrl = (OAUTH3.url.normalize(provider || vm.form.provider) + '/' + implicitGrantObj.url).replace(implicitGrantObj.state, '{{random}}');
|
||||||
|
}
|
||||||
vm.api.discover = function () {
|
vm.api.discover = function () {
|
||||||
vm.directives = null;
|
vm.directives = null;
|
||||||
vm.validated.provider = '';
|
vm.validated.provider = '';
|
||||||
|
@ -192,13 +243,7 @@
|
||||||
vm.validated.provider = provider;
|
vm.validated.provider = provider;
|
||||||
vm.directives = dir;
|
vm.directives = dir;
|
||||||
|
|
||||||
var opts = {
|
vm.api.urls.implicitGrant(provider);
|
||||||
client_uri: vm.conf.client_uri
|
|
||||||
, subject: vm.form.subject || undefined
|
|
||||||
, debug: vm.debug || undefined
|
|
||||||
};
|
|
||||||
vm.implicitGrantObj = OAUTH3.urls.implicitGrant(vm.directives, opts);
|
|
||||||
vm.implicitGrantUrl = (OAUTH3.url.normalize(provider) + '/' + vm.implicitGrantObj.url).replace(vm.implicitGrantObj.state, '{{random}}');
|
|
||||||
//JSON.stringify(dir, null, 2);
|
//JSON.stringify(dir, null, 2);
|
||||||
}, function (err) {
|
}, function (err) {
|
||||||
vm.form.provider = vm.defaults.provider;
|
vm.form.provider = vm.defaults.provider;
|
||||||
|
@ -215,12 +260,64 @@
|
||||||
vm.fn.unlock();
|
vm.fn.unlock();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
vm.api.discoverScopes = function () {
|
||||||
|
var scopes = vm.form.scopes && vm.form.scopes.split(',') || [];
|
||||||
|
vm.scopesObj = [];
|
||||||
|
|
||||||
|
function nextScope() {
|
||||||
|
var scopename = scopes.shift();
|
||||||
|
if (!scopename) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// something like https://example.com/.well-known/oauth3.org/scopes/:scopename.json
|
||||||
|
var scopeUrlObj = OAUTH3.urls.discoverScope(vm.form.provider, {
|
||||||
|
client_uri: vm.conf.client_uri
|
||||||
|
, scope: scopename
|
||||||
|
, debug: vm.conf.debug || undefined
|
||||||
|
});
|
||||||
|
vm.scopeUrl = OAUTH3.url.normalize(provider) + '/' + scopeUrlObj.query._pathname;
|
||||||
|
|
||||||
|
// something like the discovery url that loads in an iframe
|
||||||
|
var discoverScopeObj = OAUTH3.urls.discoverScope(vm.form.provider, {
|
||||||
|
client_uri: vm.conf.client_uri
|
||||||
|
, scope: scopename
|
||||||
|
, debug: vm.conf.debug || undefined
|
||||||
|
});
|
||||||
|
vm.discoverScopeUrl = OAUTH3.url.normalize(provider) + '/' + discoverScopeObj.url;
|
||||||
|
|
||||||
|
// Go and fetch!
|
||||||
|
return OAUTH3.discoverScopes(vm.form.provider, {
|
||||||
|
client_uri: vm.conf.client_uri
|
||||||
|
, scope: scopename
|
||||||
|
, debug: vm.conf.debug || undefined
|
||||||
|
}).then(function (scope) {
|
||||||
|
var allScopes = {};
|
||||||
|
vm.scopesObj.push(scope);
|
||||||
|
vm.defaults.scopes.push(scope);
|
||||||
|
vm.defaults.scopes = vm.defaults.scopes.filter(function (scope) {
|
||||||
|
if (allScopes[scope.name]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
allScopes[scope.name] = true;
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}, function (err) {
|
||||||
|
console.error("Error in discover scope:");
|
||||||
|
console.error(err);
|
||||||
|
vm.scopesObj.push({ name: scopename, desc: "Error, not found" });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextScope();
|
||||||
|
};
|
||||||
vm.api.implicitGrant = function () {
|
vm.api.implicitGrant = function () {
|
||||||
var provider = vm.validated.provider;
|
var provider = vm.validated.provider;
|
||||||
var opts = {
|
var opts = {
|
||||||
client_uri: vm.conf.client_uri
|
client_uri: vm.conf.client_uri
|
||||||
, subject: vm.form.subject || undefined
|
, subject: vm.form.subject || undefined
|
||||||
, debug: vm.debug || undefined
|
, debug: vm.conf.debug || undefined
|
||||||
|
, scope: vm.form.scopes || undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log('[DEBUG] vm.directives');
|
console.log('[DEBUG] vm.directives');
|
||||||
|
@ -240,5 +337,6 @@
|
||||||
vm.defaults.directives = vm.directives;
|
vm.defaults.directives = vm.directives;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
vm.fn.updateScopes();
|
||||||
} ] );
|
} ] );
|
||||||
}());
|
}());
|
||||||
|
|
Loading…
Reference in New Issue