Skip to content

Commit b3befec

Browse files
authored
Merge pull request #664 from openziti/proxy-support
Add API for controlling proxy use when connecting to controller. Fixes #663
2 parents 4c6f31e + e8e159f commit b3befec

File tree

15 files changed

+353
-308
lines changed

15 files changed

+353
-308
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
# Release notes 0.24.0
2+
3+
## Issues Fixed and Dependency Updates
4+
5+
* github.com/openziti/sdk-golang: [v0.23.45 -> v0.24.0](https://github.com/openziti/sdk-golang/compare/v0.23.45...v0.24.0)
6+
* [Issue #663](https://github.com/openziti/sdk-golang/issues/663) - Add API to allow controlling proxying connections to controllers and routers.
7+
8+
* github.com/go-resty/resty/v2: v2.15.3 -> v2.16.4
9+
* github.com/openziti/channel/v3: [v3.0.26 -> v3.0.27](https://github.com/openziti/channel/compare/v3.0.26...v3.0.27)
10+
* github.com/openziti/edge-api: [v0.26.36 -> v0.26.38](https://github.com/openziti/edge-api/compare/v0.26.36...v0.26.38)
11+
* github.com/openziti/transport/v2: [v2.0.159 -> v2.0.160](https://github.com/openziti/transport/compare/v2.0.159...v2.0.160)
12+
* golang.org/x/oauth2: v0.23.0 -> v0.25.0
13+
* google.golang.org/protobuf: v1.36.2 -> v1.36.3
14+
115
# Release notes 0.23.45
216

317
## Issues Fixed and Dependency Updates

edge-apis/clients.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,12 @@ func (self *BaseClient[A]) Authenticate(credentials Credentials, configTypesOver
123123
}
124124

125125
// initializeComponents assembles the lower level components necessary for the go-swagger/openapi facilities.
126-
func (self *BaseClient[A]) initializeComponents(apiUrls []*url.URL, caPool *x509.CertPool) {
127-
components := NewComponents()
128-
components.HttpTransport.TLSClientConfig.RootCAs = caPool
129-
components.CaPool = caPool
126+
func (self *BaseClient[A]) initializeComponents(config *ApiClientConfig) {
127+
components := NewComponentsWithConfig(&ComponentsConfig{
128+
Proxy: config.Proxy,
129+
})
130+
components.HttpTransport.TLSClientConfig.RootCAs = config.CaPool
131+
components.CaPool = config.CaPool
130132

131133
self.Components = *components
132134
}
@@ -205,6 +207,13 @@ type ManagementApiClient struct {
205207
BaseClient[ZitiEdgeManagement]
206208
}
207209

210+
type ApiClientConfig struct {
211+
ApiUrls []*url.URL
212+
CaPool *x509.CertPool
213+
TotpCallback func(chan string)
214+
Proxy func(r *http.Request) (*url.URL, error)
215+
}
216+
208217
// NewManagementApiClient will assemble an ManagementApiClient. The apiUrl should be the full URL
209218
// to the Edge Management API (e.g. `https://example.com/edge/management/v1`).
210219
//
@@ -217,16 +226,25 @@ type ManagementApiClient struct {
217226
// to obtain and verify the target controllers CAs. Tools should allow users to verify and accept new controllers
218227
// that have not been verified from an outside secret (such as an enrollment token).
219228
func NewManagementApiClient(apiUrls []*url.URL, caPool *x509.CertPool, totpCallback func(chan string)) *ManagementApiClient {
229+
return NewManagementApiClientWithConfig(&ApiClientConfig{
230+
ApiUrls: apiUrls,
231+
CaPool: caPool,
232+
TotpCallback: totpCallback,
233+
Proxy: http.ProxyFromEnvironment,
234+
})
235+
}
236+
237+
func NewManagementApiClientWithConfig(config *ApiClientConfig) *ManagementApiClient {
220238
ret := &ManagementApiClient{}
221239
ret.Schemes = rest_management_api_client.DefaultSchemes
222240
ret.ApiBinding = "edge-management"
223241
ret.ApiVersion = "v1"
224-
ret.ApiUrls = apiUrls
225-
ret.initializeComponents(apiUrls, caPool)
242+
ret.ApiUrls = config.ApiUrls
243+
ret.initializeComponents(config)
226244

227245
transportPool := NewClientTransportPoolRandom()
228246

229-
for _, apiUrl := range apiUrls {
247+
for _, apiUrl := range config.ApiUrls {
230248
newRuntime := NewRuntime(apiUrl, ret.Schemes, ret.Components.HttpClient)
231249
newRuntime.DefaultAuthentication = ret
232250
transportPool.Add(apiUrl, newRuntime)
@@ -235,7 +253,7 @@ func NewManagementApiClient(apiUrls []*url.URL, caPool *x509.CertPool, totpCallb
235253
newApi := rest_management_api_client.New(transportPool, nil)
236254
api := ZitiEdgeManagement{
237255
ZitiEdgeManagement: newApi,
238-
TotpCallback: totpCallback,
256+
TotpCallback: config.TotpCallback,
239257
ClientTransportPool: transportPool,
240258
}
241259

@@ -261,17 +279,26 @@ type ClientApiClient struct {
261279
// to obtain and verify the target controllers CAs. Tools should allow users to verify and accept new controllers
262280
// that have not been verified from an outside secret (such as an enrollment token).
263281
func NewClientApiClient(apiUrls []*url.URL, caPool *x509.CertPool, totpCallback func(chan string)) *ClientApiClient {
282+
return NewClientApiClientWithConfig(&ApiClientConfig{
283+
ApiUrls: apiUrls,
284+
CaPool: caPool,
285+
TotpCallback: totpCallback,
286+
Proxy: http.ProxyFromEnvironment,
287+
})
288+
}
289+
290+
func NewClientApiClientWithConfig(config *ApiClientConfig) *ClientApiClient {
264291
ret := &ClientApiClient{}
265292
ret.ApiBinding = "edge-client"
266293
ret.ApiVersion = "v1"
267294
ret.Schemes = rest_client_api_client.DefaultSchemes
268-
ret.ApiUrls = apiUrls
295+
ret.ApiUrls = config.ApiUrls
269296

270-
ret.initializeComponents(apiUrls, caPool)
297+
ret.initializeComponents(config)
271298

272299
transportPool := NewClientTransportPoolRandom()
273300

274-
for _, apiUrl := range apiUrls {
301+
for _, apiUrl := range config.ApiUrls {
275302
newRuntime := NewRuntime(apiUrl, ret.Schemes, ret.Components.HttpClient)
276303
newRuntime.DefaultAuthentication = ret
277304
transportPool.Add(apiUrl, newRuntime)
@@ -280,7 +307,7 @@ func NewClientApiClient(apiUrls []*url.URL, caPool *x509.CertPool, totpCallback
280307
newApi := rest_client_api_client.New(transportPool, nil)
281308
api := ZitiEdgeClient{
282309
ZitiEdgeClient: newApi,
283-
TotpCallback: totpCallback,
310+
TotpCallback: config.TotpCallback,
284311
ClientTransportPool: transportPool,
285312
}
286313
ret.API = &api

edge-apis/component.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/openziti/edge-api/rest_util"
66
"net/http"
77
"net/http/cookiejar"
8+
"net/url"
89
"time"
910
)
1011

@@ -17,12 +18,22 @@ type Components struct {
1718
CaPool *x509.CertPool
1819
}
1920

21+
type ComponentsConfig struct {
22+
Proxy func(*http.Request) (*url.URL, error)
23+
}
24+
2025
// NewComponents assembles a new set of components with reasonable production defaults.
2126
func NewComponents() *Components {
27+
return NewComponentsWithConfig(&ComponentsConfig{
28+
Proxy: http.ProxyFromEnvironment,
29+
})
30+
}
31+
32+
// NewComponentsWithConfig assembles a new set of components with reasonable production defaults.
33+
func NewComponentsWithConfig(cfg *ComponentsConfig) *Components {
2234
tlsClientConfig, _ := rest_util.NewTlsConfig()
2335

2436
httpTransport := &http.Transport{
25-
Proxy: http.ProxyFromEnvironment,
2637
TLSClientConfig: tlsClientConfig,
2738
ForceAttemptHTTP2: true,
2839
MaxIdleConns: 10,
@@ -31,6 +42,10 @@ func NewComponents() *Components {
3142
ExpectContinueTimeout: 1 * time.Second,
3243
}
3344

45+
if cfg != nil && cfg.Proxy != nil {
46+
httpTransport.Proxy = cfg.Proxy
47+
}
48+
3449
jar, _ := cookiejar.New(nil)
3550

3651
httpClient := &http.Client{

example/go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
github.com/openziti/foundation/v2 v2.0.56
1515
github.com/openziti/runzmd v1.0.33
1616
github.com/openziti/sdk-golang v0.0.0
17+
github.com/openziti/transport/v2 v2.0.160
1718
github.com/pkg/errors v0.9.1
1819
github.com/sirupsen/logrus v1.9.3
1920
github.com/spf13/cobra v1.8.1
@@ -52,7 +53,7 @@ require (
5253
github.com/go-openapi/strfmt v0.23.0 // indirect
5354
github.com/go-openapi/swag v0.23.0 // indirect
5455
github.com/go-openapi/validate v0.24.0 // indirect
55-
github.com/go-resty/resty/v2 v2.15.3 // indirect
56+
github.com/go-resty/resty/v2 v2.16.5 // indirect
5657
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
5758
github.com/golang/protobuf v1.5.4 // indirect
5859
github.com/gomarkdown/markdown v0.0.0-20230922112808-5421fefb8386 // indirect
@@ -78,12 +79,11 @@ require (
7879
github.com/muhlemmer/gu v0.3.1 // indirect
7980
github.com/oklog/ulid v1.3.1 // indirect
8081
github.com/opentracing/opentracing-go v1.2.0 // indirect
81-
github.com/openziti/channel/v3 v3.0.26 // indirect
82-
github.com/openziti/edge-api v0.26.36 // indirect
82+
github.com/openziti/channel/v3 v3.0.27 // indirect
83+
github.com/openziti/edge-api v0.26.38 // indirect
8384
github.com/openziti/identity v1.0.94 // indirect
8485
github.com/openziti/metrics v1.2.65 // indirect
8586
github.com/openziti/secretstream v0.1.28 // indirect
86-
github.com/openziti/transport/v2 v2.0.159 // indirect
8787
github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
8888
github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect
8989
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
@@ -118,12 +118,12 @@ require (
118118
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
119119
golang.org/x/image v0.18.0 // indirect
120120
golang.org/x/net v0.34.0 // indirect
121-
golang.org/x/oauth2 v0.23.0 // indirect
121+
golang.org/x/oauth2 v0.25.0 // indirect
122122
golang.org/x/sync v0.10.0 // indirect
123123
golang.org/x/sys v0.29.0 // indirect
124124
golang.org/x/term v0.28.0 // indirect
125125
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
126-
google.golang.org/protobuf v1.36.2 // indirect
126+
google.golang.org/protobuf v1.36.3 // indirect
127127
gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect
128128
gopkg.in/ini.v1 v1.67.0 // indirect
129129
gopkg.in/yaml.v3 v3.0.1 // indirect

example/go.sum

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
145145
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
146146
github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58=
147147
github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ=
148-
github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8=
149-
github.com/go-resty/resty/v2 v2.15.3/go.mod h1:0fHAoK7JoBy/Ch36N8VFeMsK7xQOHhvWaC3iOktwmIU=
148+
github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
149+
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
150150
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
151151
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
152152
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
@@ -359,10 +359,10 @@ github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak=
359359
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
360360
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
361361
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
362-
github.com/openziti/channel/v3 v3.0.26 h1:KVMOpqA8teIUcjG8u21pg8iI1YOjaY/SQyWWozWfXpA=
363-
github.com/openziti/channel/v3 v3.0.26/go.mod h1:o5/tWvfHgEzVBqdl8WBHFJNc7m8zHcCb3S5ymocDZEk=
364-
github.com/openziti/edge-api v0.26.36 h1:zy2DjmIz/B+WxPpIzhFOAxi/LhM/yeKa8s1Vz2h8cQk=
365-
github.com/openziti/edge-api v0.26.36/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
362+
github.com/openziti/channel/v3 v3.0.27 h1:Jx56fuxuvlkap+zNXIDPdfLW1mA6GjrnCxjbDqdBgco=
363+
github.com/openziti/channel/v3 v3.0.27/go.mod h1:vmLGw7KS1mhFDBoYal7O4dIcsm6TAVi9WqjI4TvAemQ=
364+
github.com/openziti/edge-api v0.26.38 h1:3xDWC5SFn3qUVR428TIBpRc2lrjVV7Gz0Rx4pQx0JSg=
365+
github.com/openziti/edge-api v0.26.38/go.mod h1:sYHVpm26Jr1u7VooNJzTb2b2nGSlmCHMnbGC8XfWSng=
366366
github.com/openziti/foundation/v2 v2.0.56 h1:YXqBmkrN0fYr3TqIlWZSZGluE2QpJxlA29Z6okZyQ5I=
367367
github.com/openziti/foundation/v2 v2.0.56/go.mod h1:f12R1pwEod348qONZr6esZgackX1ScLGDcEyPF2G5/w=
368368
github.com/openziti/identity v1.0.94 h1:nF4etu/5LmOlbT24lpSKq9p+90A9jeyLr5U23LemgD4=
@@ -373,8 +373,8 @@ github.com/openziti/runzmd v1.0.33 h1:tOyjRoUuVXIo1z1pNU32jALWkMmhzsSaDrhLtuOn3T
373373
github.com/openziti/runzmd v1.0.33/go.mod h1:8c/uvZR/XWXQNllTq6LuTpfKL2DTNxfI2X2wYhgRwik=
374374
github.com/openziti/secretstream v0.1.28 h1:D+a5TcvbY3i7HOIecoTL0Pq8HJGnJqS0XmUyO1ohObg=
375375
github.com/openziti/secretstream v0.1.28/go.mod h1:BESAWnpyIr9A+ditH4vk15ZVsnP8zdy6vGi8Qr1lgAg=
376-
github.com/openziti/transport/v2 v2.0.159 h1:Ol6vTrXWJdkfRLWYI2hjDTeH2Ji0cYC26UuPnBylALg=
377-
github.com/openziti/transport/v2 v2.0.159/go.mod h1:Hw4TIlDd97D5m8BrlxTZ3bqO01+hwddTDMSOOzz/4cs=
376+
github.com/openziti/transport/v2 v2.0.160 h1:bYBBj8gqZ8DCF6aCJThq2v89h5ILwqTVaFkyfjFmHpk=
377+
github.com/openziti/transport/v2 v2.0.160/go.mod h1:Hw4TIlDd97D5m8BrlxTZ3bqO01+hwddTDMSOOzz/4cs=
378378
github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c=
379379
github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM=
380380
github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 h1:mOvehYivJ4Aqu2CPe3D3lv8jhqOI9/1o0THxJHBE0qw=
@@ -628,8 +628,8 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ
628628
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
629629
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
630630
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
631-
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
632-
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
631+
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
632+
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
633633
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
634634
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
635635
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -899,8 +899,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
899899
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
900900
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
901901
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
902-
google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
903-
google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
902+
google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
903+
google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
904904
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
905905
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
906906
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

0 commit comments

Comments
 (0)