working on javascript compatibility for old browsers
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
package de.srsoftware.http;
|
package de.srsoftware.http;
|
||||||
|
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.Headers;
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -14,6 +15,12 @@ public class SessionToken extends Cookie {
|
|||||||
this.sessionId = sessionId;
|
this.sessionId = sessionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends Cookie> T addTo(Headers headers) {
|
||||||
|
headers.add("session", sessionId);
|
||||||
|
return (T)this;//super.addTo(headers);
|
||||||
|
}
|
||||||
|
|
||||||
public static Optional<SessionToken> from(HttpExchange ex) {
|
public static Optional<SessionToken> from(HttpExchange ex) {
|
||||||
return Cookie.of(ex)
|
return Cookie.of(ex)
|
||||||
.stream()
|
.stream()
|
||||||
|
|||||||
@@ -71,8 +71,8 @@ public class Application {
|
|||||||
new Forward(INDEX).bindPath(ROOT).on(server);
|
new Forward(INDEX).bindPath(ROOT).on(server);
|
||||||
new WellKnownController().bindPath(WELL_KNOWN).on(server);
|
new WellKnownController().bindPath(WELL_KNOWN).on(server);
|
||||||
new UserController(fileStore, fileStore, fileStore, staticPages).bindPath(API_USER).on(server);
|
new UserController(fileStore, fileStore, fileStore, staticPages).bindPath(API_USER).on(server);
|
||||||
var tokenControllerconfig = new TokenController.Configuration("https://lightoidc.srsoftware.de", 10); // TODO configure or derive from hostname
|
var tokenControllerConfig = new TokenController.Configuration("https://lightoidc.srsoftware.de", 10); // TODO configure or derive from hostname
|
||||||
new TokenController(fileStore, fileStore, keyManager, fileStore, tokenControllerconfig).bindPath(API_TOKEN).on(server);
|
new TokenController(fileStore, fileStore, keyManager, fileStore, tokenControllerConfig).bindPath(API_TOKEN).on(server);
|
||||||
new ClientController(fileStore, fileStore, fileStore).bindPath(API_CLIENT).on(server);
|
new ClientController(fileStore, fileStore, fileStore).bindPath(API_CLIENT).on(server);
|
||||||
new KeyStoreController(keyStore).bindPath(JWKS).on(server);
|
new KeyStoreController(keyStore).bindPath(JWKS).on(server);
|
||||||
new EmailController(fileStore, fileStore).bindPath(API_EMAIL).on(server);
|
new EmailController(fileStore, fileStore).bindPath(API_EMAIL).on(server);
|
||||||
|
|||||||
@@ -58,4 +58,4 @@ function setValue(id,newVal){
|
|||||||
function show(id){
|
function show(id){
|
||||||
var elem = get(id);
|
var elem = get(id);
|
||||||
if (elem) elem.style.display = '';
|
if (elem) elem.style.display = '';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
function doRedirect(){
|
function doRedirect(){
|
||||||
let params = new URL(document.location.toString()).searchParams;
|
let params = new URL(document.location.toString()).searchParams;
|
||||||
redirect( params.get("return_to") || 'index.html');
|
redirect( params.get("return_to") || 'index.html');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleLogin(response){
|
function handleLogin(response){
|
||||||
if (response.ok){
|
if (response.ok){
|
||||||
var body = await response.json();
|
response.headers.forEach(function(val, key) {
|
||||||
hide('error');
|
// in newer browsers, the cookie is set from fetch response. In older browsers this does not seem to work
|
||||||
setTimeout(doRedirect,100);
|
if (key == 'session') document.cookie = 'sessionToken='+val+"; path=/api"
|
||||||
|
});
|
||||||
|
response.json().then(body => {
|
||||||
|
hide('error');
|
||||||
|
setTimeout(doRedirect,100);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
show('error');
|
show('error');
|
||||||
}
|
}
|
||||||
@@ -48,4 +53,4 @@ function tryLogin(){
|
|||||||
})
|
})
|
||||||
}).then(handleLogin);
|
}).then(handleLogin);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,34 @@
|
|||||||
var user = null;
|
var user = null;
|
||||||
async function handleUser(response){
|
|
||||||
|
function handleUser(response){
|
||||||
if (response.status == UNAUTHORIZED) {
|
if (response.status == UNAUTHORIZED) {
|
||||||
login();
|
login();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (response.ok){
|
if (response.ok){
|
||||||
user = await response.json();
|
response.json().then(u => {
|
||||||
fetch(web+"/navigation.html").then(handleNavigation);
|
user = u;
|
||||||
|
fetch(web+"/navigation.html",{credentials:'include'}).then(handleNavigation);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleNavigation(response){
|
function handleNavigation(response){
|
||||||
if (response.ok){
|
if (response.ok){
|
||||||
var content = await response.text();
|
response.text().then(content => {
|
||||||
var nav = document.getElementsByTagName('nav')[0];
|
var nav = document.getElementsByTagName('nav')[0];
|
||||||
nav.innerHTML = content;
|
nav.innerHTML = content;
|
||||||
var links = nav.getElementsByTagName('a');
|
var links = nav.getElementsByTagName('a');
|
||||||
for (var index = links.length; index > 0; index--){
|
for (var index = links.length; index > 0; index--){
|
||||||
var link = links[index-1];
|
var link = links[index-1];
|
||||||
var clazz = link.hasAttribute('class') ? link.getAttribute("class") : null;
|
var clazz = link.hasAttribute('class') ? link.getAttribute("class") : null;
|
||||||
if (clazz != null && !user.permissions.includes(clazz)) nav.removeChild(link);
|
if (clazz != null && !user.permissions.includes(clazz)) nav.removeChild(link);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(user_controller+"/",{method:'POST'}).then(handleUser);
|
fetch(user_controller+"/",{
|
||||||
|
method:'POST',
|
||||||
|
credentials:'include'
|
||||||
|
}).then(handleUser);
|
||||||
|
|||||||
Reference in New Issue
Block a user