mirror of
https://github.com/AlistGo/alist.git
synced 2025-11-25 03:15:10 +08:00
* feat(auth): Added device session management - Added the `handleSession` function to manage user device sessions and verify client identity - Updated `auth.go` to call `handleSession` for device handling when a user logs in - Added the `Session` model to database migrations - Added `device.go` and `session.go` files to handle device session logic - Updated `settings.go` to add device-related configuration items, such as the maximum number of devices, device eviction policy, and session TTL * feat(session): Adds session management features - Added `SessionInactive` error type in `device.go` - Added session-related APIs in `router.go` to support listing and evicting sessions - Added `ListSessionsByUser`, `ListSessions`, and `MarkInactive` methods in `session.go` - Returns an appropriate error when the session state is `SessionInactive` * feat(auth): Marks the device session as invalid. - Import the `session` package into the `auth` module to handle device session status. - Add a check in the login logic. If `device_key` is obtained, call `session.MarkInactive` to mark the device session as invalid. - Store the invalid status in the context variable `session_inactive` for subsequent middleware checks. - Add a check in the session refresh logic to abort the process if the current session has been marked invalid. * feat(auth, session): Added device information processing and session management changes - Updated device handling logic in `auth.go` to pass user agent and IP information - Adjusted database queries in `session.go` to optimize session query fields and add `user_agent` and `ip` fields - Modified the `Handle` method to add `ua` and `ip` parameters to store the user agent and IP address - Added the `SessionResp` structure to return a session response containing `user_agent` and `ip` - Updated the `/admin/user/create` and `/webdav` endpoints to pass the user agent and IP address to the device handler
31 lines
551 B
Go
31 lines
551 B
Go
package utils
|
|
|
|
import "strings"
|
|
|
|
// MaskIP anonymizes middle segments of an IP address.
|
|
func MaskIP(ip string) string {
|
|
if ip == "" {
|
|
return ""
|
|
}
|
|
if strings.Contains(ip, ":") {
|
|
parts := strings.Split(ip, ":")
|
|
if len(parts) > 2 {
|
|
for i := 1; i < len(parts)-1; i++ {
|
|
if parts[i] != "" {
|
|
parts[i] = "*"
|
|
}
|
|
}
|
|
return strings.Join(parts, ":")
|
|
}
|
|
return ip
|
|
}
|
|
parts := strings.Split(ip, ".")
|
|
if len(parts) == 4 {
|
|
for i := 1; i < len(parts)-1; i++ {
|
|
parts[i] = "*"
|
|
}
|
|
return strings.Join(parts, ".")
|
|
}
|
|
return ip
|
|
}
|