diff options
| author | Christine Dodrill <me@christine.website> | 2019-11-28 18:22:38 +0000 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2019-11-28 18:24:54 +0000 |
| commit | 389f7b5a7764e3d0ca050d440393daadac8d176d (patch) | |
| tree | 1b6e9d1d4829e3ee15a6705d48510fc96057a561 /web/useragent | |
| parent | 2dfde39f006f8e6fa69d68dd72dd10d67e9b1cfd (diff) | |
| download | x-389f7b5a7764e3d0ca050d440393daadac8d176d.tar.xz x-389f7b5a7764e3d0ca050d440393daadac8d176d.zip | |
web: move useragent to its own package
Diffstat (limited to 'web/useragent')
| -rw-r--r-- | web/useragent/user_agent.go | 43 | ||||
| -rw-r--r-- | web/useragent/user_agent_test.go | 12 |
2 files changed, 55 insertions, 0 deletions
diff --git a/web/useragent/user_agent.go b/web/useragent/user_agent.go new file mode 100644 index 0000000..0f521c9 --- /dev/null +++ b/web/useragent/user_agent.go @@ -0,0 +1,43 @@ +package useragent + +import ( + "fmt" + "net/http" + "os" + "runtime" +) + +var ( + hostname = "<unknown>" +) + +func init() { + name, _ := os.Hostname() + if name != "" { + hostname = name + } +} + +// GenUserAgent creates a unique User-Agent string for outgoing HTTP requests. +func GenUserAgent(prefix, infoURL string) string { + return fmt.Sprintf( + "%s (%s/%s/%s; %s; +%s) Hostname/%s", + prefix, runtime.Version(), runtime.GOOS, runtime.GOARCH, infoURL, + os.Args[0], hostname, + ) +} + +// Transport wraps a http transport with user agent information. +func Transport(prefix, infoURL string, rt http.RoundTripper) http.RoundTripper { + return userAgentTransport{prefix: prefix, rt: rt} +} + +type userAgentTransport struct { + prefix, infoURL string + rt http.RoundTripper +} + +func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) { + r.Header.Set("User-Agent", GenUserAgent(uat.prefix)) + return uat.rt.RoundTrip(r) +} diff --git a/web/useragent/user_agent_test.go b/web/useragent/user_agent_test.go new file mode 100644 index 0000000..702bcf7 --- /dev/null +++ b/web/useragent/user_agent_test.go @@ -0,0 +1,12 @@ +package useragent + +import "testing" + +func TestGenUserAgent(t *testing.T) { + ua := GenUserAgent() + if ua == "" { + t.Fatal("no user agent generated") + } + + t.Log(ua) +} |
