From 1f68aad07fc71630c3f0b165030c57a588b9fcb3 Mon Sep 17 00:00:00 2001 From: Anthony Lapenna Date: Fri, 20 Sep 2019 16:14:19 +1200 Subject: [PATCH] feat(api): prevent endpoint creation with already paired agent (#3159) --- api/http/handler/endpoints/endpoint_create.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/api/http/handler/endpoints/endpoint_create.go b/api/http/handler/endpoints/endpoint_create.go index 6f4163025..1ce454afa 100644 --- a/api/http/handler/endpoints/endpoint_create.go +++ b/api/http/handler/endpoints/endpoint_create.go @@ -2,12 +2,12 @@ package endpoints import ( "errors" - "log" "net" "net/http" "net/url" "runtime" "strconv" + "strings" httperror "github.com/portainer/libhttp/error" "github.com/portainer/libhttp/request" @@ -344,8 +344,10 @@ func (handler *Handler) snapshotAndPersistEndpoint(endpoint *portainer.Endpoint) snapshot, err := handler.Snapshotter.CreateSnapshot(endpoint) endpoint.Status = portainer.EndpointStatusUp if err != nil { - log.Printf("http error: endpoint snapshot error (endpoint=%s, URL=%s) (err=%s)\n", endpoint.Name, endpoint.URL, err) - endpoint.Status = portainer.EndpointStatusDown + if strings.Contains(err.Error(), "Invalid request signature") { + err = errors.New("agent already paired with another Portainer instance") + } + return &httperror.HandlerError{http.StatusInternalServerError, "Unable to initiate communications with endpoint", err} } if snapshot != nil {