install.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. )
  10. func installLockStatus() bool {
  11. return "" != settings.ServerSettings.JwtSecret
  12. }
  13. func InstallLockCheck(c *gin.Context) {
  14. c.JSON(http.StatusOK, gin.H{
  15. "lock": installLockStatus(),
  16. })
  17. }
  18. type InstallJson struct {
  19. Email string `json:"email" binding:"required,email"`
  20. Username string `json:"username" binding:"required,max=255"`
  21. Password string `json:"password" binding:"required,max=255"`
  22. Database string `json:"database"`
  23. }
  24. func InstallNginxUI(c *gin.Context) {
  25. // 安装过就别访问了
  26. if installLockStatus() {
  27. c.JSON(http.StatusForbidden, gin.H{
  28. "message": "installed",
  29. })
  30. return
  31. }
  32. var json InstallJson
  33. ok := BindAndValid(c, &json)
  34. if !ok {
  35. return
  36. }
  37. settings.ServerSettings.JwtSecret = uuid.New().String()
  38. settings.ServerSettings.Email = json.Email
  39. if "" != json.Database {
  40. settings.ServerSettings.Database = json.Database
  41. }
  42. settings.ReflectFrom()
  43. err := settings.Save()
  44. if err != nil {
  45. ErrHandler(c, err)
  46. return
  47. }
  48. // Init model
  49. model.Init()
  50. curd := model.NewCurd(&model.Auth{})
  51. pwd, _ := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
  52. err = curd.Add(&model.Auth{
  53. Name: json.Username,
  54. Password: string(pwd),
  55. })
  56. if err != nil {
  57. ErrHandler(c, err)
  58. return
  59. }
  60. c.JSON(http.StatusOK, gin.H{
  61. "message": "ok",
  62. })
  63. }