list.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package site
  2. import (
  3. "context"
  4. "os"
  5. "github.com/0xJacky/Nginx-UI/internal/config"
  6. "github.com/0xJacky/Nginx-UI/model"
  7. )
  8. // ListOptions represents the options for listing sites
  9. type ListOptions struct {
  10. Search string
  11. Status string
  12. OrderBy string
  13. Sort string
  14. EnvGroupID uint64
  15. }
  16. // GetSiteConfigs retrieves and processes site configurations with database integration
  17. func GetSiteConfigs(ctx context.Context, options *ListOptions, sites []*model.Site) ([]config.Config, error) {
  18. // Convert to generic options
  19. genericOptions := &config.GenericListOptions{
  20. Search: options.Search,
  21. Status: options.Status,
  22. OrderBy: options.OrderBy,
  23. Sort: options.Sort,
  24. EnvGroupID: options.EnvGroupID,
  25. IncludeDirs: false, // Filter out directories for site configurations
  26. }
  27. // Create processor with site-specific logic
  28. processor := &config.GenericConfigProcessor{
  29. Paths: config.ConfigPaths{
  30. AvailableDir: "sites-available",
  31. EnabledDir: "sites-enabled",
  32. },
  33. StatusMapBuilder: config.SiteStatusMapBuilder(MaintenanceSuffix),
  34. ConfigBuilder: buildConfig,
  35. FilterMatcher: config.DefaultFilterMatcher,
  36. }
  37. return config.GetGenericConfigs(ctx, genericOptions, sites, processor)
  38. }
  39. // buildConfig creates a config.Config from file information with site-specific data
  40. func buildConfig(fileName string, fileInfo os.FileInfo, status config.ConfigStatus, envGroupID uint64, envGroup *model.EnvGroup) config.Config {
  41. indexedSite := GetIndexedSite(fileName)
  42. // Convert proxy targets
  43. proxyTargets := make([]config.ProxyTarget, len(indexedSite.ProxyTargets))
  44. for i, target := range indexedSite.ProxyTargets {
  45. proxyTargets[i] = config.ProxyTarget{
  46. Host: target.Host,
  47. Port: target.Port,
  48. Type: target.Type,
  49. }
  50. }
  51. return config.Config{
  52. Name: fileName,
  53. ModifiedAt: fileInfo.ModTime(),
  54. Size: fileInfo.Size(),
  55. IsDir: fileInfo.IsDir(),
  56. Status: status,
  57. EnvGroupID: envGroupID,
  58. EnvGroup: envGroup,
  59. Urls: indexedSite.Urls,
  60. ProxyTargets: proxyTargets,
  61. }
  62. }