diff --git a/src/Main.java b/src/Main.java index 699f9d2..cb24af4 100644 --- a/src/Main.java +++ b/src/Main.java @@ -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(); diff --git a/src/views/AuthView.java b/src/views/AuthView.java new file mode 100644 index 0000000..75c3e90 --- /dev/null +++ b/src/views/AuthView.java @@ -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 = "

Beleg - Anmeldung!

"; + response += "


"; + t.sendResponseHeaders(200, response.length()); + os.write(response.getBytes()); + } + + if (login) { + t.getResponseHeaders().add("Location", "/main"); + t.sendResponseHeaders(308, 0); + } + + os.close(); + } + +} diff --git a/src/views/RootView.java b/src/views/RootView.java new file mode 100644 index 0000000..dd70911 --- /dev/null +++ b/src/views/RootView.java @@ -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(); + } + +} diff --git a/src/views/StartView.java b/src/views/StartView.java index d342b39..5bf057e 100644 --- a/src/views/StartView.java +++ b/src/views/StartView.java @@ -11,7 +11,7 @@ public class StartView implements HttpHandler { OutputStream os; response = "

Beleg - Startseite!

Bitte waehle aus einer der nachstehenden Optionen.

"; - od = t.getResponseBody(); + os = t.getResponseBody(); t.sendResponseHeaders(200, response.length()); os.write(response.getBytes());