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) }