Skip to content

Commit 3b9ff6d

Browse files
committed
clairctl: update with new signer
Signed-off-by: Hank Donnay <[email protected]>
1 parent d99f700 commit 3b9ff6d

File tree

5 files changed

+61
-44
lines changed

5 files changed

+61
-44
lines changed

cmd/clairctl/client.go

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/quay/clair/v4/httptransport"
2222
"github.com/quay/clair/v4/internal/codec"
23+
"github.com/quay/clair/v4/internal/httputil"
2324
)
2425

2526
const (
@@ -63,15 +64,16 @@ func rt(ctx context.Context, ref string) (http.RoundTripper, error) {
6364
type Client struct {
6465
host *url.URL
6566
client *http.Client
67+
signer *httputil.Signer
6668

6769
mu sync.RWMutex
6870
// TODO Back this on disk to minimize resubmissions.
6971
validator map[string]string
7072
}
7173

72-
func NewClient(c *http.Client, root string) (*Client, error) {
74+
func NewClient(c *http.Client, root string, s *httputil.Signer) (*Client, error) {
7375
if c == nil {
74-
c = http.DefaultClient
76+
return nil, errors.New("programmer error: no http.Client provided")
7577
}
7678
host, err := url.Parse(root)
7779
if err != nil {
@@ -80,6 +82,7 @@ func NewClient(c *http.Client, root string) (*Client, error) {
8082
return &Client{
8183
host: host,
8284
client: c,
85+
signer: s,
8386
validator: make(map[string]string),
8487
}, nil
8588
}
@@ -117,7 +120,10 @@ func (c *Client) IndexReport(ctx context.Context, id claircore.Digest, m *clairc
117120
Msg("unable to construct index_report url")
118121
return err
119122
}
120-
req = c.request(ctx, fp, http.MethodGet)
123+
req, err = c.request(ctx, fp, http.MethodGet)
124+
if err != nil {
125+
return err
126+
}
121127
res, err = c.client.Do(req)
122128
if err != nil {
123129
zlog.Debug(ctx).
@@ -163,7 +169,10 @@ func (c *Client) IndexReport(ctx context.Context, id claircore.Digest, m *clairc
163169
return err
164170
}
165171

166-
req = c.request(ctx, ru, http.MethodPost)
172+
req, err = c.request(ctx, ru, http.MethodPost)
173+
if err != nil {
174+
return err
175+
}
167176
req.Body = codec.JSONReader(m)
168177
res, err = c.client.Do(req)
169178
if err != nil {
@@ -241,7 +250,10 @@ func (c *Client) VulnerabilityReport(ctx context.Context, id claircore.Digest) (
241250
Msg("unable to construct vulnerability_report url")
242251
return nil, err
243252
}
244-
req = c.request(ctx, u, http.MethodGet)
253+
req, err = c.request(ctx, u, http.MethodGet)
254+
if err != nil {
255+
return nil, err
256+
}
245257
res, err = c.client.Do(req)
246258
if err != nil {
247259
zlog.Debug(ctx).
@@ -286,7 +298,10 @@ func (c *Client) DeleteIndexReports(ctx context.Context, ds []claircore.Digest)
286298
if err != nil {
287299
return err
288300
}
289-
req = c.request(ctx, u, http.MethodDelete)
301+
req, err = c.request(ctx, u, http.MethodDelete)
302+
if err != nil {
303+
return err
304+
}
290305

291306
req.Body = codec.JSONReader(ds)
292307
res, err = c.client.Do(req)
@@ -311,21 +326,18 @@ func (c *Client) DeleteIndexReports(ctx context.Context, ds []claircore.Digest)
311326
return nil
312327
}
313328

314-
func (c *Client) request(ctx context.Context, u *url.URL, m string) *http.Request {
315-
req := &http.Request{
316-
Method: m,
317-
URL: u,
318-
Proto: "HTTP/1.1",
319-
ProtoMajor: 1,
320-
ProtoMinor: 1,
321-
Header: make(http.Header),
322-
Body: nil,
323-
Host: u.Host,
324-
}
325-
req = req.WithContext(ctx)
326-
req.Header.Set("user-agent", userAgent)
329+
func (c *Client) request(ctx context.Context, u *url.URL, m string) (*http.Request, error) {
330+
req, err := httputil.NewRequestWithContext(ctx, m, u.String(), nil)
331+
if err != nil {
332+
return nil, err
333+
}
327334
if v := c.getValidator(ctx, u.EscapedPath()); v != "" {
328335
req.Header.Set("if-none-match", v)
329336
}
330-
return req
337+
if c.signer != nil {
338+
if err := c.signer.Sign(ctx, req); err != nil {
339+
return nil, err
340+
}
341+
}
342+
return req, nil
331343
}

cmd/clairctl/delete.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,24 @@ func deleteAction(c *cli.Context) error {
4242

4343
fi, err := os.Stat(c.Path("config"))
4444
useCfg := err == nil && !fi.IsDir()
45+
ctx := c.Context
46+
hc, err := httputil.NewClient(ctx, false)
47+
if err != nil {
48+
return err
49+
}
4550

46-
var cc *Client
51+
var s *httputil.Signer
4752
if useCfg {
48-
cfg, e := loadConfig(c.Path("config"))
49-
if e != nil {
50-
return e
53+
cfg, err := loadConfig(c.Path("config"))
54+
if err != nil {
55+
return err
5156
}
52-
hc, _, e := httputil.Client(nil, &commonClaim, cfg)
53-
if e != nil {
54-
return e
57+
s, err = httputil.NewSigner(ctx, cfg, commonClaim)
58+
if err != nil {
59+
return err
5560
}
56-
cc, err = NewClient(hc, c.String("host"))
57-
} else {
58-
cc, err = NewClient(nil, c.String("host"))
5961
}
62+
cc, err := NewClient(hc, c.String("host"), s)
6063
if err != nil {
6164
return err
6265
}

cmd/clairctl/export.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"io"
9-
"net/http"
109
"os"
1110
"strings"
1211

@@ -119,11 +118,11 @@ func exportAction(c *cli.Context) error {
119118
}
120119
}
121120

122-
tr := http.DefaultTransport.(*http.Transport).Clone()
123-
cl, _, err := httputil.Client(httputil.RateLimiter(tr), nil, cfg)
121+
cl, err := httputil.NewClient(ctx, false)
124122
if err != nil {
125123
return err
126124
}
125+
cl.Transport = httputil.RateLimiter(cl.Transport)
127126

128127
store, err := jsonblob.New()
129128
if err != nil {

cmd/clairctl/import.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func importAction(c *cli.Context) error {
5555
return err
5656
}
5757

58-
cl, _, err := httputil.Client(nil, &commonClaim, cfg)
58+
cl, err := httputil.NewClient(ctx, false)
5959
if err != nil {
6060
return err
6161
}

cmd/clairctl/report.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,21 +126,24 @@ func reportAction(c *cli.Context) error {
126126
// Do we have a config?
127127
fi, err := os.Stat(c.Path("config"))
128128
useCfg := err == nil && !fi.IsDir()
129+
ctx := c.Context
130+
hc, err := httputil.NewClient(ctx, false)
131+
if err != nil {
132+
return err
133+
}
129134

130-
var cc *Client
135+
var s *httputil.Signer
131136
if useCfg {
132-
cfg, e := loadConfig(c.Path("config"))
133-
if e != nil {
134-
return e
137+
cfg, err := loadConfig(c.Path("config"))
138+
if err != nil {
139+
return err
135140
}
136-
hc, _, e := httputil.Client(nil, &commonClaim, cfg)
137-
if e != nil {
138-
return e
141+
s, err = httputil.NewSigner(ctx, cfg, commonClaim)
142+
if err != nil {
143+
return err
139144
}
140-
cc, err = NewClient(hc, c.String("host"))
141-
} else {
142-
cc, err = NewClient(nil, c.String("host"))
143145
}
146+
cc, err := NewClient(hc, c.String("host"), s)
144147
if err != nil {
145148
return err
146149
}

0 commit comments

Comments
 (0)