package main import ( "encoding/json" "net/http" "git.warky.dev/wdevs/whatshooked/internal/config" "git.warky.dev/wdevs/whatshooked/internal/logging" ) // handleHooks returns the list of all configured hooks func (s *Server) handleHooks(w http.ResponseWriter, r *http.Request) { hooks := s.hookMgr.ListHooks() w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(hooks) } // handleAddHook adds a new hook to the system func (s *Server) handleAddHook(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var hook config.Hook if err := json.NewDecoder(r.Body).Decode(&hook); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } s.hookMgr.AddHook(hook) // Update config s.config.Hooks = s.hookMgr.ListHooks() if err := config.Save(s.configPath, s.config); err != nil { logging.Error("Failed to save config", "error", err) } w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) } // handleRemoveHook removes a hook from the system func (s *Server) handleRemoveHook(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } var req struct { ID string `json:"id"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := s.hookMgr.RemoveHook(req.ID); err != nil { http.Error(w, err.Error(), http.StatusNotFound) return } // Update config s.config.Hooks = s.hookMgr.ListHooks() if err := config.Save(s.configPath, s.config); err != nil { logging.Error("Failed to save config", "error", err) } json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) }