install.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/model"
  4. "github.com/0xJacky/Nginx-UI/server/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, verrs := BindAndValid(c, &json)
  37. if !ok {
  38. c.JSON(http.StatusNotAcceptable, gin.H{
  39. "errors": verrs,
  40. })
  41. return
  42. }
  43. serverSettings := settings.Conf.Section("server")
  44. serverSettings.Key("JwtSecret").SetValue(uuid.New().String())
  45. serverSettings.Key("Email").SetValue(json.Email)
  46. err := settings.Save()
  47. if err != nil {
  48. ErrorHandler(c, err)
  49. return
  50. }
  51. curd := model.NewCurd(&model.Auth{})
  52. pwd, _ := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  53. err = curd.Add(&model.Auth{
  54. Name: json.Username,
  55. Password: string(pwd),
  56. })
  57. if err != nil {
  58. ErrorHandler(c, err)
  59. return
  60. }
  61. c.JSON(http.StatusOK, gin.H{
  62. "message": "ok",
  63. })
  64. }