aboutsummaryrefslogtreecommitdiff
path: root/web/useragent
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-11-28 18:22:38 +0000
committerChristine Dodrill <me@christine.website>2019-11-28 18:24:54 +0000
commit389f7b5a7764e3d0ca050d440393daadac8d176d (patch)
tree1b6e9d1d4829e3ee15a6705d48510fc96057a561 /web/useragent
parent2dfde39f006f8e6fa69d68dd72dd10d67e9b1cfd (diff)
downloadx-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.go43
-rw-r--r--web/useragent/user_agent_test.go12
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)
+}