user.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package api
  2. import (
  3. "errors"
  4. "github.com/0xJacky/Nginx-UI/server/model"
  5. "github.com/gin-gonic/gin"
  6. "github.com/spf13/cast"
  7. "golang.org/x/crypto/bcrypt"
  8. "net/http"
  9. )
  10. func GetUsers(c *gin.Context) {
  11. curd := model.NewCurd(&model.Auth{})
  12. var list []model.Auth
  13. err := curd.GetList(&list)
  14. if err != nil {
  15. ErrorHandler(c, err)
  16. return
  17. }
  18. c.JSON(http.StatusOK, gin.H{
  19. "data": list,
  20. })
  21. }
  22. func GetUser(c *gin.Context) {
  23. curd := model.NewCurd(&model.Auth{})
  24. id := c.Param("id")
  25. var user model.Auth
  26. err := curd.First(&user, id)
  27. if err != nil {
  28. ErrorHandler(c, err)
  29. return
  30. }
  31. c.JSON(http.StatusOK, user)
  32. }
  33. type UserJson struct {
  34. Name string `json:"name" binding:"required,max=255"`
  35. Password string `json:"password" binding:"max=255"`
  36. }
  37. func AddUser(c *gin.Context) {
  38. var json UserJson
  39. ok, verrs := BindAndValid(c, &json)
  40. if !ok {
  41. c.JSON(http.StatusNotAcceptable, gin.H{
  42. "errors": verrs,
  43. })
  44. return
  45. }
  46. curd := model.NewCurd(&model.Auth{})
  47. pwd, err := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  48. if err != nil {
  49. ErrorHandler(c, err)
  50. return
  51. }
  52. json.Password = string(pwd)
  53. user := model.Auth{
  54. Name: json.Name,
  55. Password: json.Password,
  56. }
  57. err = curd.Add(&user)
  58. if err != nil {
  59. ErrorHandler(c, err)
  60. return
  61. }
  62. c.JSON(http.StatusOK, user)
  63. }
  64. func EditUser(c *gin.Context) {
  65. var json UserJson
  66. ok, verrs := BindAndValid(c, &json)
  67. if !ok {
  68. c.JSON(http.StatusNotAcceptable, gin.H{
  69. "errors": verrs,
  70. })
  71. }
  72. curd := model.NewCurd(&model.Auth{})
  73. var user, edit model.Auth
  74. err := curd.First(&user, c.Param("id"))
  75. if err != nil {
  76. ErrorHandler(c, err)
  77. return
  78. }
  79. edit.Name = json.Name
  80. // 改密码加密
  81. if json.Password != "" {
  82. var pwd []byte
  83. pwd, err = bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  84. if err != nil {
  85. ErrorHandler(c, err)
  86. return
  87. }
  88. edit.Password = string(pwd)
  89. }
  90. err = curd.Edit(&user, &edit)
  91. if err != nil {
  92. ErrorHandler(c, err)
  93. return
  94. }
  95. c.JSON(http.StatusOK, user)
  96. }
  97. func DeleteUser(c *gin.Context) {
  98. id := c.Param("id")
  99. if cast.ToInt(id) == 1 {
  100. ErrorHandler(c, errors.New("不允许删除默认账户"))
  101. return
  102. }
  103. curd := model.NewCurd(&model.Auth{})
  104. err := curd.Delete(&model.Auth{}, "id", id)
  105. if err != nil {
  106. ErrorHandler(c, err)
  107. return
  108. }
  109. c.JSON(http.StatusNoContent, gin.H{})
  110. }