mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2026-06-19 07:36:59 +00:00
115 lines
2.6 KiB
Go
115 lines
2.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/0xJacky/Nginx-UI/internal/nginx"
|
|
"github.com/0xJacky/Nginx-UI/query"
|
|
)
|
|
|
|
// CleanupDatabaseRecords removes related database records after deletion
|
|
func CleanupDatabaseRecords(fullPath string, isDir bool) error {
|
|
q := query.Config
|
|
g := query.ChatGPTLog
|
|
b := query.ConfigBackup
|
|
|
|
if isDir {
|
|
// For directories, clean up all records under the directory
|
|
pathPattern := fullPath + "%"
|
|
|
|
// Delete ChatGPT logs
|
|
_, err := g.Where(g.Name.Like(pathPattern)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Delete config records
|
|
_, err = q.Where(q.Filepath.Like(pathPattern)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Delete backup records
|
|
_, err = b.Where(b.FilePath.Like(pathPattern)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
// For files, delete specific records
|
|
_, err := g.Where(g.Name.Eq(fullPath)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = q.Where(q.Filepath.Eq(fullPath)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = b.Where(b.FilePath.Eq(fullPath)).Delete()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// IsProtectedPath checks if the path is protected and should not be deleted
|
|
func IsProtectedPath(fullPath, name string) bool {
|
|
// Get nginx main config file path
|
|
nginxConfPath := nginx.GetConfEntryPath()
|
|
if fullPath == nginxConfPath {
|
|
return true
|
|
}
|
|
|
|
// Protected directory names
|
|
protectedDirs := []string{
|
|
"sites-enabled",
|
|
"sites-available",
|
|
"streams-enabled",
|
|
"streams-available",
|
|
"conf.d",
|
|
}
|
|
|
|
for _, protected := range protectedDirs {
|
|
if name == protected || strings.HasSuffix(fullPath, "/"+protected) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// ValidateDeletePath validates that the path is safe to delete
|
|
func ValidateDeletePath(fullPath string) error {
|
|
nginxConfPath := nginx.GetConfPath()
|
|
if !IsUnderNginxConfDir(fullPath, nginxConfPath) {
|
|
return ErrDeletePathNotUnderNginxConfDir
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// IsUnderNginxConfDir checks if the given path is under nginx config directory
|
|
func IsUnderNginxConfDir(path, nginxConfPath string) bool {
|
|
// Normalize paths
|
|
path = strings.TrimSuffix(path, "/")
|
|
nginxConfPath = strings.TrimSuffix(nginxConfPath, "/")
|
|
|
|
// Check if path starts with nginx config path
|
|
return strings.HasPrefix(path, nginxConfPath)
|
|
}
|
|
|
|
// CheckFileExists checks if file or directory exists and returns file info
|
|
func CheckFileExists(fullPath string) (os.FileInfo, error) {
|
|
stat, err := os.Stat(fullPath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return nil, ErrFileNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return stat, nil
|
|
}
|