mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 15:19:58 +00:00

Adds an OriginDialerService that takes over the roles of both DialUDP and DialTCP towards the origin. This provides the possibility to leverage dialer "middleware" to inject virtual origins, such as the DNS resolver service. DNS Resolver service also gains access to the DialTCP operation to service TCP DNS requests. Minor refactoring includes changes to remove the needs previously provided by the warp-routing configuration. This configuration cannot be disabled by cloudflared so many of the references have been adjusted or removed. Closes TUN-9470
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package orchestration
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/cloudflare/cloudflared/config"
|
|
"github.com/cloudflare/cloudflared/ingress"
|
|
)
|
|
|
|
type newRemoteConfig struct {
|
|
ingress.RemoteConfig
|
|
// Add more fields when we support other settings in tunnel orchestration
|
|
}
|
|
|
|
type newLocalConfig struct {
|
|
RemoteConfig ingress.RemoteConfig
|
|
ConfigurationFlags map[string]string `json:"__configuration_flags,omitempty"`
|
|
}
|
|
|
|
// Config is the original config as read and parsed by cloudflared.
|
|
type Config struct {
|
|
Ingress *ingress.Ingress
|
|
WarpRouting ingress.WarpRoutingConfig
|
|
OriginDialerService *ingress.OriginDialerService
|
|
|
|
// Extra settings used to configure this instance but that are not eligible for remotely management
|
|
// ie. (--protocol, --loglevel, ...)
|
|
ConfigurationFlags map[string]string
|
|
}
|
|
|
|
func (rc *newLocalConfig) MarshalJSON() ([]byte, error) {
|
|
var r = struct {
|
|
ConfigurationFlags map[string]string `json:"__configuration_flags,omitempty"`
|
|
ingress.RemoteConfigJSON
|
|
}{
|
|
ConfigurationFlags: rc.ConfigurationFlags,
|
|
RemoteConfigJSON: ingress.RemoteConfigJSON{
|
|
// UI doesn't support top level configs, so we reconcile to individual ingress configs.
|
|
GlobalOriginRequest: nil,
|
|
IngressRules: convertToUnvalidatedIngressRules(rc.RemoteConfig.Ingress),
|
|
WarpRouting: rc.RemoteConfig.WarpRouting.RawConfig(),
|
|
},
|
|
}
|
|
|
|
return json.Marshal(r)
|
|
}
|
|
|
|
func convertToUnvalidatedIngressRules(i ingress.Ingress) []config.UnvalidatedIngressRule {
|
|
result := make([]config.UnvalidatedIngressRule, 0)
|
|
for _, rule := range i.Rules {
|
|
var path string
|
|
if rule.Path != nil {
|
|
path = rule.Path.String()
|
|
}
|
|
|
|
newRule := config.UnvalidatedIngressRule{
|
|
Hostname: rule.Hostname,
|
|
Path: path,
|
|
Service: rule.Service.String(),
|
|
OriginRequest: ingress.ConvertToRawOriginConfig(rule.Config),
|
|
}
|
|
|
|
result = append(result, newRule)
|
|
}
|
|
|
|
return result
|
|
}
|