mirror of
https://github.com/portainer/portainer.git
synced 2025-07-23 15:29:42 +02:00
* feat(k8s/resource-pool): add the ability to mark/unmark resource pool as system fix(kube/ns): check label to see if namespace is system refactor(k8s/namespaces): rename variables feat(kubernetes): toggle system state in the server (#5361) fix(app/resource-pool): UI fixes feat(app/resource-pool): add confirmation modal when unamrking system namespace * refactor(app): review changes * feat(app/namespaces): introduce store to retrieve namespace system status without changing all the kubernetes models refactor(app/namespaces): remove unused code first introduced for system tagging fix(app/namespaces): cache namespaces to retrieve system status regardless of namespace reference format refactor(app): migrate namespace store from helper to a separate singleton refactor(app): remove KubernetesNamespaceHelper from DI cycle * refactor(app): normalize usage of KubernetesNamespaceHelper functions * refactor(app/k8s): change namespace store to functions instead of class Co-authored-by: LP B <xAt0mZ@users.noreply.github.com>
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package middlewares
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
httperror "github.com/portainer/libhttp/error"
|
|
requesthelpers "github.com/portainer/libhttp/request"
|
|
portainer "github.com/portainer/portainer/api"
|
|
bolterrors "github.com/portainer/portainer/api/bolt/errors"
|
|
)
|
|
|
|
const (
|
|
contextEndpoint = "endpoint"
|
|
)
|
|
|
|
func WithEndpoint(endpointService portainer.EndpointService, endpointIDParam string) mux.MiddlewareFunc {
|
|
return func(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(rw http.ResponseWriter, request *http.Request) {
|
|
if endpointIDParam == "" {
|
|
endpointIDParam = "id"
|
|
}
|
|
|
|
endpointID, err := requesthelpers.RetrieveNumericRouteVariableValue(request, endpointIDParam)
|
|
if err != nil {
|
|
httperror.WriteError(rw, http.StatusBadRequest, "Invalid endpoint identifier route variable", err)
|
|
return
|
|
}
|
|
|
|
endpoint, err := endpointService.Endpoint(portainer.EndpointID(endpointID))
|
|
if err != nil {
|
|
statusCode := http.StatusInternalServerError
|
|
|
|
if err == bolterrors.ErrObjectNotFound {
|
|
statusCode = http.StatusNotFound
|
|
}
|
|
httperror.WriteError(rw, statusCode, "Unable to find an endpoint with the specified identifier inside the database", err)
|
|
return
|
|
}
|
|
|
|
ctx := context.WithValue(request.Context(), contextEndpoint, endpoint)
|
|
|
|
next.ServeHTTP(rw, request.WithContext(ctx))
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
func FetchEndpoint(request *http.Request) (*portainer.Endpoint, error) {
|
|
contextData := request.Context().Value(contextEndpoint)
|
|
if contextData == nil {
|
|
return nil, errors.New("Unable to find endpoint data in request context")
|
|
}
|
|
|
|
return contextData.(*portainer.Endpoint), nil
|
|
}
|