nginx-ui/internal/config/save.go
2025-04-20 22:02:29 +08:00

63 lines
1.1 KiB
Go

package config
import (
"os"
"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,
})).Where(q.Filepath.Eq(absPath)).FirstOrCreate()
if err != nil {
return
}
}
if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
return ErrPathIsNotUnderTheNginxConfDir
}
origContent, err := os.ReadFile(absPath)
if err != nil {
return
}
if content == string(origContent) {
return
}
err = CheckAndCreateHistory(absPath, content)
if err != nil {
return
}
err = os.WriteFile(absPath, []byte(content), 0644)
if err != nil {
return
}
output, err := nginx.Reload()
if err != nil {
return
}
if nginx.GetLogLevel(output) >= nginx.Warn {
return cosy.WrapErrorWithParams(ErrNginxReloadFailed, output)
}
err = SyncToRemoteServer(cfg)
if err != nil {
return
}
return
}