package routes import ( "crawlab/constants" "crawlab/model" "crawlab/services" "crawlab/utils" "github.com/gin-gonic/gin" "github.com/globalsign/mgo/bson" "github.com/pkg/errors" "net/http" ) type UserListRequestData struct { PageNum int `form:"page_num"` PageSize int `form:"page_size"` } type UserRequestData struct { Username string `json:"username"` Password string `json:"password"` } func GetUser(c *gin.Context) { id := c.Param("id") user, err := model.GetUser(bson.ObjectIdHex(id)) if err != nil { HandleError(http.StatusInternalServerError, c, err) return } c.JSON(http.StatusOK, Response{ Status: "ok", Message: "success", Data: user, }) } func GetUserList(c *gin.Context) { // 绑定数据 data := UserListRequestData{} if err := c.ShouldBindQuery(&data); err != nil { HandleError(http.StatusBadRequest, c, err) return } if data.PageNum == 0 { data.PageNum = 1 } if data.PageSize == 0 { data.PageNum = 10 } // 获取用户列表 users, err := model.GetUserList(nil, (data.PageNum-1)*data.PageSize, data.PageSize, "-create_ts") if err != nil { HandleError(http.StatusInternalServerError, c, err) return } // 获取总用户数 total, err := model.GetTaskListTotal(nil) if err != nil { HandleError(http.StatusInternalServerError, c, err) return } c.JSON(http.StatusOK, ListResponse{ Status: "ok", Message: "success", Data: users, Total: total, }) } func PutUser(c *gin.Context) { // 绑定请求数据 var reqData UserRequestData if err := c.ShouldBindJSON(&reqData); err != nil { HandleError(http.StatusBadRequest, c, err) return } // 添加用户 user := model.User{ Username: reqData.Username, Password: utils.EncryptPassword(reqData.Password), Role: constants.RoleNormal, } if err := user.Add(); err != nil { HandleError(http.StatusInternalServerError, c, err) return } c.JSON(http.StatusOK, Response{ Status: "ok", Message: "success", }) } func PostUser(c *gin.Context) { } func DeleteUser(c *gin.Context) { } func Login(c *gin.Context) { // 绑定请求数据 var reqData UserRequestData if err := c.ShouldBindJSON(&reqData); err != nil { HandleError(http.StatusUnauthorized, c, errors.New("not authorized")) return } // 获取用户 user, err := model.GetUserByUsername(reqData.Username) if err != nil { HandleError(http.StatusUnauthorized, c, errors.New("not authorized")) return } // 校验密码 encPassword := utils.EncryptPassword(reqData.Password) if user.Password != encPassword { HandleError(http.StatusUnauthorized, c, errors.New("not authorized")) return } // 获取token tokenStr, err := services.GetToken(user.Username) if err != nil { HandleError(http.StatusUnauthorized, c, errors.New("not authorized")) return } c.JSON(http.StatusOK, Response{ Status: "ok", Message: "success", Data: tokenStr, }) }