* feat(backend): try a new approach for logs formatting (http) * feat(backend): added logger module * feat(backend): added project/session info to /i endpoint * feat(backend): found a solution for correct caller information * feat(backend): finished logs for http handlers * feat(backend): finished logs for mobile http handlers * feat(backend): finished ender * feat(backend): finished assets * feat(backend): finished heuristics * feat(backend): finished image-storage * feat(backend): finished sink * feat(backend): finished storage * feat(backend): formatted logs in all services * feat(backend): finished foss part * feat(backend): added missed foss part * feat(backend): fixed panic in memory manager and sink service * feat(backend): connectors
76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package uaparser
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/ua-parser/uap-go/uaparser"
|
|
)
|
|
|
|
type UAParser struct {
|
|
p *uaparser.Parser
|
|
}
|
|
|
|
func NewUAParser(regexFile string) (*UAParser, error) {
|
|
p, err := uaparser.New(regexFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &UAParser{p}, nil
|
|
}
|
|
|
|
type UA struct {
|
|
OS string
|
|
OSVersion string
|
|
Browser string
|
|
BrowserVersion string
|
|
Device string
|
|
DeviceType string
|
|
}
|
|
|
|
func (parser *UAParser) Parse(str string) *UA {
|
|
if str == "" {
|
|
return nil
|
|
}
|
|
data := parser.p.Parse(str)
|
|
if data == nil {
|
|
return nil
|
|
}
|
|
ua := &UA{
|
|
OS: data.Os.Family,
|
|
Browser: strings.Split(data.UserAgent.Family, "/")[0],
|
|
Device: data.Device.Family,
|
|
}
|
|
if ua.OS == "" || ua.Browser == "" || ua.Device == "Spider" {
|
|
return nil
|
|
}
|
|
if ua.Device == "Other" || ua.Device == "Mac" {
|
|
ua.Device = ""
|
|
}
|
|
if data.Os.Major != "" {
|
|
ua.OSVersion += data.Os.Major
|
|
if data.Os.Minor != "" {
|
|
ua.OSVersion += "." + data.Os.Minor
|
|
if data.Os.Patch != "" {
|
|
ua.OSVersion += "." + data.Os.Patch
|
|
}
|
|
}
|
|
}
|
|
if data.UserAgent.Major != "" {
|
|
ua.BrowserVersion += data.UserAgent.Major
|
|
if data.UserAgent.Minor != "" {
|
|
ua.BrowserVersion += "." + data.UserAgent.Minor
|
|
if data.UserAgent.Patch != "" {
|
|
ua.BrowserVersion += "." + data.UserAgent.Patch
|
|
}
|
|
}
|
|
}
|
|
switch ua.OS {
|
|
case "Chrome OS", "Fedora", "FreeBSD", "Linux", "Mac OS X", "NetBSD", "Ubuntu", "Windows":
|
|
ua.DeviceType = "desktop"
|
|
case "Android", "BlackBerry OS", "BlackBerry Tablet OS", "iOS", "Windows Phone":
|
|
ua.DeviceType = "mobile"
|
|
default:
|
|
ua.DeviceType = "other"
|
|
}
|
|
return ua
|
|
}
|