user.go 1.2 KB

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