save.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package config
  2. import (
  3. "os"
  4. "github.com/0xJacky/Nginx-UI/internal/helper"
  5. "github.com/0xJacky/Nginx-UI/internal/nginx"
  6. "github.com/0xJacky/Nginx-UI/model"
  7. "github.com/0xJacky/Nginx-UI/query"
  8. "gorm.io/gen/field"
  9. )
  10. func Save(absPath string, content string, cfg *model.Config) (err error) {
  11. q := query.Config
  12. if cfg == nil {
  13. cfg, err = q.Assign(field.Attrs(&model.Config{
  14. Filepath: absPath,
  15. })).Where(q.Filepath.Eq(absPath)).FirstOrCreate()
  16. if err != nil {
  17. return
  18. }
  19. }
  20. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  21. return ErrPathIsNotUnderTheNginxConfDir
  22. }
  23. origContent, err := os.ReadFile(absPath)
  24. if err != nil {
  25. return
  26. }
  27. if content == string(origContent) {
  28. return
  29. }
  30. err = CheckAndCreateHistory(absPath, content)
  31. if err != nil {
  32. return
  33. }
  34. err = os.WriteFile(absPath, []byte(content), 0644)
  35. if err != nil {
  36. return
  37. }
  38. res := nginx.Control(nginx.Reload)
  39. if res.IsError() {
  40. return res.GetError()
  41. }
  42. err = SyncToRemoteServer(cfg)
  43. if err != nil {
  44. return
  45. }
  46. return
  47. }