user.go 2.3 KB

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