development-ib-fork/web/08/eigene_loesungen/Aufgabe_03/Aufgabe_03.go

72 lines
1.6 KiB
Go

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