package server import ( "net/http" "time" ) type inviteReq struct { MaxUses int `json:"max_uses"` ExpiresInHours int `json:"expires_in_hours"` } func (s *Server) createInvite(w http.ResponseWriter, r *http.Request) { if !requireAdmin(w, r) { return } var b inviteReq if r.ContentLength != 0 && !decode(w, r, &b) { return } if b.MaxUses < 0 || b.MaxUses > 1000 || b.ExpiresInHours < 0 || b.ExpiresInHours > 24*365 { writeErr(w, http.StatusBadRequest, "max_uses must be 1-1000, expires_in_hours 0-8760") return } inv, err := s.Store.CreateInvite(r.Context(), b.MaxUses, time.Duration(b.ExpiresInHours)*time.Hour) if err != nil { s.storeErr(w, err) return } writeJSON(w, http.StatusCreated, inv) } func (s *Server) listInvites(w http.ResponseWriter, r *http.Request) { if !requireAdmin(w, r) { return } list, err := s.Store.ListInvites(r.Context()) if err != nil { s.storeErr(w, err) return } writeJSON(w, 200, list) } func (s *Server) deleteInvite(w http.ResponseWriter, r *http.Request) { if !requireAdmin(w, r) { return } if err := s.Store.DeleteInvite(r.Context(), r.PathValue("code")); err != nil { s.storeErr(w, err) return } w.WriteHeader(http.StatusNoContent) }