From 9173b0e33aa9b4ca71c6f52fdc78aaa6ade094c7 Mon Sep 17 00:00:00 2001 From: Oliver Stolle 3024383 <3024383@stud.hs-mannheim.de> Date: Mon, 1 Jun 2026 21:35:06 +0000 Subject: [PATCH] implemented labor 08 --- .../eigene_loesungen/Aufgabe_01/Aufgabe_01.go | 25 +++++++ .../eigene_loesungen/Aufgabe_02/Aufgabe_02.go | 49 +++++++++++++ .../eigene_loesungen/Aufgabe_03/Aufgabe_03.go | 71 +++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 web/08/eigene_loesungen/Aufgabe_01/Aufgabe_01.go create mode 100644 web/08/eigene_loesungen/Aufgabe_02/Aufgabe_02.go create mode 100644 web/08/eigene_loesungen/Aufgabe_03/Aufgabe_03.go diff --git a/web/08/eigene_loesungen/Aufgabe_01/Aufgabe_01.go b/web/08/eigene_loesungen/Aufgabe_01/Aufgabe_01.go new file mode 100644 index 0000000..55a3ee2 --- /dev/null +++ b/web/08/eigene_loesungen/Aufgabe_01/Aufgabe_01.go @@ -0,0 +1,25 @@ +package main + +import ( + "net/http" +) + +type loginHandler int +type logoutHandler string + +func (a loginHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Login")) +} + +func (b logoutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Logout")) +} + +func main() { + var a loginHandler + var b logoutHandler + mux := http.NewServeMux() + mux.Handle("/login", a) + mux.Handle("/logout", b) + http.ListenAndServe("localhost:8080", mux) +} diff --git a/web/08/eigene_loesungen/Aufgabe_02/Aufgabe_02.go b/web/08/eigene_loesungen/Aufgabe_02/Aufgabe_02.go new file mode 100644 index 0000000..4550e25 --- /dev/null +++ b/web/08/eigene_loesungen/Aufgabe_02/Aufgabe_02.go @@ -0,0 +1,49 @@ +package main + +import ( + "net/http" + + "github.com/google/uuid" +) + +type createHandler int +type showHandler int +type deleteHandler int + +func (a createHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + uuid := uuid.New().String() + cookie := &http.Cookie{Name: "keks", Value: uuid} + http.SetCookie(w, cookie) + w.Write([]byte("Cookie erstellt!")) +} + +func (b showHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + cookie, err := r.Cookie("keks") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + w.Write([]byte("Keks Wert: " + cookie.Value)) +} + +func (b deleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + cookie, err := r.Cookie("keks") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + cookie.MaxAge = -1 + http.SetCookie(w, cookie) + w.Write([]byte("Keks gelöscht")) +} + +func main() { + var a createHandler + var b showHandler + var c deleteHandler + mux := http.NewServeMux() + mux.Handle("/create-cookie", a) + mux.Handle("/show-cookie", b) + mux.Handle("/delete-cookie", c) + http.ListenAndServe("localhost:8080", mux) +} diff --git a/web/08/eigene_loesungen/Aufgabe_03/Aufgabe_03.go b/web/08/eigene_loesungen/Aufgabe_03/Aufgabe_03.go new file mode 100644 index 0000000..ad92678 --- /dev/null +++ b/web/08/eigene_loesungen/Aufgabe_03/Aufgabe_03.go @@ -0,0 +1,71 @@ +package main + +import ( + "encoding/json" + "net/http" + + "github.com/google/uuid" +) + +type signupHandler int +type whoAmIHandler int + +type User struct { + Username string `json:"username"` + Nickname string `json:"nickname"` + Admin bool `json:"admin"` +} + +var Users map[string]User + +func (a signupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "POST") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") + var user User + if err := json.NewDecoder(r.Body).Decode(&user); err != nil { + http.Error(w, "Daten konnten nicht verarbeitet werden.", http.StatusBadRequest) + return + } + uuid := uuid.New().String() + Users[uuid] = user + w.WriteHeader(http.StatusOK) + w.Write([]byte("Registrierung erfolgreich")) + cookie := &http.Cookie{Name: "uuid", Value: uuid} + http.SetCookie(w, cookie) +} + +func (b whoAmIHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + cookie, err := r.Cookie("uuid") + if err != nil { + w.Write([]byte("Keinen Login Cookie gefunden.")) + return + } + if user, ok := Users[cookie.Value]; ok { + nickname := user.Nickname + admin := user.Admin + + var status string + if admin { + status = "Admin" + } else { + status = "normaler Benutzer" + } + + w.Write([]byte("Hallo " + nickname + "!\nDu bist als " + status + " registriert.")) + + } else { + w.Write([]byte("User nicht gefunden!")) + } + +} + +func main() { + Users = make(map[string]User) + var a signupHandler + var b whoAmIHandler + mux := http.NewServeMux() + mux.Handle("/signup", a) + mux.Handle("/whoami", b) + http.ListenAndServe("localhost:8080", mux) +}