mirror of https://github.com/Xhofe/alist
93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package handles
|
|
|
|
import (
|
|
"github.com/alist-org/alist/v3/internal/db"
|
|
"github.com/alist-org/alist/v3/internal/model"
|
|
"github.com/alist-org/alist/v3/server/common"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type SessionResp struct {
|
|
SessionID string `json:"session_id"`
|
|
UserID uint `json:"user_id,omitempty"`
|
|
LastActive int64 `json:"last_active"`
|
|
Status int `json:"status"`
|
|
UA string `json:"ua"`
|
|
IP string `json:"ip"`
|
|
}
|
|
|
|
func ListMySessions(c *gin.Context) {
|
|
user := c.MustGet("user").(*model.User)
|
|
sessions, err := db.ListSessionsByUser(user.ID)
|
|
if err != nil {
|
|
common.ErrorResp(c, err, 500)
|
|
return
|
|
}
|
|
resp := make([]SessionResp, len(sessions))
|
|
for i, s := range sessions {
|
|
resp[i] = SessionResp{
|
|
SessionID: s.DeviceKey,
|
|
LastActive: s.LastActive,
|
|
Status: s.Status,
|
|
UA: s.UserAgent,
|
|
IP: s.IP,
|
|
}
|
|
}
|
|
common.SuccessResp(c, resp)
|
|
}
|
|
|
|
type EvictSessionReq struct {
|
|
SessionID string `json:"session_id"`
|
|
}
|
|
|
|
func EvictMySession(c *gin.Context) {
|
|
var req EvictSessionReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.ErrorResp(c, err, 400)
|
|
return
|
|
}
|
|
user := c.MustGet("user").(*model.User)
|
|
if _, err := db.GetSession(user.ID, req.SessionID); err != nil {
|
|
common.ErrorResp(c, err, 400)
|
|
return
|
|
}
|
|
if err := db.MarkInactive(req.SessionID); err != nil {
|
|
common.ErrorResp(c, err, 500)
|
|
return
|
|
}
|
|
common.SuccessResp(c)
|
|
}
|
|
|
|
func ListSessions(c *gin.Context) {
|
|
sessions, err := db.ListSessions()
|
|
if err != nil {
|
|
common.ErrorResp(c, err, 500)
|
|
return
|
|
}
|
|
resp := make([]SessionResp, len(sessions))
|
|
for i, s := range sessions {
|
|
resp[i] = SessionResp{
|
|
SessionID: s.DeviceKey,
|
|
UserID: s.UserID,
|
|
LastActive: s.LastActive,
|
|
Status: s.Status,
|
|
UA: s.UserAgent,
|
|
IP: s.IP,
|
|
}
|
|
}
|
|
common.SuccessResp(c, resp)
|
|
}
|
|
|
|
func EvictSession(c *gin.Context) {
|
|
var req EvictSessionReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
common.ErrorResp(c, err, 400)
|
|
return
|
|
}
|
|
if err := db.MarkInactive(req.SessionID); err != nil {
|
|
common.ErrorResp(c, err, 500)
|
|
return
|
|
}
|
|
common.SuccessResp(c)
|
|
}
|