| package handles | |
| import ( | |
| "strconv" | |
| "github.com/alist-org/alist/v3/internal/model" | |
| "github.com/alist-org/alist/v3/internal/op" | |
| "github.com/alist-org/alist/v3/server/common" | |
| "github.com/gin-gonic/gin" | |
| log "github.com/sirupsen/logrus" | |
| ) | |
| func ListUsers(c *gin.Context) { | |
| var req model.PageReq | |
| if err := c.ShouldBind(&req); err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| req.Validate() | |
| log.Debugf("%+v", req) | |
| users, total, err := op.GetUsers(req.Page, req.PerPage) | |
| if err != nil { | |
| common.ErrorResp(c, err, 500, true) | |
| return | |
| } | |
| common.SuccessResp(c, common.PageResp{ | |
| Content: users, | |
| Total: total, | |
| }) | |
| } | |
| func CreateUser(c *gin.Context) { | |
| var req model.User | |
| if err := c.ShouldBind(&req); err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| if req.IsAdmin() || req.IsGuest() { | |
| common.ErrorStrResp(c, "admin or guest user can not be created", 400, true) | |
| return | |
| } | |
| req.SetPassword(req.Password) | |
| req.Password = "" | |
| req.Authn = "[]" | |
| if err := op.CreateUser(&req); err != nil { | |
| common.ErrorResp(c, err, 500, true) | |
| } else { | |
| common.SuccessResp(c) | |
| } | |
| } | |
| func UpdateUser(c *gin.Context) { | |
| var req model.User | |
| if err := c.ShouldBind(&req); err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| user, err := op.GetUserById(req.ID) | |
| if err != nil { | |
| common.ErrorResp(c, err, 500) | |
| return | |
| } | |
| if user.Role != req.Role { | |
| common.ErrorStrResp(c, "role can not be changed", 400) | |
| return | |
| } | |
| if req.Password == "" { | |
| req.PwdHash = user.PwdHash | |
| req.Salt = user.Salt | |
| } else { | |
| req.SetPassword(req.Password) | |
| req.Password = "" | |
| } | |
| if req.OtpSecret == "" { | |
| req.OtpSecret = user.OtpSecret | |
| } | |
| if req.Disabled && req.IsAdmin() { | |
| common.ErrorStrResp(c, "admin user can not be disabled", 400) | |
| return | |
| } | |
| if err := op.UpdateUser(&req); err != nil { | |
| common.ErrorResp(c, err, 500) | |
| } else { | |
| common.SuccessResp(c) | |
| } | |
| } | |
| func DeleteUser(c *gin.Context) { | |
| idStr := c.Query("id") | |
| id, err := strconv.Atoi(idStr) | |
| if err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| if err := op.DeleteUserById(uint(id)); err != nil { | |
| common.ErrorResp(c, err, 500) | |
| return | |
| } | |
| common.SuccessResp(c) | |
| } | |
| func GetUser(c *gin.Context) { | |
| idStr := c.Query("id") | |
| id, err := strconv.Atoi(idStr) | |
| if err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| user, err := op.GetUserById(uint(id)) | |
| if err != nil { | |
| common.ErrorResp(c, err, 500, true) | |
| return | |
| } | |
| common.SuccessResp(c, user) | |
| } | |
| func Cancel2FAById(c *gin.Context) { | |
| idStr := c.Query("id") | |
| id, err := strconv.Atoi(idStr) | |
| if err != nil { | |
| common.ErrorResp(c, err, 400) | |
| return | |
| } | |
| if err := op.Cancel2FAById(uint(id)); err != nil { | |
| common.ErrorResp(c, err, 500) | |
| return | |
| } | |
| common.SuccessResp(c) | |
| } | |
| func DelUserCache(c *gin.Context) { | |
| username := c.Query("username") | |
| err := op.DelUserCache(username) | |
| if err != nil { | |
| common.ErrorResp(c, err, 500) | |
| return | |
| } | |
| common.SuccessResp(c) | |
| } | |