save.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. "github.com/uozi-tech/cosy"
  10. "gorm.io/gen/field"
  11. )
  12. func Save(absPath string, content string, cfg *model.Config) (err error) {
  13. q := query.Config
  14. if cfg == nil {
  15. cfg, err = q.Assign(field.Attrs(&model.Config{
  16. Filepath: absPath,
  17. Name: filepath.Base(absPath),
  18. })).Where(q.Filepath.Eq(absPath)).FirstOrCreate()
  19. if err != nil {
  20. return
  21. }
  22. }
  23. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  24. return cosy.WrapErrorWithParams(ErrPathIsNotUnderTheNginxConfDir, absPath, nginx.GetConfPath())
  25. }
  26. err = CheckAndCreateHistory(absPath, content)
  27. if err != nil {
  28. return
  29. }
  30. err = os.WriteFile(absPath, []byte(content), 0644)
  31. if err != nil {
  32. return
  33. }
  34. res := nginx.Control(nginx.Reload)
  35. if res.IsError() {
  36. return res.GetError()
  37. }
  38. err = SyncToRemoteServer(cfg)
  39. if err != nil {
  40. return
  41. }
  42. return
  43. }