Added stuff

This commit is contained in:
joss 2025-04-06 15:36:52 +02:00
parent 9b8ecc8555
commit cd9a49a19a
10 changed files with 96 additions and 12 deletions

23
src/Group.java Normal file
View file

@ -0,0 +1,23 @@
package hsmw.jotto5.beleg;
import java.util.ArrayList;
/**
* Beschreibt eine Gruppe von Resourcen.
*
* Speichert Referenzen auf die Elemente als UIDs in einem Array.
*/
public class Group extends Resource {
private ArrayList<String> members;
/**
* Fügt eine Ressource in die Gruppe zu.
*
* Prüft nicht, ob die Ressource bereits in der Gruppe enthalten ist.
*/
public void addMember(String uid) {
members.add(uid);
}
}

View file

@ -15,10 +15,11 @@ public class Main {
* @param args Die Programmargumente
*/
public static void main(String[] args) throws Exception {
HttpServer s = HttpServer.create(new InetSocketAddress(8000), 0);
HttpServer s = HttpServer.create(new InetSocketAddress("127.0.0.1", 8000), 0);
// Kontexts werden nach längstem Matching ausgewählt (wieso?)
// Alle unbekannten Anfragen die mit / starten werden also an die RootView gegeben
// Statische Dateien werden auch von der RootView verarbeitet
// TODO: Error Handling!!!
s.createContext("/", new RootView());
s.createContext("/main", new StartView());

View file

@ -9,11 +9,14 @@ import java.util.ArrayList;
* Zugriff auf Daten ist Thread-sicher. Um ständiges Zusammenbauen von Objekten
* zu vermeiden und um besser vom eigentlichen Backend zu abstrahieren sind viele
* einfache Abfragen als Methode umgesetzt.
* <p>
* Denkbar ist zum Beispiel eine Implementation auf LDAP-Basis.
*/
public class Model {
private ArrayList<Student> students;
private ArrayList<Resource> resources;
private ArrayList<Group> groups;
/**
* Initialisiert ein leeres Model.
@ -21,6 +24,7 @@ public class Model {
public Model() {
students = new ArrayList<Student>();
resources = new ArrayList<Resource>();
groups = new ArrayList<Group>();
}
}

View file

@ -29,8 +29,9 @@ public class AuthView implements HttpHandler {
// TODO: Versuchen zu autorisieren
login = true;
} else {
response = "<h1>Beleg - Anmeldung!</h1>";
response = Defaults.HTMLHEADER + "<h1>Beleg - Anmeldung!</h1>";
response += "<form method=\"POST\"><input type=\"text\" name=\"name\"><br><input type=\"password\" name=\"pass\"><br><input type=\"submit\">";
response += Defaults.HTMLFOOTER;
t.sendResponseHeaders(200, response.length());
os.write(response.getBytes());
}

11
src/views/Defaults.java Normal file
View file

@ -0,0 +1,11 @@
package hsmw.jotto5.beleg.views;
/**
* Enthält Parameter und Funktionen welche auf alle Views zutreffen.
*/
public class Defaults {
public static final String HTMLHEADER = "<!DOCTYPE html><html><title>Beleg SoSe 2025</title><link rel=stylesheet href=\"/style.css\"><head></head><body>";
public static final String HTMLFOOTER = "</body></html>";
}

View file

@ -1,8 +1,11 @@
package hsmw.jotto5.beleg.views;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import com.sun.net.httpserver.*;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.File;
/**
* Fängt alle Anfragen an "/" und unbekannte URLs ab.
@ -14,11 +17,48 @@ import com.sun.net.httpserver.*;
*/
public class RootView implements HttpHandler {
private void handleFileOr404(HttpExchange t) throws IOException {
File f;
FileInputStream fis;
OutputStream os;
int len;
byte[] buf = new byte[4096]; // Puffer um die Datei einzulesen
f = new File("static" + t.getRequestURI().getPath());
fis = null;
os = t.getResponseBody();
try {
fis = new FileInputStream(f);
// siehe https://www.baeldung.com/java-inputstream-to-outputstream
t.sendResponseHeaders(200, f.length());
while ((len = fis.read(buf)) != -1)
os.write(buf, 0, len);
} catch (FileNotFoundException e) {
// TODO: proper 404 response
// Datei nicht gefunden, stacktrace also unnötig
t.sendResponseHeaders(404, 0);
} catch (Exception e) {
// TODO: proper 500 response
t.sendResponseHeaders(500, 0);
e.printStackTrace();
} finally {
if (fis != null) fis.close();
os.close();
}
}
public void handle(HttpExchange t) throws IOException {
// wir leiten an /main weiter, dort passiert dann die restliche Magie
t.getResponseHeaders().add("Location", "/main");
t.sendResponseHeaders(308, 0); // 308 => "Permanent Redirect"
t.getResponseBody().close();
// prüfen, ob WIRKLICH der Root-Endpunkt gemeint ist
if (t.getRequestURI().getPath().equals("/")) {
// wir leiten an /main weiter, dort passiert dann die restliche Magie
t.getResponseHeaders().add("Location", "/main");
t.sendResponseHeaders(308, 0); // 308 => "Permanent Redirect"
t.getResponseBody().close();
} else {
// entweder eine statische Datei oder ein ungültiger Pfad
handleFileOr404(t);
}
}
}

View file

@ -10,7 +10,8 @@ public class StartView implements HttpHandler {
String response;
OutputStream os;
response = "<h1>Beleg - Startseite!</h1><p>Bitte waehle aus einer der nachstehenden Optionen.</p>";
response = Defaults.HTMLHEADER + "<h1>Beleg - Startseite!</h1><p>Bitte waehle aus einer der nachstehenden Optionen.</p>";
response += "<p>Ich laufe unter " + System.getProperty("user.dir") + "</p>" + Defaults.HTMLFOOTER;
os = t.getResponseBody();
t.sendResponseHeaders(200, response.length());