diff options
| author | Felix Hanley <felix@userspace.com.au> | 2020-02-14 04:12:25 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2020-02-14 04:12:25 +0000 |
| commit | 729c39874d906a6312b878046ca24458af4b6a8b (patch) | |
| tree | f7f8d43d20859688eb15c90ac232d93232d220d5 /user_agent.go | |
| parent | 91a6d4ab9ae45c64683eae764b0e0d3edf5e7c80 (diff) | |
| download | sws-729c39874d906a6312b878046ca24458af4b6a8b.tar.gz sws-729c39874d906a6312b878046ca24458af4b6a8b.tar.bz2 | |
Add user agent indexed by sha1
Diffstat (limited to 'user_agent.go')
| -rw-r--r-- | user_agent.go | 33 |
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 +} |
