package server import ( "net/http" "github.com/go-chi/chi/v5" "git.unkin.net/unkin/tomswallapi/internal/model" ) // mountGlobal2 wires secmarks (id-keyed) and vars (key-keyed). func (s *Server) mountGlobal2(r chi.Router) { idCRUD(r, "/secmarks", s.listSecmarks, s.createSecmark, s.getSecmark, s.deleteSecmark) r.Route("/vars", func(r chi.Router) { r.Get("/", s.listVars) r.Get("/{key}", s.getVar) r.Put("/{key}", s.putVar) r.Delete("/{key}", s.deleteVar) }) } func (s *Server) listSecmarks(w http.ResponseWriter, r *http.Request) { list, err := s.store.ListSecmarks(r.Context()) respondList(w, list, err) } func (s *Server) createSecmark(w http.ResponseWriter, r *http.Request) { var v model.SecmarkRule if !decode(w, r, &v) { return } if v.Secmark == "" || v.Chain == "" { writeError(w, http.StatusBadRequest, "secmark and chain are required") return } id, err := s.store.CreateSecmark(r.Context(), v) if err == nil { v.ID = id } respondCreated(w, v, err) } func (s *Server) getSecmark(w http.ResponseWriter, r *http.Request) { id, ok := idParam(w, r) if !ok { return } v, err := s.store.GetSecmark(r.Context(), id) respondOne(w, v, err) } func (s *Server) deleteSecmark(w http.ResponseWriter, r *http.Request) { id, ok := idParam(w, r) if !ok { return } respondDelete(w, s.store.DeleteSecmark(r.Context(), id)) } func (s *Server) listVars(w http.ResponseWriter, r *http.Request) { list, err := s.store.ListVars(r.Context()) respondList(w, list, err) } func (s *Server) getVar(w http.ResponseWriter, r *http.Request) { v, err := s.store.GetVar(r.Context(), chi.URLParam(r, "key")) respondOne(w, v, err) } func (s *Server) putVar(w http.ResponseWriter, r *http.Request) { var v model.Var if !decode(w, r, &v) { return } v.Key = chi.URLParam(r, "key") if err := s.store.UpsertVar(r.Context(), v); err != nil { writeError(w, http.StatusInternalServerError, err.Error()) return } writeJSON(w, http.StatusOK, v) } func (s *Server) deleteVar(w http.ResponseWriter, r *http.Request) { respondDelete(w, s.store.DeleteVar(r.Context(), chi.URLParam(r, "key"))) }