Skip to content

Commit 93e62eb

Browse files
committed
SDK-88: Spectrum - Add address family selection; Add toggle for Argo Smart Routing
1 parent 5b567e3 commit 93e62eb

File tree

2 files changed

+82
-29
lines changed

2 files changed

+82
-29
lines changed

spectrum.go

Lines changed: 80 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,21 @@ func (p *ProxyProtocol) UnmarshalJSON(data []byte) error {
3939

4040
// SpectrumApplication defines a single Spectrum Application.
4141
type SpectrumApplication struct {
42-
ID string `json:"id,omitempty"`
43-
Protocol string `json:"protocol,omitempty"`
44-
IPv4 bool `json:"ipv4,omitempty"`
45-
DNS SpectrumApplicationDNS `json:"dns,omitempty"`
46-
OriginDirect []string `json:"origin_direct,omitempty"`
47-
OriginPort int `json:"origin_port,omitempty"`
48-
OriginDNS *SpectrumApplicationOriginDNS `json:"origin_dns,omitempty"`
49-
IPFirewall bool `json:"ip_firewall,omitempty"`
50-
ProxyProtocol ProxyProtocol `json:"proxy_protocol,omitempty"`
51-
TLS string `json:"tls,omitempty"`
52-
TrafficType string `json:"traffic_type,omitempty"`
53-
EdgeIPs *EdgeIPs `json:"edge_ips,omitempty"`
54-
CreatedOn *time.Time `json:"created_on,omitempty"`
55-
ModifiedOn *time.Time `json:"modified_on,omitempty"`
42+
ID string `json:"id,omitempty"`
43+
Protocol string `json:"protocol,omitempty"`
44+
IPv4 bool `json:"ipv4,omitempty"`
45+
DNS SpectrumApplicationDNS `json:"dns,omitempty"`
46+
OriginDirect []string `json:"origin_direct,omitempty"`
47+
OriginPort int `json:"origin_port,omitempty"`
48+
OriginDNS *SpectrumApplicationOriginDNS `json:"origin_dns,omitempty"`
49+
IPFirewall bool `json:"ip_firewall,omitempty"`
50+
ProxyProtocol ProxyProtocol `json:"proxy_protocol,omitempty"`
51+
TLS string `json:"tls,omitempty"`
52+
TrafficType string `json:"traffic_type,omitempty"`
53+
EdgeIPs *SpectrumApplicationEdgeIPs `json:"edge_ips,omitempty"`
54+
ArgoSmartRouting bool `json:"argo_smart_routing,omitempty"`
55+
CreatedOn *time.Time `json:"created_on,omitempty"`
56+
ModifiedOn *time.Time `json:"modified_on,omitempty"`
5657
}
5758

5859
// UnmarshalJSON handles setting the `ProxyProtocol` field based on the value of the deprecated `spp` field.
@@ -105,43 +106,95 @@ type SpectrumApplicationsDetailResponse struct {
105106
Result []SpectrumApplication `json:"result"`
106107
}
107108

108-
// EdgeIPs represents configuration for Bring-Your-Own-IP
109+
// SpectrumApplicationEdgeIPs represents configuration for Bring-Your-Own-IP
109110
// https://developers.cloudflare.com/spectrum/getting-started/byoip/
110-
type EdgeIPs struct {
111-
Type EdgeType `json:"type"`
112-
IPs []net.IP `json:"ips,omitempty"`
111+
type SpectrumApplicationEdgeIPs struct {
112+
Type SpectrumApplicationEdgeType `json:"type"`
113+
Connectivity *SpectrumApplicationConnectivity `json:"connectivity,omitempty"`
114+
IPs []net.IP `json:"ips,omitempty"`
113115
}
114116

115-
// EdgeType for possible Edge configurations
116-
type EdgeType string
117+
// SpectrumApplicationEdgeType for possible Edge configurations
118+
type SpectrumApplicationEdgeType string
117119

118120
const (
119-
// STATIC IP config
120-
STATIC EdgeType = "static"
121+
// SpectrumEdgeTypeDynamic IP config
122+
SpectrumEdgeTypeDynamic SpectrumApplicationEdgeType = "dynamic"
123+
// SpectrumEdgeTypeStatic IP config
124+
SpectrumEdgeTypeStatic SpectrumApplicationEdgeType = "static"
121125
)
122126

123-
// UnmarshalJSON function for EdgeType enum
124-
func (t *EdgeType) UnmarshalJSON(b []byte) error {
127+
// UnmarshalJSON function for SpectrumApplicationEdgeType enum
128+
func (t *SpectrumApplicationEdgeType) UnmarshalJSON(b []byte) error {
125129
var s string
126130
err := json.Unmarshal(b, &s)
127131
if err != nil {
128132
return err
129133
}
130134

131-
newEdgeType := EdgeType(strings.ToLower(s))
135+
newEdgeType := SpectrumApplicationEdgeType(strings.ToLower(s))
132136
switch newEdgeType {
133-
case STATIC:
137+
case SpectrumEdgeTypeDynamic, SpectrumEdgeTypeStatic:
134138
*t = newEdgeType
135139
return nil
136140
}
137141

138142
return errors.New(errUnmarshalError)
139143
}
140144

141-
func (t EdgeType) String() string {
145+
func (t SpectrumApplicationEdgeType) String() string {
142146
return string(t)
143147
}
144148

149+
// SpectrumApplicationConnectivity specifies IP address type on the edge configuration
150+
type SpectrumApplicationConnectivity string
151+
152+
const (
153+
// SpectrumConnectivityAll specifies IPv4/6 edge IP
154+
SpectrumConnectivityAll SpectrumApplicationConnectivity = "all"
155+
// SpectrumConnectivityIPv4 specifies IPv4 edge IP
156+
SpectrumConnectivityIPv4 SpectrumApplicationConnectivity = "ipv4"
157+
// SpectrumConnectivityIPv6 specifies IPv6 edge IP
158+
SpectrumConnectivityIPv6 SpectrumApplicationConnectivity = "ipv6"
159+
// SpectrumConnectivityStatic specifies static edge IP configuration
160+
SpectrumConnectivityStatic SpectrumApplicationConnectivity = "static"
161+
)
162+
163+
func (c SpectrumApplicationConnectivity) String() string {
164+
return string(c)
165+
}
166+
167+
// UnmarshalJSON function for SpectrumApplicationConnectivity enum
168+
func (c *SpectrumApplicationConnectivity) UnmarshalJSON(b []byte) error {
169+
var s string
170+
err := json.Unmarshal(b, &s)
171+
if err != nil {
172+
return err
173+
}
174+
175+
newConnectivity := SpectrumApplicationConnectivity(strings.ToLower(s))
176+
if newConnectivity.Dynamic() {
177+
*c = newConnectivity
178+
return nil
179+
}
180+
181+
return errors.New(errUnmarshalError)
182+
}
183+
184+
// Dynamic checks if address family is specified as dynamic config
185+
func (c SpectrumApplicationConnectivity) Dynamic() bool {
186+
switch c {
187+
case SpectrumConnectivityAll, SpectrumConnectivityIPv4, SpectrumConnectivityIPv6:
188+
return true
189+
}
190+
return false
191+
}
192+
193+
// Static checks if address family is specified as static config
194+
func (c SpectrumApplicationConnectivity) Static() bool {
195+
return c == SpectrumConnectivityStatic
196+
}
197+
145198
// SpectrumApplications fetches all of the Spectrum applications for a zone.
146199
//
147200
// API reference: https://developers.cloudflare.com/spectrum/api-reference/#list-spectrum-applications

spectrum_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,8 @@ func TestSpectrumApplicationEdgeIPs(t *testing.T) {
457457
IPFirewall: true,
458458
ProxyProtocol: "off",
459459
TLS: "off",
460-
EdgeIPs: &EdgeIPs{
461-
Type: STATIC,
460+
EdgeIPs: &SpectrumApplicationEdgeIPs{
461+
Type: SpectrumEdgeTypeStatic,
462462
IPs: []net.IP{net.ParseIP("192.0.2.1"), net.ParseIP("2001:db8::1")},
463463
},
464464
}

0 commit comments

Comments
 (0)