Активные сессии — строками: «Завершить» не вылезает за карточку; браузер и система одним словом
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user