1
0

user.go 1.2 KB

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