save.go 968 B

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