mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-10 17:26:38 +08:00
refactor(config): render routes from zone domains
This commit is contained in:
@@ -10,8 +10,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/Rain-kl/Wavelet/internal/model"
|
||||
)
|
||||
|
||||
// NormalizeDomains lowercases, deduplicates, and validates proxy route domains.
|
||||
@@ -38,7 +36,8 @@ func NormalizeDomains(rawDomains []string) ([]string, error) {
|
||||
return normalized, nil
|
||||
}
|
||||
|
||||
// DecodeDomains parses stored domains JSON or falls back to a single domain value.
|
||||
// DecodeDomains parses legacy route domain fields for the explicit migration
|
||||
// command. Runtime consumers must read ZoneDomain bindings instead.
|
||||
func DecodeDomains(raw string, fallbackDomain string) ([]string, error) {
|
||||
text := strings.TrimSpace(raw)
|
||||
if text == "" {
|
||||
@@ -50,27 +49,3 @@ func DecodeDomains(raw string, fallbackDomain string) ([]string, error) {
|
||||
}
|
||||
return NormalizeDomains(domains)
|
||||
}
|
||||
|
||||
// ResolveSiteName returns the runtime site identifier for a proxy route.
|
||||
func ResolveSiteName(route *model.ProxyRoute, raw, primaryDomain string) string {
|
||||
siteName := strings.TrimSpace(raw)
|
||||
if siteName != "" {
|
||||
return siteName
|
||||
}
|
||||
if route != nil && strings.TrimSpace(route.SiteName) != "" {
|
||||
return strings.TrimSpace(route.SiteName)
|
||||
}
|
||||
return strings.TrimSpace(primaryDomain)
|
||||
}
|
||||
|
||||
// ResolveFromRoute decodes domains and resolves the site name for a stored route.
|
||||
func ResolveFromRoute(route *model.ProxyRoute) (siteName string, domains []string, err error) {
|
||||
if route == nil {
|
||||
return "", nil, errors.New("proxy route is nil")
|
||||
}
|
||||
domains, err = DecodeDomains(route.Domains, route.Domain)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
return ResolveSiteName(route, route.SiteName, domains[0]), domains, nil
|
||||
}
|
||||
|
||||
@@ -4,11 +4,9 @@
|
||||
package routeidentity
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/Rain-kl/Wavelet/internal/model"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDecodeDomainsNormalizesCaseAndOrder(t *testing.T) {
|
||||
@@ -16,23 +14,3 @@ func TestDecodeDomainsNormalizesCaseAndOrder(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, []string{"www.example.com", "example.com"}, domains)
|
||||
}
|
||||
|
||||
func TestResolveSiteNamePrefersExplicitValue(t *testing.T) {
|
||||
route := &model.ProxyRoute{SiteName: "stored-name", Domain: "example.com"}
|
||||
assert.Equal(t, "custom", ResolveSiteName(route, "custom", "example.com"))
|
||||
assert.Equal(t, "stored-name", ResolveSiteName(route, "", "example.com"))
|
||||
|
||||
routeWithoutSiteName := &model.ProxyRoute{Domain: "example.com"}
|
||||
assert.Equal(t, "example.com", ResolveSiteName(routeWithoutSiteName, "", "example.com"))
|
||||
}
|
||||
|
||||
func TestResolveFromRoute(t *testing.T) {
|
||||
route := &model.ProxyRoute{
|
||||
Domain: "Example.COM",
|
||||
Domains: `["example.com","www.example.com"]`,
|
||||
}
|
||||
siteName, domains, err := ResolveFromRoute(route)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "example.com", siteName)
|
||||
assert.Equal(t, []string{"example.com", "www.example.com"}, domains)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user