implemented dynamic theme loading, working on user edit
This commit is contained in:
@@ -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") {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
37
web/src/main/resources/web/css/bloodshed.css
Normal file
37
web/src/main/resources/web/css/bloodshed.css
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user