Conditionally remove the lan block

This commit is contained in:
Sparky
2025-11-08 17:21:11 +00:00
parent 6ee9472b7f
commit 5b5f13ebe7

View File

@@ -31,6 +31,7 @@ type Config struct {
// Template for generating Caddy configuration // Template for generating Caddy configuration
const caddyTemplate = `{{- range $service := .Services -}} const caddyTemplate = `{{- range $service := .Services -}}
{{ join $service.Domains " " }} { {{ join $service.Domains " " }} {
{{- if $service.IPRange }}
@lan { @lan {
remote_ip {{ $service.IPRange }} remote_ip {{ $service.IPRange }}
} }
@@ -40,6 +41,11 @@ const caddyTemplate = `{{- range $service := .Services -}}
handle { handle {
respond "Njet Molotoff" 403 respond "Njet Molotoff" 403
} }
{{- else }}
handle {
reverse_proxy {{ $service.Backend }}
}
{{- end }}
} }
{{ end }}` {{ end }}`
@@ -111,15 +117,12 @@ func loadConfig(filename string) (*Config, error) {
} }
func validateConfig(config *Config) error { func validateConfig(config *Config) error {
// Validate IP ranges are defined
for filename, fileConfig := range config.Files { for filename, fileConfig := range config.Files {
for i, service := range fileConfig.Services { for i, service := range fileConfig.Services {
if service.IPRange == "" { if service.IPRange != "" {
return fmt.Errorf("service %d in file %s has no IP range specified", i+1, filename) if _, exists := config.IPRanges[service.IPRange]; !exists {
} return fmt.Errorf("IP range '%s' not defined for service %d in file %s", service.IPRange, i+1, filename)
}
if _, exists := config.IPRanges[service.IPRange]; !exists {
return fmt.Errorf("IP range '%s' not defined for service %d in file %s", service.IPRange, i+1, filename)
} }
if len(service.Domains) == 0 { if len(service.Domains) == 0 {
@@ -249,10 +252,15 @@ func generateCaddyContent(fileConfig FileConfig, ipRanges map[string]string) (st
logger.Trace("Resolving service %d: domains=%v, backend=%s, ip_range=%s", logger.Trace("Resolving service %d: domains=%v, backend=%s, ip_range=%s",
i, service.Domains, service.Backend, service.IPRange) i, service.Domains, service.Backend, service.IPRange)
resolvedIPRange := ""
if service.IPRange != "" {
resolvedIPRange = ipRanges[service.IPRange]
}
templateData.Services[i] = ServiceConfig{ templateData.Services[i] = ServiceConfig{
Domains: service.Domains, Domains: service.Domains,
Backend: service.Backend, Backend: service.Backend,
IPRange: ipRanges[service.IPRange], IPRange: resolvedIPRange,
} }
} }