install.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package system
  2. import (
  3. "github.com/0xJacky/Nginx-UI/api"
  4. "github.com/0xJacky/Nginx-UI/internal/kernel"
  5. "github.com/0xJacky/Nginx-UI/model"
  6. "github.com/0xJacky/Nginx-UI/query"
  7. "github.com/0xJacky/Nginx-UI/settings"
  8. "github.com/gin-gonic/gin"
  9. "github.com/google/uuid"
  10. "github.com/uozi-tech/cosy"
  11. cSettings "github.com/uozi-tech/cosy/settings"
  12. "golang.org/x/crypto/bcrypt"
  13. "net/http"
  14. )
  15. func installLockStatus() bool {
  16. return settings.NodeSettings.SkipInstallation || "" != cSettings.AppSettings.JwtSecret
  17. }
  18. func InstallLockCheck(c *gin.Context) {
  19. c.JSON(http.StatusOK, gin.H{
  20. "lock": installLockStatus(),
  21. })
  22. }
  23. type InstallJson struct {
  24. Email string `json:"email" binding:"required,email"`
  25. Username string `json:"username" binding:"required,max=255"`
  26. Password string `json:"password" binding:"required,max=255"`
  27. Database string `json:"database"`
  28. }
  29. func InstallNginxUI(c *gin.Context) {
  30. // Visit this api after installed is forbidden
  31. if installLockStatus() {
  32. c.JSON(http.StatusForbidden, gin.H{
  33. "error": "installed",
  34. })
  35. return
  36. }
  37. var json InstallJson
  38. ok := cosy.BindAndValid(c, &json)
  39. if !ok {
  40. return
  41. }
  42. cSettings.AppSettings.JwtSecret = uuid.New().String()
  43. settings.NodeSettings.Secret = uuid.New().String()
  44. settings.CertSettings.Email = json.Email
  45. if "" != json.Database {
  46. settings.DatabaseSettings.Name = json.Database
  47. }
  48. err := settings.Save()
  49. if err != nil {
  50. api.ErrHandler(c, err)
  51. return
  52. }
  53. // Init model
  54. kernel.InitDatabase()
  55. pwd, _ := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  56. u := query.User
  57. err = u.Create(&model.User{
  58. Name: json.Username,
  59. Password: string(pwd),
  60. })
  61. if err != nil {
  62. api.ErrHandler(c, err)
  63. return
  64. }
  65. c.JSON(http.StatusOK, gin.H{
  66. "message": "ok",
  67. })
  68. }