working on legacy api:
Teile des Codes aus funktionierendem Projekt kpiert und angepasst, aber noch nicht getestet
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
59
core/src/main/java/de/srsoftware/umbrella/core/Token.java
Normal file
59
core/src/main/java/de/srsoftware/umbrella/core/Token.java
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user