diff --git a/internal/lkgateway/auth.go b/internal/lkgateway/auth.go index 4d64b23..3d24c17 100644 --- a/internal/lkgateway/auth.go +++ b/internal/lkgateway/auth.go @@ -486,6 +486,47 @@ type SessionView struct { Created, Seen time.Time } +// Device — браузер и система одним словом («Chrome · Windows») вместо строки User-Agent. +func (v SessionView) Device() string { + ua := v.UA + var b, o string + switch { + case strings.Contains(ua, "YaBrowser"): + b = "Яндекс Браузер" + case strings.Contains(ua, "Edg/"): + b = "Edge" + case strings.Contains(ua, "Firefox/"): + b = "Firefox" + case strings.Contains(ua, "Chrome/"): + b = "Chrome" + case strings.Contains(ua, "Safari/"): + b = "Safari" + case strings.Contains(ua, "curl/"): + b = "curl" + } + switch { + case strings.Contains(ua, "Windows"): + o = "Windows" + case strings.Contains(ua, "iPhone"), strings.Contains(ua, "iPad"): + o = "iOS" + case strings.Contains(ua, "Mac OS"): + o = "macOS" + case strings.Contains(ua, "Android"): + o = "Android" + case strings.Contains(ua, "Linux"): + o = "Linux" + } + switch { + case b != "" && o != "": + return b + " · " + o + case b != "" || o != "": + return b + o + case ua == "": + return "браузер неизвестен" + } + return "другой браузер" +} + // sessionID — короткий отпечаток токена: им список ссылается на сессию, сам токен в страницу не попадает. func sessionID(token string) string { sum := sha256.Sum256([]byte("bj-session-id:" + token)) diff --git a/internal/lkgateway/web/templates/admin_setup.html b/internal/lkgateway/web/templates/admin_setup.html index 8f5ba50..8402425 100644 --- a/internal/lkgateway/web/templates/admin_setup.html +++ b/internal/lkgateway/web/templates/admin_setup.html @@ -145,10 +145,10 @@
| Пользователь | Вход | Активность | Адрес | Браузер | |
|---|---|---|---|---|---|
| {{.Login}} | {{msk .Created}} | {{msk .Seen}} | {{.IP}} |
-
Сессий нет.
{{end}} + {{if $U.Sessions}}{{.IP}} · {{.Device}}
+ Сессий нет.
{{end}}