Making smaller functions to make switch simpler

This commit is contained in:
collin 2025-06-30 15:38:18 +02:00
parent a0786860e2
commit d431f34e72
No known key found for this signature in database

View file

@ -32,6 +32,85 @@ func getStaticFile(relPath string, contentType string, w http.ResponseWriter) {
w.Write(file) w.Write(file)
} }
func isAuthorized(r *http.Request) bool {
auth := r.Header.Get("Authorization")
if auth == "" {
return false
}
return auth == fmt.Sprintf("Basic %s", token)
}
func (h *Handler) getRsvps(w http.ResponseWriter, r *http.Request) {
if !isAuthorized(r) {
w.WriteHeader(http.StatusUnauthorized)
return
}
rsvps, err := GetRsvps(h.db)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "%s", err.Error())
return
}
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "%#v", rsvps)
}
func (h *Handler) createRsvp(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
attending := r.Form.Get("attending") == "true"
partySize, err := strconv.ParseInt(r.Form.Get("party-size"), 10, 64)
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
partyMembers := make([]Member, partySize)
for i := range partySize {
name := r.Form.Get(fmt.Sprintf("name-%d", i))
child := r.Form.Has(fmt.Sprintf("child-%d", i)) && r.Form.Get(fmt.Sprintf("child-%d", i)) == "true"
dietaryPreferences := r.Form.Get(fmt.Sprintf("diet-%d", i))
member := Member{
Name: name,
Child: child,
DietaryPreferences: dietaryPreferences,
}
partyMembers[i] = member
}
rsvp := Rsvp{
Attending: attending,
PartySize: partySize,
PartyMembers: partyMembers,
}
_, err = rsvp.CreateRsvp(h.db)
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
if h.ntfy != nil {
SendRsvpNotification(h.ntfy, &rsvp)
}
w.Header().Add("Location", "/rsvp_confirmed")
w.WriteHeader(http.StatusSeeOther)
}
func SetupAuth() { func SetupAuth() {
var username string var username string
var password string var password string
@ -63,16 +142,6 @@ func SetupAuth() {
fmt.Println("auth ready") fmt.Println("auth ready")
} }
func isAuthorized(r *http.Request) bool {
auth := r.Header.Get("Authorization")
if auth == "" {
return false
}
return auth == fmt.Sprintf("Basic %s", token)
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Printf("%s - [%s] (%s) %s\n", time.Now().Format(time.RFC3339), r.RemoteAddr, r.Method, r.URL) fmt.Printf("%s - [%s] (%s) %s\n", time.Now().Format(time.RFC3339), r.RemoteAddr, r.Method, r.URL)
@ -102,71 +171,11 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
getStaticFile("./client/style.css", "text/css", w) getStaticFile("./client/style.css", "text/css", w)
case r.Method == "GET" && r.URL.Path == "/api/rsvps": case r.Method == "GET" && r.URL.Path == "/api/rsvps":
if !isAuthorized(r) { h.getRsvps(w, r)
w.WriteHeader(http.StatusUnauthorized)
return
}
rsvps, err := GetRsvps(h.db)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "%s", err.Error())
return
}
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "%#v", rsvps)
case r.Method == "POST" && r.URL.Path == "/api/rsvps": case r.Method == "POST" && r.URL.Path == "/api/rsvps":
err := r.ParseForm() h.createRsvp(w, r)
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
attending := r.Form.Get("attending") == "true"
partySize, err := strconv.ParseInt(r.Form.Get("party-size"), 10, 64)
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusBadRequest)
return
}
partyMembers := make([]Member, partySize)
for i := range partySize {
name := r.Form.Get(fmt.Sprintf("name-%d", i))
child := r.Form.Has(fmt.Sprintf("child-%d", i)) && r.Form.Get(fmt.Sprintf("child-%d", i)) == "true"
dietaryPreferences := r.Form.Get(fmt.Sprintf("diet-%d", i))
member := Member{
Name: name,
Child: child,
DietaryPreferences: dietaryPreferences,
}
partyMembers[i] = member
}
rsvp := Rsvp{
Attending: attending,
PartySize: partySize,
PartyMembers: partyMembers,
}
_, err = rsvp.CreateRsvp(h.db)
if err != nil {
fmt.Println(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
if h.ntfy != nil {
SendRsvpNotification(h.ntfy, &rsvp)
}
w.Header().Add("Location", "/rsvp_confirmed")
w.WriteHeader(http.StatusSeeOther)
default: default:
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)
} }