var params = new URLSearchParams(window.location.search)
var json = paramsToObject(params);
var scopes = {};
function showConfirmationDialog(name){
get('name').innerHTML = name;
show('content');
}
function showScope(response,scope){
if (response.ok){
response.text().then(content => {
get('scopes').innerHTML += content
});
} else {
get('scopes').innerHTML += '
'+scope+' (???)';
}
}
function handleResponse(response){
hideAll('error');
if (response.ok){
response.json().then(json => {
if (json.rp) {
setText("rp",json.rp);
setText("rp2",json.rp);
}
get('scopes').innerHTML = '';
if (json.unauthorized_scopes){
scopes = json.unauthorized_scopes;
for (var scope of json.unauthorized_scopes){
fetch(web+"scopes/"+scope+".html",{credentials:'include'}).then(response => showScope(response,scope))
}
show("content");
return;
}
if (json.scope){
var query = Object.keys(json).map(key => `${key}=${encodeURIComponent(json[key])}`).join('&');
var url = params.get('redirect_uri') + '?' + query.toString();
redirect(url);
return;
}
show('missing_scopes');
});
} else {
console.log("handleResponse(…) ← ",response);
if (response.status == 401){ // unauthorized
login();
return;
}
response.json().then(json => {
console.log("handleResponse → error",json);
if (json.error) show(json.error);
if (json.metadata.client_id) setText('client_id',json.metadata.client_id);
if (json.metadata.parameter) setText('parameter',json.metadata.parameter);
if (json.metadata.redirect_uri) setText('redirect_uri',json.metadata.redirect_uri);
if (json.metadata.response_type)setText('response_type',json.metadata.response_type)
});
/*if (json.error != "invalid_request_uri"){
var url = params.get('redirect_uri') + '?' + new URLSearchParams(json).toString();
console.log('redirecting to '+url);
redirect(url);
}*/
}
}
function grantAutorization(days){
json['authorized'] = { days : days, scopes : scopes};
backendAutorization();
}
function denyAutorization(){
redirect(params.get('redirect_uri')+"?error=consent_required");
}
function backendAutorization(){
fetch(client_controller+"/authorize",{
method: 'POST',
body: JSON.stringify(json),
headers: {
'Content-Type': 'application/json'
},
credentials:'include'
}).then(handleResponse);
}
backendAutorization();