mirror of https://github.com/Xhofe/alist
feat(session): Added session cleanup functionality
- Added the `/clean` route to the route for session cleanup - Added the `DeleteInactiveSessions` method to support deleting inactive sessions by user ID - Added the `DeleteSessionByID` method to delete a specific session by session ID - Defined the `CleanSessionsReq` request structure to support passing a user ID or session ID - Implemented the `CleanSessions` interface logic to perform corresponding session cleanup operations based on the request parameterspull/9315/head
parent
2d5b8a9a61
commit
af2a115547
|
@ -67,3 +67,15 @@ func ListSessions() ([]model.Session, error) {
|
||||||
func MarkInactive(sessionID string) error {
|
func MarkInactive(sessionID string) error {
|
||||||
return errors.WithStack(db.Model(&model.Session{}).Where("device_key = ?", sessionID).Update("status", model.SessionInactive).Error)
|
return errors.WithStack(db.Model(&model.Session{}).Where("device_key = ?", sessionID).Update("status", model.SessionInactive).Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteInactiveSessions(userID *uint) error {
|
||||||
|
query := db.Where("status = ?", model.SessionInactive)
|
||||||
|
if userID != nil {
|
||||||
|
query = query.Where("user_id = ?", *userID)
|
||||||
|
}
|
||||||
|
return errors.WithStack(query.Delete(&model.Session{}).Error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteSessionByID(sessionID string) error {
|
||||||
|
return errors.WithStack(db.Where("device_key = ?", sessionID).Delete(&model.Session{}).Error)
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,11 @@ type EvictSessionReq struct {
|
||||||
SessionID string `json:"session_id"`
|
SessionID string `json:"session_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CleanSessionsReq struct {
|
||||||
|
UserID *uint `json:"user_id"`
|
||||||
|
SessionID string `json:"session_id"`
|
||||||
|
}
|
||||||
|
|
||||||
func EvictMySession(c *gin.Context) {
|
func EvictMySession(c *gin.Context) {
|
||||||
var req EvictSessionReq
|
var req EvictSessionReq
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
@ -90,3 +95,32 @@ func EvictSession(c *gin.Context) {
|
||||||
}
|
}
|
||||||
common.SuccessResp(c)
|
common.SuccessResp(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CleanSessions(c *gin.Context) {
|
||||||
|
var req CleanSessionsReq
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
common.ErrorResp(c, err, 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if req.SessionID != "" {
|
||||||
|
if err := db.DeleteSessionByID(req.SessionID); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
common.SuccessResp(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if req.UserID != nil {
|
||||||
|
if err := db.DeleteInactiveSessions(req.UserID); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
common.SuccessResp(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := db.DeleteInactiveSessions(nil); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
|
|
@ -190,6 +190,7 @@ func admin(g *gin.RouterGroup) {
|
||||||
session := g.Group("/session")
|
session := g.Group("/session")
|
||||||
session.GET("/list", handles.ListSessions)
|
session.GET("/list", handles.ListSessions)
|
||||||
session.POST("/evict", handles.EvictSession)
|
session.POST("/evict", handles.EvictSession)
|
||||||
|
session.POST("/clean", handles.CleanSessions)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue