From 8c0b57f316373a60e5b4c8e2cd8b1d34dff0a804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=84=80=E1=85=AA=E1=86=BC=E1=84=8B?= =?UTF-8?q?=E1=85=B5=E1=86=AF/TechnicalCenter?= Date: Mon, 29 Jul 2019 16:10:08 +0900 Subject: [PATCH] Generate from response body if no Docker-Content-Digest header --- events/event_listener.go | 6 +++--- go.sum | 3 +++ registry/client.go | 11 ++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/events/event_listener.go b/events/event_listener.go index ac15926..d59d260 100644 --- a/events/event_listener.go +++ b/events/event_listener.go @@ -74,7 +74,7 @@ func (e *EventListener) ProcessEvents(request *http.Request) { e.logger.Debugf("Received event: %+v", t) j, _ := json.Marshal(t) - db, err := e.getDababaseHandler() + db, err := e.getDatabaseHandler() if err != nil { e.logger.Error(err) return @@ -128,7 +128,7 @@ func (e *EventListener) ProcessEvents(request *http.Request) { func (e *EventListener) GetEvents(repository string) []EventRow { var events []EventRow - db, err := e.getDababaseHandler() + db, err := e.getDatabaseHandler() if err != nil { e.logger.Error(err) return events @@ -154,7 +154,7 @@ func (e *EventListener) GetEvents(repository string) []EventRow { return events } -func (e *EventListener) getDababaseHandler() (*sql.DB, error) { +func (e *EventListener) getDatabaseHandler() (*sql.DB, error) { firstRun := false schema := schemaSQLite if e.databaseDriver == "sqlite3" { diff --git a/go.sum b/go.sum index 6dff9cb..63bd671 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a h1:3SgJcK9l5 github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= github.com/CloudyKit/jet v2.1.2+incompatible h1:ybZoYzMBdoijK6I+Ke3vg9GZsmlKo/ZhKdNMWz0P26c= github.com/CloudyKit/jet v2.1.2+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -25,6 +26,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0= github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= @@ -49,6 +51,7 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c h1:Ho+uVpkel/udgjbwB5Lktg9BtvJSh2DT0Hi6LPSyI2w= github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/tidwall/gjson v1.1.3 h1:u4mspaByxY+Qk4U1QYYVzGFI8qxN/3jtEV0ZDb2vRic= github.com/tidwall/gjson v1.1.3/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= diff --git a/registry/client.go b/registry/client.go index d6af4b9..ff53994 100644 --- a/registry/client.go +++ b/registry/client.go @@ -1,6 +1,7 @@ package registry import ( + "crypto" "crypto/tls" "fmt" "regexp" @@ -124,9 +125,17 @@ func (c *Client) callRegistry(uri, scope string, manifest uint, delete bool) (st return "", resp } + digest := resp.Header.Get("Docker-Content-Digest") + if digest == "" { + // Try to get digest from body instead, should be equal to what would be presented + // in Docker-Content-Digest + h := crypto.SHA256.New() + h.Write([]byte(data)) + resp.Header.Set("Docker-Content-Digest", fmt.Sprintf("sha256:%x", h.Sum(nil))) + } + if delete { // Delete by manifest digest reference. - digest := resp.Header.Get("Docker-Content-Digest") parts := strings.Split(uri, "/manifests/") uri = parts[0] + "/manifests/" + digest resp, _, errs := c.request.Delete(c.url+uri).Set("Accept", acceptHeader).Set("Authorization", authHeader).Set("User-Agent", "docker-registry-ui").End()