echoip/useragent/useragent.go

41 lines
841 B
Go
Raw Normal View History

2017-05-27 15:31:50 +02:00
package useragent
import (
"strings"
)
type UserAgent struct {
2019-07-14 00:50:31 +02:00
Product string `json:"product,omitempty"`
Version string `json:"version,omitempty"`
Comment string `json:"comment,omitempty"`
RawValue string `json:"raw_value,omitempty"`
2017-05-27 15:31:50 +02:00
}
func Parse(s string) UserAgent {
parts := strings.SplitN(s, "/", 2)
var version, comment string
if len(parts) > 1 {
// If first character is a number, treat it as version
2017-05-28 13:57:48 +02:00
if len(parts[1]) > 0 && parts[1][0] >= 48 && parts[1][0] <= 57 {
2017-05-27 15:31:50 +02:00
rest := strings.SplitN(parts[1], " ", 2)
version = rest[0]
if len(rest) > 1 {
comment = rest[1]
}
} else {
comment = parts[1]
}
} else {
parts = strings.SplitN(s, " ", 2)
if len(parts) > 1 {
comment = parts[1]
}
}
return UserAgent{
2019-07-14 00:50:31 +02:00
Product: parts[0],
Version: version,
Comment: comment,
RawValue: s,
2017-05-27 15:31:50 +02:00
}
}