install.go 1.7 KB

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