fix(edge): parse agent platform on every polling request to avoid endpoint misconfiguration (#7452)

pull/7467/head
matias-portainer 2022-08-11 22:21:56 -03:00 committed by GitHub
parent 29f0daa7ea
commit 87accfce5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 8 deletions

View File

@ -77,13 +77,13 @@ func (handler *Handler) endpointEdgeStatusInspect(w http.ResponseWriter, r *http
if endpoint.EdgeID == "" { if endpoint.EdgeID == "" {
edgeIdentifier := r.Header.Get(portainer.PortainerAgentEdgeIDHeader) edgeIdentifier := r.Header.Get(portainer.PortainerAgentEdgeIDHeader)
endpoint.EdgeID = edgeIdentifier endpoint.EdgeID = edgeIdentifier
}
agentPlatform, agentPlatformErr := parseAgentPlatform(r) agentPlatform, agentPlatformErr := parseAgentPlatform(r)
if agentPlatformErr != nil { if agentPlatformErr != nil {
return httperror.BadRequest("agent platform header is not valid", err) return httperror.BadRequest("agent platform header is not valid", err)
} }
endpoint.Type = agentPlatform endpoint.Type = agentPlatform
}
version := r.Header.Get(portainer.PortainerAgentHeader) version := r.Header.Get(portainer.PortainerAgentHeader)
endpoint.Agent.Version = version endpoint.Agent.Version = version

View File

@ -57,7 +57,7 @@ var endpointTestCases = []endpointTestCase{
portainer.EndpointRelation{ portainer.EndpointRelation{
EndpointID: 2, EndpointID: 2,
}, },
http.StatusBadRequest, http.StatusForbidden,
}, },
{ {
portainer.Endpoint{ portainer.Endpoint{
@ -194,7 +194,9 @@ func TestWithEndpoints(t *testing.T) {
if err != nil { if err != nil {
t.Fatal("request error:", err) t.Fatal("request error:", err)
} }
req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id")
req.Header.Set(portainer.PortainerAgentEdgeIDHeader, test.endpoint.EdgeID)
req.Header.Set(portainer.HTTPResponseAgentPlatform, "1")
rec := httptest.NewRecorder() rec := httptest.NewRecorder()
handler.ServeHTTP(rec, req) handler.ServeHTTP(rec, req)
@ -239,6 +241,7 @@ func TestLastCheckInDateIncreases(t *testing.T) {
t.Fatal("request error:", err) t.Fatal("request error:", err)
} }
req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id") req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id")
req.Header.Set(portainer.HTTPResponseAgentPlatform, "1")
rec := httptest.NewRecorder() rec := httptest.NewRecorder()
handler.ServeHTTP(rec, req) handler.ServeHTTP(rec, req)
@ -355,6 +358,7 @@ func TestEdgeStackStatus(t *testing.T) {
t.Fatal("request error:", err) t.Fatal("request error:", err)
} }
req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id") req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id")
req.Header.Set(portainer.HTTPResponseAgentPlatform, "1")
rec := httptest.NewRecorder() rec := httptest.NewRecorder()
handler.ServeHTTP(rec, req) handler.ServeHTTP(rec, req)
@ -424,6 +428,7 @@ func TestEdgeJobsResponse(t *testing.T) {
t.Fatal("request error:", err) t.Fatal("request error:", err)
} }
req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id") req.Header.Set(portainer.PortainerAgentEdgeIDHeader, "edge-id")
req.Header.Set(portainer.HTTPResponseAgentPlatform, "1")
rec := httptest.NewRecorder() rec := httptest.NewRecorder()
handler.ServeHTTP(rec, req) handler.ServeHTTP(rec, req)