1
0

list.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package site
  2. import (
  3. "context"
  4. "os"
  5. "github.com/0xJacky/Nginx-UI/internal/config"
  6. "github.com/0xJacky/Nginx-UI/internal/upstream"
  7. "github.com/0xJacky/Nginx-UI/model"
  8. )
  9. // ListOptions represents the options for listing sites
  10. type ListOptions struct {
  11. Search string
  12. Name string
  13. Status string
  14. OrderBy string
  15. Sort string
  16. NamespaceID uint64
  17. }
  18. // GetSiteConfigs retrieves and processes site configurations with database integration
  19. func GetSiteConfigs(ctx context.Context, options *ListOptions, sites []*model.Site) ([]config.Config, error) {
  20. // Convert to generic options
  21. genericOptions := &config.GenericListOptions{
  22. Search: options.Search,
  23. Name: options.Name,
  24. Status: options.Status,
  25. OrderBy: options.OrderBy,
  26. Sort: options.Sort,
  27. NamespaceID: options.NamespaceID,
  28. IncludeDirs: false, // Filter out directories for site configurations
  29. }
  30. // Create processor with site-specific logic
  31. processor := &config.GenericConfigProcessor{
  32. Paths: config.ConfigPaths{
  33. AvailableDir: "sites-available",
  34. EnabledDir: "sites-enabled",
  35. },
  36. StatusMapBuilder: config.SiteStatusMapBuilder(MaintenanceSuffix),
  37. ConfigBuilder: buildConfig,
  38. FilterMatcher: config.DefaultFilterMatcher,
  39. }
  40. return config.GetGenericConfigs(ctx, genericOptions, sites, processor)
  41. }
  42. // buildConfig creates a config.Config from file information with site-specific data
  43. func buildConfig(fileName string, fileInfo os.FileInfo, status config.ConfigStatus, namespaceID uint64, namespace *model.Namespace) config.Config {
  44. indexedSite := GetIndexedSite(fileName)
  45. // Convert proxy targets, expanding upstream references
  46. var proxyTargets []config.ProxyTarget
  47. upstreamService := upstream.GetUpstreamService()
  48. for _, target := range indexedSite.ProxyTargets {
  49. // Check if target.Host is an upstream name
  50. if upstreamDef, exists := upstreamService.GetUpstreamDefinition(target.Host); exists {
  51. // Replace with upstream servers
  52. for _, server := range upstreamDef.Servers {
  53. proxyTargets = append(proxyTargets, config.ProxyTarget{
  54. Host: server.Host,
  55. Port: server.Port,
  56. Type: server.Type,
  57. })
  58. }
  59. } else {
  60. // Regular proxy target
  61. proxyTargets = append(proxyTargets, config.ProxyTarget{
  62. Host: target.Host,
  63. Port: target.Port,
  64. Type: target.Type,
  65. })
  66. }
  67. }
  68. return config.Config{
  69. Name: fileName,
  70. ModifiedAt: fileInfo.ModTime(),
  71. Size: fileInfo.Size(),
  72. IsDir: fileInfo.IsDir(),
  73. Status: status,
  74. NamespaceID: namespaceID,
  75. Namespace: namespace,
  76. Urls: indexedSite.Urls,
  77. ProxyTargets: proxyTargets,
  78. }
  79. }