| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package api
- import (
- "encoding/json"
- "net/http"
- "strconv"
- "proxmox-router/internal/logging"
- )
- func (s *Server) handleListServices(w http.ResponseWriter, r *http.Request) {
- if s.servicesMgr == nil {
- writeError(w, http.StatusServiceUnavailable, "services manager not configured")
- return
- }
- list := s.servicesMgr.ListServices()
- writeJSON(w, http.StatusOK, list)
- }
- func (s *Server) handleUpdateService(w http.ResponseWriter, r *http.Request) {
- if s.servicesMgr == nil {
- writeError(w, http.StatusServiceUnavailable, "services manager not configured")
- return
- }
- name := r.PathValue("name")
- var req struct {
- Port int `json:"port"`
- Disabled bool `json:"disabled"`
- Certificate string `json:"certificate"`
- Comment string `json:"comment"`
- }
- if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
- writeError(w, http.StatusBadRequest, "invalid request body")
- return
- }
- if err := s.servicesMgr.SetService(name, req.Port, req.Disabled, req.Certificate); err != nil {
- writeError(w, http.StatusBadRequest, err.Error())
- return
- }
- svc, _ := s.servicesMgr.GetService(name)
- writeJSON(w, http.StatusOK, svc)
- }
- func (s *Server) handleSetServiceState(w http.ResponseWriter, r *http.Request) {
- if s.servicesMgr == nil {
- writeError(w, http.StatusServiceUnavailable, "services manager not configured")
- return
- }
- name := r.PathValue("name")
- var req struct {
- Disabled bool `json:"disabled"`
- }
- if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
- writeError(w, http.StatusBadRequest, "invalid request body")
- return
- }
- if err := s.servicesMgr.SetServiceState(name, req.Disabled); err != nil {
- writeError(w, http.StatusBadRequest, err.Error())
- return
- }
- svc, _ := s.servicesMgr.GetService(name)
- writeJSON(w, http.StatusOK, svc)
- }
- func (s *Server) handleListLogs(w http.ResponseWriter, r *http.Request) {
- limit := 100
- if lStr := r.URL.Query().Get("limit"); lStr != "" {
- if lVal, err := strconv.Atoi(lStr); err == nil && lVal > 0 {
- limit = lVal
- }
- }
- filter := r.URL.Query().Get("filter")
- if filter == "" {
- filter = r.URL.Query().Get("where")
- }
- logger := logging.GetLogger()
- logs := logger.List(limit, filter)
- writeJSON(w, http.StatusOK, map[string]any{
- "total": len(logs),
- "logs": logs,
- })
- }
|