The list of scopes now RFC6749 Sec.3.3 compliant

See http://tools.ietf.org/html/rfc6749#section-3.3 for details.

The callback url is now determined correctly if the swagger index.html file and
therefore the o2c.html is not in root directory of the host.

Also the popup opens more than one authorization-request-tab in firefox
(seems to append the on-click js method instead of replacing it)
This commit is contained in:
Jörg Adler
2014-04-03 12:31:02 +02:00
parent a536583890
commit 52db742a10

View File

@@ -48,65 +48,72 @@ function handleLogin() {
str += '</label></li>'; str += '</label></li>';
popup.append(str); popup.append(str);
} }
}
var $win = $(window), var $win = $(window),
dw = $win.width(), dw = $win.width(),
dh = $win.height(), dh = $win.height(),
st = $win.scrollTop(), st = $win.scrollTop(),
dlgWd = popupDialog.outerWidth(), dlgWd = popupDialog.outerWidth(),
dlgHt = popupDialog.outerHeight(), dlgHt = popupDialog.outerHeight(),
top = (dh -dlgHt)/2 + st, top = (dh -dlgHt)/2 + st,
left = (dw - dlgWd)/2; left = (dw - dlgWd)/2;
popupDialog.css({ popupDialog.css({
top: (top < 0? 0 : top) + 'px', top: (top < 0? 0 : top) + 'px',
left: (left < 0? 0 : left) + 'px' left: (left < 0? 0 : left) + 'px'
}); });
popupDialog.find('button.api-popup-cancel').click(function() { popupDialog.find('button.api-popup-cancel').click(function() {
popupMask.hide(); popupMask.hide();
popupDialog.hide(); popupDialog.hide();
}); });
popupDialog.find('button.api-popup-authbtn').click(function() { popupDialog.find('button.api-popup-authbtn').click(function() {
popupMask.hide(); popupMask.hide();
popupDialog.hide(); popupDialog.hide();
var authSchemes = window.swaggerUi.api.authSchemes; var authSchemes = window.swaggerUi.api.authSchemes;
var host = window.location; var location = window.location;
var redirectUrl = host.protocol + '//' + host.host + "/o2c.html"; var locationUrl = location.protocol + '//' + location.host + location.pathname;
var url = null; var redirectUrl = locationUrl.replace("index.html","").concat("/o2c.html").replace("//o2c.html","/o2c.html");
var url = null;
var p = window.swaggerUi.api.authSchemes; var p = window.swaggerUi.api.authSchemes;
for (var key in p) { for (var key in p) {
if (p.hasOwnProperty(key)) { if (p.hasOwnProperty(key)) {
var o = p[key].grantTypes; var o = p[key].grantTypes;
for(var t in o) { for(var t in o) {
if(o.hasOwnProperty(t) && t === 'implicit') { if(o.hasOwnProperty(t) && t === 'implicit') {
var dets = o[t]; var dets = o[t];
url = dets.loginEndpoint.url + "?response_type=token"; url = dets.loginEndpoint.url + "?response_type=token";
window.swaggerUi.tokenName = dets.tokenName; window.swaggerUi.tokenName = dets.tokenName;
}
} }
} }
} }
} var scopes = [];
var scopes = [] var scopeForUrl='';
var o = $('.api-popup-scopes').find('input:checked'); var o = $('.api-popup-scopes').find('input:checked');
for(k =0; k < o.length; k++) { for(var k =0; k < o.length; k++) {
scopes.push($(o[k]).attr("scope")); scopes.push($(o[k]).attr("scope"));
} if(k > 0){
scopeForUrl+=' ';
}
scopeForUrl+=$(o[k]).attr("scope");
}
window.enabledScopes=scopes; window.enabledScopes=scopes;
url += '&redirect_uri=' + encodeURIComponent(redirectUrl); url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
url += '&realm=' + encodeURIComponent(realm); url += '&realm=' + encodeURIComponent(realm);
url += '&client_id=' + encodeURIComponent(clientId); url += '&client_id=' + encodeURIComponent(clientId);
url += '&scope=' + encodeURIComponent(scopes); url += '&scope=' + encodeURIComponent(scopeForUrl);
window.open(url);
});
window.open(url);
});
}
popupMask.show(); popupMask.show();
popupDialog.show(); popupDialog.show();
return; return;