Files
nginx-ui/internal/config/save.go
2025-08-01 11:09:34 +08:00

53 lines
1.0 KiB
Go

package config
import (
"os"
"path/filepath"
"github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/internal/nginx"
"github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/query"
"github.com/uozi-tech/cosy"
"gorm.io/gen/field"
)
func Save(absPath string, content string, cfg *model.Config) (err error) {
q := query.Config
if cfg == nil {
cfg, err = q.Assign(field.Attrs(&model.Config{
Filepath: absPath,
Name: filepath.Base(absPath),
})).Where(q.Filepath.Eq(absPath)).FirstOrCreate()
if err != nil {
return
}
}
if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
return cosy.WrapErrorWithParams(ErrPathIsNotUnderTheNginxConfDir, absPath, nginx.GetConfPath())
}
err = CheckAndCreateHistory(absPath, content)
if err != nil {
return
}
err = os.WriteFile(absPath, []byte(content), 0644)
if err != nil {
return
}
res := nginx.Control(nginx.Reload)
if res.IsError() {
return res.GetError()
}
err = SyncToRemoteServer(cfg)
if err != nil {
return
}
return
}