aboutsummaryrefslogtreecommitdiff
path: root/user_agent.go
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2020-02-14 04:12:25 +0000
committerFelix Hanley <felix@userspace.com.au>2020-02-14 04:12:25 +0000
commit729c39874d906a6312b878046ca24458af4b6a8b (patch)
treef7f8d43d20859688eb15c90ac232d93232d220d5 /user_agent.go
parent91a6d4ab9ae45c64683eae764b0e0d3edf5e7c80 (diff)
downloadsws-729c39874d906a6312b878046ca24458af4b6a8b.tar.gz
sws-729c39874d906a6312b878046ca24458af4b6a8b.tar.bz2
Add user agent indexed by sha1
Diffstat (limited to 'user_agent.go')
-rw-r--r--user_agent.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/user_agent.go b/user_agent.go
new file mode 100644
index 0000000..cbb831b
--- /dev/null
+++ b/user_agent.go
@@ -0,0 +1,33 @@
+package sws
+
+import (
+ "crypto/sha1"
+ "fmt"
+ "net/http"
+ "time"
+)
+
+type UserAgent struct {
+ Hash string `json:"hash"`
+ Name string `json:"name"`
+ LastSeenAt time.Time `json:"last_seen_at"`
+}
+
+func UserAgentHash(s string) string {
+ return fmt.Sprintf("%x", sha1.Sum([]byte(s)))
+}
+
+func UserAgentFromRequest(r *http.Request) (*UserAgent, error) {
+ q := r.URL.Query()
+ agent := q.Get("u")
+ if agent == "" {
+ return nil, nil
+ }
+ ua := r.UserAgent()
+
+ return &UserAgent{
+ Name: ua,
+ LastSeenAt: time.Now(),
+ Hash: UserAgentHash(ua),
+ }, nil
+}