install.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/model"
  4. "github.com/0xJacky/Nginx-UI/settings"
  5. "github.com/gin-gonic/gin"
  6. "github.com/google/uuid"
  7. "golang.org/x/crypto/bcrypt"
  8. "net/http"
  9. "os"
  10. "path"
  11. )
  12. func installLockStatus() bool {
  13. lockPath := path.Join(settings.DataDir, "app.ini")
  14. _, err := os.Stat(lockPath)
  15. return !os.IsNotExist(err)
  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. }
  27. func InstallNginxUI(c *gin.Context) {
  28. // 安装过就别访问了
  29. if installLockStatus() {
  30. c.JSON(http.StatusForbidden, gin.H{
  31. "message": "installed",
  32. })
  33. return
  34. }
  35. var json InstallJson
  36. ok := BindAndValid(c, &json)
  37. if !ok {
  38. return
  39. }
  40. serverSettings := settings.Conf.Section("server")
  41. serverSettings.Key("JwtSecret").SetValue(uuid.New().String())
  42. serverSettings.Key("Email").SetValue(json.Email)
  43. err := settings.Save()
  44. if err != nil {
  45. ErrHandler(c, err)
  46. return
  47. }
  48. curd := model.NewCurd(&model.Auth{})
  49. pwd, _ := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  50. err = curd.Add(&model.Auth{
  51. Name: json.Username,
  52. Password: string(pwd),
  53. })
  54. if err != nil {
  55. ErrHandler(c, err)
  56. return
  57. }
  58. c.JSON(http.StatusOK, gin.H{
  59. "message": "ok",
  60. })
  61. }