diff --git a/handlers/guest_links.go b/handlers/guest_links.go index 7e4ebac4..bb99b1d0 100644 --- a/handlers/guest_links.go +++ b/handlers/guest_links.go @@ -6,6 +6,7 @@ import ( "fmt" "log" "net/http" + "strings" "github.com/gorilla/mux" "github.com/mtlynch/picoshare/v2/handlers/parse" @@ -63,7 +64,7 @@ func (s Server) guestLinksDelete() http.HandlerFunc { } } -func (s *Server) guestLinksDisable() http.HandlerFunc { +func (s *Server) guestLinksEnableDisable() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id, err := parseGuestLinkID(mux.Vars(r)["id"]) if err != nil { @@ -78,34 +79,17 @@ func (s *Server) guestLinksDisable() http.HandlerFunc { return } - if err := s.getDB(r).DisableGuestLink(id); err != nil { - log.Printf("failed to disable guest link: %v", err) - http.Error(w, fmt.Sprintf("Failed to disable guest link: %v", err), http.StatusInternalServerError) - return - } - - w.WriteHeader(http.StatusNoContent) - } -} - -func (s *Server) guestLinksEnable() http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - id, err := parseGuestLinkID(mux.Vars(r)["id"]) - if err != nil { - log.Printf("failed to parse guest link ID %s: %v", mux.Vars(r)["id"], err) - http.Error(w, fmt.Sprintf("Invalid guest link ID: %v", err), http.StatusBadRequest) - return - } - - if _, err := s.getDB(r).GetGuestLink(id); err != nil { - log.Printf("failed to get guest link ID %s: %v", mux.Vars(r)["id"], err) - http.Error(w, fmt.Sprintf("Guest link with ID %s not found: %v", mux.Vars(r)["id"], err), http.StatusNotFound) - return + // Determine if client is enabling or disabling link. + var dbFn func(picoshare.GuestLinkID) error + if strings.HasSuffix(r.URL.Path, "/enable") { + dbFn = s.getDB(r).EnableGuestLink + } else { + dbFn = s.getDB(r).DisableGuestLink } - if err := s.getDB(r).EnableGuestLink(id); err != nil { - log.Printf("failed to enable guest link: %v", err) - http.Error(w, fmt.Sprintf("Failed to enable guest link: %v", err), http.StatusInternalServerError) + if err := dbFn(id); err != nil { + log.Printf("failed to change guest link enabled state: %v", err) + http.Error(w, fmt.Sprintf("Failed to change guest link enabled state: %v", err), http.StatusInternalServerError) return } diff --git a/handlers/routes.go b/handlers/routes.go index 641d6b1d..fb434bc7 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -14,8 +14,8 @@ func (s *Server) routes() { authenticatedApis.HandleFunc("/entry/{id}", s.entryDelete()).Methods(http.MethodDelete) authenticatedApis.HandleFunc("/guest-links", s.guestLinksPost()).Methods(http.MethodPost) authenticatedApis.HandleFunc("/guest-links/{id}", s.guestLinksDelete()).Methods(http.MethodDelete) - authenticatedApis.HandleFunc("/guest-links/{id}/enable", s.guestLinksEnable()).Methods(http.MethodPut) - authenticatedApis.HandleFunc("/guest-links/{id}/disable", s.guestLinksDisable()).Methods(http.MethodPut) + authenticatedApis.HandleFunc("/guest-links/{id}/enable", s.guestLinksEnableDisable()).Methods(http.MethodPut) + authenticatedApis.HandleFunc("/guest-links/{id}/disable", s.guestLinksEnableDisable()).Methods(http.MethodPut) authenticatedApis.HandleFunc("/settings", s.settingsPut()).Methods(http.MethodPut) publicApis := s.router.PathPrefix("/api").Subrouter()