working on legacy api:

Teile des Codes aus funktionierendem Projekt kpiert und angepasst, aber noch nicht getestet
This commit is contained in:
2025-07-04 00:26:01 +02:00
parent c96e7d73ba
commit e48ddfdb2c
12 changed files with 239 additions and 35 deletions

View File

@@ -0,0 +1,65 @@
package de.srsoftware.umbrella.core;
import com.sun.net.httpserver.HttpExchange;
import de.srsoftware.tools.Path;
import de.srsoftware.tools.PathHandler;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import static de.srsoftware.tools.MimeType.MIME_JSON;
import static de.srsoftware.tools.Optionals.nullable;
import static java.lang.System.Logger.Level.DEBUG;
import static java.lang.System.Logger.Level.WARNING;
import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
public abstract class BaseHandler extends PathHandler {
private static 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;
}
public record Document(String mime, byte[] bytes){}
public boolean load(Path path, HttpExchange ex) throws IOException {
try {
var doc = load(path.toString());
ex.getResponseHeaders().add(CONTENT_TYPE, doc.mime);
return sendContent(ex,doc.bytes);
} catch (UmbrellaException e) {
throw new RuntimeException(e);
}
}
public Document load(String resourcePath) throws IOException, UmbrellaException {
var url = getClass().getClassLoader().getResource(resourcePath);
if (url == null) throw new UmbrellaException(HTTP_NOT_FOUND,"{0} not found!",resourcePath);
LOG.log(DEBUG,"Trying to load {0}",url);
var bos = new ByteArrayOutputStream();
var conn = url.openConnection();
var mime = conn.getContentType();
try (var stream = conn.getInputStream()){
stream.transferTo(bos);
return new Document(mime,bos.toByteArray());
} catch (Exception e) {
LOG.log(WARNING,"Failed to load {0}",url);
throw new UmbrellaException(HTTP_NOT_FOUND,"Failed to load {0}",url);
}
}
public boolean send(HttpExchange ex, UmbrellaException e) throws IOException {
return sendContent(ex,e.statusCode(),e.getMessage());
}
}

View File

@@ -0,0 +1,59 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
import static de.srsoftware.umbrella.core.Constants.TOKEN;
import de.srsoftware.tools.SessionToken;
import java.util.UUID;
public class Token implements CharSequence{
private final String token;
public Token(){
token = UUID.randomUUID().toString();
}
private Token(String value){
this.token = value;
}
public String asBearer() {
return "Bearer "+token;
}
public AddableMap asMap(){
return new AddableMap().plus(TOKEN,token);
}
@Override
public char charAt(int i) {
return token.charAt(i);
}
public static Token of(String val){
return new Token(val);
}
public static Token of(SessionToken sessionToken) {
return new Token(sessionToken.sessionId());
}
@Override
public int length() {
return token.length();
}
@Override
public CharSequence subSequence(int start, int end) {
return token.subSequence(start,end);
}
@Override
public String toString() {
return token;
}
}