@@ -17,6 +17,7 @@ import (
17
17
"github.com/docker/distribution/registry/api/v2"
18
18
"github.com/docker/distribution/registry/handlers"
19
19
20
+ "github.com/openshift/origin/pkg/dockerregistry/server/client"
20
21
imageapi "github.com/openshift/origin/pkg/image/apis/image"
21
22
imageapiv1 "github.com/openshift/origin/pkg/image/apis/image/v1"
22
23
@@ -60,18 +61,27 @@ var (
60
61
)
61
62
62
63
type signatureHandler struct {
63
- ctx * handlers.Context
64
- reference imageapi.DockerImageReference
64
+ ctx * handlers.Context
65
+ reference imageapi.DockerImageReference
66
+ isImageClient client.ImageStreamImagesNamespacer
65
67
}
66
68
67
- // SignatureDispatcher handles the GET and PUT requests for signature endpoint.
68
- func SignatureDispatcher (ctx * handlers.Context , r * http.Request ) http.Handler {
69
- signatureHandler := & signatureHandler {ctx : ctx }
70
- signatureHandler .reference , _ = imageapi .ParseDockerImageReference (ctxu .GetStringValue (ctx , "vars.name" ) + "@" + ctxu .GetStringValue (ctx , "vars.digest" ))
71
-
72
- return gorillahandlers.MethodHandler {
73
- "GET" : http .HandlerFunc (signatureHandler .Get ),
74
- "PUT" : http .HandlerFunc (signatureHandler .Put ),
69
+ // NewSignatureDispatcher provides a function that handles the GET and PUT
70
+ // requests for signature endpoint.
71
+ func NewSignatureDispatcher (isImageClient client.ImageStreamImagesNamespacer ) func (* handlers.Context , * http.Request ) http.Handler {
72
+ return func (ctx * handlers.Context , r * http.Request ) http.Handler {
73
+ reference , _ := imageapi .ParseDockerImageReference (
74
+ ctxu .GetStringValue (ctx , "vars.name" ) + "@" + ctxu .GetStringValue (ctx , "vars.digest" ),
75
+ )
76
+ signatureHandler := & signatureHandler {
77
+ ctx : ctx ,
78
+ isImageClient : isImageClient ,
79
+ reference : reference ,
80
+ }
81
+ return gorillahandlers.MethodHandler {
82
+ "GET" : http .HandlerFunc (signatureHandler .Get ),
83
+ "PUT" : http .HandlerFunc (signatureHandler .Put ),
84
+ }
75
85
}
76
86
}
77
87
@@ -142,18 +152,13 @@ func (s *signatureHandler) Get(w http.ResponseWriter, req *http.Request) {
142
152
s .handleError (s .ctx , v2 .ErrorCodeNameInvalid .WithDetail ("missing image name or image ID" ), w )
143
153
return
144
154
}
145
- client , ok := userClientFrom (s .ctx )
146
- if ! ok {
147
- s .handleError (s .ctx , errcode .ErrorCodeUnknown .WithDetail ("unable to get origin client" ), w )
148
- return
149
- }
150
155
151
156
if len (s .reference .ID ) == 0 {
152
157
s .handleError (s .ctx , v2 .ErrorCodeNameInvalid .WithDetail ("the image ID must be specified (sha256:<digest>" ), w )
153
158
return
154
159
}
155
160
156
- image , err := client .ImageStreamImages (s .reference .Namespace ).Get (imageapi .MakeImageStreamImageName (s .reference .Name , s .reference .ID ), metav1.GetOptions {})
161
+ image , err := s . isImageClient .ImageStreamImages (s .reference .Namespace ).Get (imageapi .MakeImageStreamImageName (s .reference .Name , s .reference .ID ), metav1.GetOptions {})
157
162
switch {
158
163
case err == nil :
159
164
case kapierrors .IsUnauthorized (err ):
0 commit comments