forked from WEB-IB-SS26/development-ib
72 lines
1.6 KiB
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)
|
|
}
|