implemented dynamic theme loading, working on user edit

This commit is contained in:
2025-07-01 22:24:23 +02:00
parent 691c317a57
commit 684e0b00dd
12 changed files with 178 additions and 61 deletions

View File

@@ -1,5 +1,10 @@
description = "Umbrella : Web"
dependencies{
implementation(project(":core"))
implementation("de.srsoftware:tools.optionals:1.0.0")
}
tasks.processResources {
System.out.println("Copying from dist…")
from("../frontend/dist") {

View File

@@ -1,6 +1,8 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.web;
import static de.srsoftware.tools.Optionals.nullable;
import static de.srsoftware.umbrella.core.ResponseCode.NOT_FOUND;
import static java.lang.System.Logger.Level.DEBUG;
import static java.lang.System.Logger.Level.WARNING;
@@ -9,8 +11,25 @@ import de.srsoftware.tools.Path;
import de.srsoftware.tools.PathHandler;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
public class WebHandler extends PathHandler {
private HttpExchange addCors(HttpExchange ex){
var headers = ex.getRequestHeaders();
var origin = nullable(headers.get("Origin")).orElse(List.of()).stream().filter(url -> url.contains("://localhost")||url.contains("://127.0.0.1")).findAny();
if (origin.isPresent()) {
var url = origin.get();
headers = ex.getResponseHeaders();
headers.add("Allow-Origin", url);
headers.add("Access-Control-Allow-Origin", url);
headers.add("Access-Control-Allow-Headers", "Content-Type");
headers.add("Access-Control-Allow-Credentials", "true");
headers.add("Access-Control-Allow-Methods","GET, POST, PATCH");
}
return ex;
}
@Override
public boolean doGet(Path path, HttpExchange ex) throws IOException {
LOG.log(DEBUG,"doGet({0},ex)",path);
@@ -30,10 +49,10 @@ public class WebHandler extends PathHandler {
try (var stream = conn.getInputStream()){
stream.transferTo(bos);
ex.getResponseHeaders().add(CONTENT_TYPE,mime);
return sendContent(ex,bos.toByteArray());
return sendContent(addCors(ex),bos.toByteArray());
} catch (Exception e) {
LOG.log(WARNING,"Failed to load {0}",url);
return false;
return sendContent(ex,NOT_FOUND,"Failed to load "+url);
}
}
}

View File

@@ -0,0 +1,37 @@
a {
color: red;
}
body {
background: black;
color: red;
}
fieldset {
border: 1px solid red;
border-radius: 4px;
}
input{
background: black;
border: 1px dotted red;
border-radius: 4px;
padding: 3px;
margin: 3px;
color: red;
}
button{
background: red;
border-radius: 5px;
padding: 5px 7px;
border-width: 2px;
border-style: solid;
border-color: yellow red red yellow;
}
footer {
position: absolute;
bottom: 0;
width: 100%;
text-align: center;
margin: 5px;
}