user.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package user
  2. import (
  3. "github.com/0xJacky/Nginx-UI/internal/user"
  4. "github.com/0xJacky/Nginx-UI/model"
  5. "github.com/0xJacky/Nginx-UI/query"
  6. "github.com/0xJacky/Nginx-UI/settings"
  7. "github.com/gin-gonic/gin"
  8. "github.com/uozi-tech/cosy"
  9. "golang.org/x/crypto/bcrypt"
  10. )
  11. func encryptPassword(ctx *cosy.Ctx[model.User]) {
  12. if ctx.Payload["password"] == nil {
  13. delete(ctx.Payload, "password")
  14. return
  15. }
  16. pwd := ctx.Payload["password"].(string)
  17. if pwd != "" {
  18. pwdBytes, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.DefaultCost)
  19. if err != nil {
  20. ctx.AbortWithError(err)
  21. return
  22. }
  23. ctx.Model.Password = string(pwdBytes)
  24. } else {
  25. delete(ctx.Payload, "password")
  26. }
  27. }
  28. func InitManageUserRouter(g *gin.RouterGroup) {
  29. c := cosy.Api[model.User]("users")
  30. c.CreateHook(func(c *cosy.Ctx[model.User]) {
  31. c.BeforeDecodeHook(encryptPassword)
  32. })
  33. c.ModifyHook(func(c *cosy.Ctx[model.User]) {
  34. c.BeforeDecodeHook(func(ctx *cosy.Ctx[model.User]) {
  35. if settings.NodeSettings.Demo && ctx.ID == 1 {
  36. ctx.AbortWithError(user.ErrChangeInitUserPwdInDemo)
  37. }
  38. })
  39. c.BeforeDecodeHook(encryptPassword)
  40. c.ExecutedHook(func(ctx *cosy.Ctx[model.User]) {
  41. if ctx.Payload["password"] != "" {
  42. a := query.AuthToken
  43. _, _ = a.Where(a.UserID.Eq(ctx.ID)).Delete()
  44. }
  45. })
  46. })
  47. c.DestroyHook(func(c *cosy.Ctx[model.User]) {
  48. c.BeforeExecuteHook(func(ctx *cosy.Ctx[model.User]) {
  49. if ctx.ID == 1 {
  50. ctx.AbortWithError(user.ErrCannotRemoveInitUser)
  51. }
  52. })
  53. })
  54. c.InitRouter(g)
  55. }