Merge pull request #432 from euank/jetstack/user-agent

Plumb a user-agent through pretty much everywhere
This commit is contained in:
jetstack-bot 2018-04-09 11:14:31 +01:00 committed by GitHub
commit 9021767cb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 58 additions and 22 deletions

View File

@ -4,6 +4,7 @@ import (
"context"
"fmt"
nethttp "net/http"
"time"
"github.com/golang/glog"
"golang.org/x/crypto/acme"
@ -94,22 +95,6 @@ func New(issuer v1alpha1.GenericIssuer,
}, nil
}
// uaRoundTripper implements the http.RoundTripper interface and adds a User-Agent
// header. Note that this is a stopgap until upstream `crypto/acme` adds a
// facility for setting User-Agent.
type uaRoundTripper struct {
nethttp.RoundTripper
ua string
}
var acmeUserAgent = "jetstack-cert-manager/" + util.AppVersion
func (uat uaRoundTripper) RoundTrip(req *nethttp.Request) (*nethttp.Response, error) {
req.Header.Add("User-Agent", acmeUserAgent)
return uat.RoundTripper.RoundTrip(req)
}
func (a *Acme) acmeClient() (*acme.Client, error) {
secretName, secretKey := a.acmeAccountPrivateKeyMeta()
glog.V(4).Infof("getting private key (%s->%s) for acme issuer %s/%s", secretName, secretKey, a.issuerResourcesNamespace, a.issuer.GetObjectMeta().Name)
@ -122,9 +107,10 @@ func (a *Acme) acmeClient() (*acme.Client, error) {
Key: accountPrivKey,
DirectoryURL: a.issuer.GetSpec().ACME.Server,
HTTPClient: &nethttp.Client{
Transport: uaRoundTripper{
RoundTripper: nethttp.DefaultTransport,
},
// Stopgap user-agent roundtripper until the upstream 'crypto/acme'
// provides a better method for setting user-agent.
Transport: util.UserAgentRoundTripper(nethttp.DefaultTransport),
Timeout: 30 * time.Second,
},
}
return cl, nil

View File

@ -15,6 +15,7 @@ import (
"github.com/golang/glog"
"github.com/jetstack/cert-manager/pkg/issuer/acme/dns/util"
pkgutil "github.com/jetstack/cert-manager/pkg/util"
"github.com/pkg/errors"
)
@ -165,6 +166,8 @@ func (a *DNSProvider) saveZoneData(domain string, data zoneData) error {
}
func (a *DNSProvider) makeRequest(req *http.Request) ([]byte, error) {
req.Header.Set("User-Agent", pkgutil.CertManagerUserAgent)
if err := a.auth.SignRequest(req); err != nil {
return nil, errors.Wrap(err, "failed to sign HTTP request")
}

View File

@ -12,6 +12,7 @@ import (
"time"
"github.com/jetstack/cert-manager/pkg/issuer/acme/dns/util"
pkgutil "github.com/jetstack/cert-manager/pkg/util"
)
// CloudFlareAPIURL represents the API endpoint to call.
@ -180,9 +181,11 @@ func (c *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawM
req.Header.Set("X-Auth-Email", c.authEmail)
req.Header.Set("X-Auth-Key", c.authKey)
//req.Header.Set("User-Agent", userAgent())
req.Header.Set("User-Agent", pkgutil.CertManagerUserAgent)
client := http.Client{Timeout: 30 * time.Second}
client := http.Client{
Timeout: 30 * time.Second,
}
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("Error querying Cloudflare API -> %v", err)

View File

@ -17,6 +17,7 @@ import (
"github.com/golang/glog"
"github.com/jetstack/cert-manager/pkg/issuer/acme/dns/util"
pkgutil "github.com/jetstack/cert-manager/pkg/util"
)
const (
@ -93,6 +94,7 @@ func NewDNSProvider(accessKeyID, secretAccessKey, hostedZoneID, region string, a
if err != nil {
return nil, fmt.Errorf("unable to create aws session: %s", err)
}
sess.Handlers.Build.PushBack(request.WithAppendUserAgent(pkgutil.CertManagerUserAgent))
client := route53.New(sess, config)
return &DNSProvider{

View File

@ -3,6 +3,7 @@ package kube
import (
"fmt"
"github.com/jetstack/cert-manager/pkg/util"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
@ -26,11 +27,11 @@ func KubeConfig(apiServerHost string) (*rest.Config, error) {
}
cfg, err = clientcmd.NewDefaultClientConfig(*apiCfg, &clientcmd.ConfigOverrides{}).ClientConfig()
if err != nil {
return nil, fmt.Errorf("error loading cluster client config: %s", err.Error())
}
}
cfg.UserAgent = util.CertManagerUserAgent
return cfg, nil
}

View File

@ -0,0 +1,28 @@
package util
import (
"net/http"
)
// CertManagerUserAgent is the user agent that http clients in this codebase should use
var CertManagerUserAgent = "jetstack-cert-manager/" + version()
// UserAgentRoundTripper implements the http.RoundTripper interface and adds a User-Agent
// header.
type userAgentRoundTripper struct {
inner http.RoundTripper
}
// UserAgentRoundTripper returns a RoundTripper that functions identically to
// the provided 'inner' round tripper, other than also setting a user agent.
func UserAgentRoundTripper(inner http.RoundTripper) http.RoundTripper {
return userAgentRoundTripper{
inner: inner,
}
}
// RoundTrip implements http.RoundTripper
func (u userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Add("User-Agent", CertManagerUserAgent)
return u.inner.RoundTrip(req)
}

View File

@ -1,7 +1,20 @@
package util
import "fmt"
var (
AppGitState = ""
AppGitCommit = ""
AppVersion = "canary"
)
func version() string {
v := AppVersion
if AppGitCommit != "" {
v += "-" + AppGitCommit
}
if AppGitState != "" {
v += fmt.Sprintf(" (%v)", AppGitState)
}
return v
}