package endpointedge import ( "net/http" httperror "github.com/portainer/libhttp/error" portainer "github.com/portainer/portainer/api" "github.com/portainer/portainer/api/dataservices" "github.com/portainer/portainer/api/http/middlewares" "github.com/portainer/portainer/api/http/security" "github.com/gorilla/mux" ) // Handler is the HTTP handler used to handle edge environment(endpoint) operations. type Handler struct { *mux.Router requestBouncer security.BouncerService DataStore dataservices.DataStore FileService portainer.FileService ReverseTunnelService portainer.ReverseTunnelService } // NewHandler creates a handler to manage environment(endpoint) operations. func NewHandler(bouncer security.BouncerService, dataStore dataservices.DataStore, fileService portainer.FileService, reverseTunnelService portainer.ReverseTunnelService) *Handler { h := &Handler{ Router: mux.NewRouter(), requestBouncer: bouncer, DataStore: dataStore, FileService: fileService, ReverseTunnelService: reverseTunnelService, } h.Handle("/api/endpoints/{id}/edge/status", bouncer.PublicAccess(httperror.LoggerHandler(h.endpointEdgeStatusInspect))).Methods(http.MethodGet) endpointRouter := h.PathPrefix("/api/endpoints/{id}").Subrouter() endpointRouter.Use(middlewares.WithEndpoint(dataStore.Endpoint(), "id")) endpointRouter.PathPrefix("/edge/stacks/{stackId}").Handler( bouncer.PublicAccess(httperror.LoggerHandler(h.endpointEdgeStackInspect))).Methods(http.MethodGet) endpointRouter.PathPrefix("/edge/jobs/{jobID}/logs").Handler( bouncer.PublicAccess(httperror.LoggerHandler(h.endpointEdgeJobsLogs))).Methods(http.MethodPost) return h }