Zwischenstand

This commit is contained in:
joss 2025-04-01 09:45:24 +02:00
parent 4b78ccbbd9
commit 4b19b5b0f3
4 changed files with 77 additions and 2 deletions

View file

@ -6,7 +6,7 @@ import com.sun.net.httpserver.*;
import java.net.InetSocketAddress;
/**
* Die Main-Klasse mit dem Einstiegspunkt der Anwendung
* Die Main-Klasse mit dem Einstiegspunkt der Anwendung.
*/
public class Main {
@ -17,7 +17,12 @@ public class Main {
public static void main(String[] args) throws Exception {
HttpServer s = HttpServer.create(new InetSocketAddress(8000), 0);
// Kontexts werden nach längstem Matching ausgewählt (wieso?)
// Alle unbekannten Anfragen die mit / starten werden also an die RootView gegeben
// TODO: Error Handling!!!
s.createContext("/", new RootView());
s.createContext("/main", new StartView());
s.createContext("/auth", new AuthView());
s.setExecutor(null);
s.start();

46
src/views/AuthView.java Normal file
View file

@ -0,0 +1,46 @@
package hsmw.jotto5.beleg.views;
import java.io.IOException;
import java.io.OutputStream;
import com.sun.net.httpserver.*;
/**
* Stellt das Login-Formular bereit und verwaltet die Anmeldung.
*
* Bei einer GET-Anfrage ohne gültige Session wird das Login-Formular
* zurückgegeben. Bei einer POST-Anfrage wird versucht, mit den gegebenen
* Anmeldedaten in den name und pass Anfragewerten zu autorisieren.
*
* Bei erfolgter Autorisierung oder bei Aufruf mit gültiger Session wird an den
* main Endpunkt weitergeleitet.
*/
public class AuthView implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
String response;
OutputStream os;
boolean login = false;
os = t.getResponseBody();
// TODO: nach Session prüfen
if (t.getRequestMethod().equals("POST")) {
// TODO: Versuchen zu autorisieren
login = true;
} else {
response = "<h1>Beleg - Anmeldung!</h1>";
response += "<form method=\"POST\"><input type=\"text\" name=\"name\"><br><input type=\"password\" name=\"pass\"><br><input type=\"submit\">";
t.sendResponseHeaders(200, response.length());
os.write(response.getBytes());
}
if (login) {
t.getResponseHeaders().add("Location", "/main");
t.sendResponseHeaders(308, 0);
}
os.close();
}
}

24
src/views/RootView.java Normal file
View file

@ -0,0 +1,24 @@
package hsmw.jotto5.beleg.views;
import java.io.IOException;
import java.io.OutputStream;
import com.sun.net.httpserver.*;
/**
* Fängt alle Anfragen an "/" und unbekannte URLs ab.
*
* Ist die View die aufgerufen wird wenn die Basis-Domain der Anwendung
* aufgerufen wird. Aufgrund des eigenartigen Routings des HttpServers
* übernimmt diese Klasse auch ein Paar sonstige Routing-Aufgaben, wie das
* Anzeigen der 404-Seite bei nicht existierendem Endpunkt.
*/
public class RootView implements HttpHandler {
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();
}
}

View file

@ -11,7 +11,7 @@ public class StartView implements HttpHandler {
OutputStream os;
response = "<h1>Beleg - Startseite!</h1><p>Bitte waehle aus einer der nachstehenden Optionen.</p>";
od = t.getResponseBody();
os = t.getResponseBody();
t.sendResponseHeaders(200, response.length());
os.write(response.getBytes());