115d42e0f0
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
73 lines
3.3 KiB
Go
73 lines
3.3 KiB
Go
package static
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// EntryPoint holds the entry point configuration.
|
|
type EntryPoint struct {
|
|
Address string `description:"Entry point address." json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty"`
|
|
Transport *EntryPointsTransport `description:"Configures communication between clients and Traefik." json:"transport,omitempty" toml:"transport,omitempty" yaml:"transport,omitempty"`
|
|
ProxyProtocol *ProxyProtocol `description:"Proxy-Protocol configuration." json:"proxyProtocol,omitempty" toml:"proxyProtocol,omitempty" yaml:"proxyProtocol,omitempty" label:"allowEmpty"`
|
|
ForwardedHeaders *ForwardedHeaders `description:"Trust client forwarding headers." json:"forwardedHeaders,omitempty" toml:"forwardedHeaders,omitempty" yaml:"forwardedHeaders,omitempty"`
|
|
}
|
|
|
|
// GetAddress strips any potential protocol part of the address field of the
|
|
// entry point, in order to return the actual address.
|
|
func (ep EntryPoint) GetAddress() string {
|
|
splitN := strings.SplitN(ep.Address, "/", 2)
|
|
return splitN[0]
|
|
}
|
|
|
|
// GetProtocol returns the protocol part of the address field of the entry point.
|
|
// If none is specified, it defaults to "tcp".
|
|
func (ep EntryPoint) GetProtocol() (string, error) {
|
|
splitN := strings.SplitN(ep.Address, "/", 2)
|
|
if len(splitN) < 2 {
|
|
return "tcp", nil
|
|
}
|
|
|
|
protocol := strings.ToLower(splitN[1])
|
|
if protocol == "tcp" || protocol == "udp" {
|
|
return protocol, nil
|
|
}
|
|
|
|
return "", fmt.Errorf("invalid protocol: %s", splitN[1])
|
|
}
|
|
|
|
// SetDefaults sets the default values.
|
|
func (ep *EntryPoint) SetDefaults() {
|
|
ep.Transport = &EntryPointsTransport{}
|
|
ep.Transport.SetDefaults()
|
|
ep.ForwardedHeaders = &ForwardedHeaders{}
|
|
}
|
|
|
|
// ForwardedHeaders Trust client forwarding headers.
|
|
type ForwardedHeaders struct {
|
|
Insecure bool `description:"Trust all forwarded headers." json:"insecure,omitempty" toml:"insecure,omitempty" yaml:"insecure,omitempty" export:"true"`
|
|
TrustedIPs []string `description:"Trust only forwarded headers from selected IPs." json:"trustedIPs,omitempty" toml:"trustedIPs,omitempty" yaml:"trustedIPs,omitempty"`
|
|
}
|
|
|
|
// ProxyProtocol contains Proxy-Protocol configuration.
|
|
type ProxyProtocol struct {
|
|
Insecure bool `description:"Trust all." json:"insecure,omitempty" toml:"insecure,omitempty" yaml:"insecure,omitempty" export:"true"`
|
|
TrustedIPs []string `description:"Trust only selected IPs." json:"trustedIPs,omitempty" toml:"trustedIPs,omitempty" yaml:"trustedIPs,omitempty"`
|
|
}
|
|
|
|
// EntryPoints holds the HTTP entry point list.
|
|
type EntryPoints map[string]*EntryPoint
|
|
|
|
// EntryPointsTransport configures communication between clients and Traefik.
|
|
type EntryPointsTransport struct {
|
|
LifeCycle *LifeCycle `description:"Timeouts influencing the server life cycle." json:"lifeCycle,omitempty" toml:"lifeCycle,omitempty" yaml:"lifeCycle,omitempty" export:"true"`
|
|
RespondingTimeouts *RespondingTimeouts `description:"Timeouts for incoming requests to the Traefik instance." json:"respondingTimeouts,omitempty" toml:"respondingTimeouts,omitempty" yaml:"respondingTimeouts,omitempty" export:"true"`
|
|
}
|
|
|
|
// SetDefaults sets the default values.
|
|
func (t *EntryPointsTransport) SetDefaults() {
|
|
t.LifeCycle = &LifeCycle{}
|
|
t.LifeCycle.SetDefaults()
|
|
t.RespondingTimeouts = &RespondingTimeouts{}
|
|
t.RespondingTimeouts.SetDefaults()
|
|
}
|