1
0

save.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. "github.com/uozi-tech/cosy"
  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. })).Where(q.Filepath.Eq(absPath)).FirstOrCreate()
  17. if err != nil {
  18. return
  19. }
  20. }
  21. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  22. return ErrPathIsNotUnderTheNginxConfDir
  23. }
  24. origContent, err := os.ReadFile(absPath)
  25. if err != nil {
  26. return
  27. }
  28. if content == string(origContent) {
  29. return
  30. }
  31. err = CheckAndCreateHistory(absPath, content)
  32. if err != nil {
  33. return
  34. }
  35. err = os.WriteFile(absPath, []byte(content), 0644)
  36. if err != nil {
  37. return
  38. }
  39. output, err := nginx.Reload()
  40. if err != nil {
  41. return
  42. }
  43. if nginx.GetLogLevel(output) >= nginx.Warn {
  44. return cosy.WrapErrorWithParams(ErrNginxReloadFailed, output)
  45. }
  46. err = SyncToRemoteServer(cfg)
  47. if err != nil {
  48. return
  49. }
  50. return
  51. }