@@ -71,6 +71,8 @@ func NewClientApiClientWithConfig(config *ApiClientConfig) *ClientApiClient {
7171 ret .API = & api
7272 ret .AuthEnabledApi = & api
7373
74+ api .doOnceCacheVersionInfo ()
75+
7476 return ret
7577}
7678
@@ -115,26 +117,16 @@ func (self *ZitiEdgeClient) ListControllers() (*rest_model.ControllersList, erro
115117}
116118
117119func (self * ZitiEdgeClient ) Authenticate (credentials Credentials , configTypesOverrides []string , httpClient * http.Client ) (ApiSession , error ) {
118- self .versionOnce .Do (func () {
119- if self .useOidcExplicitlySet {
120- return
121- }
122-
123- if self .oidcDynamicallyEnabled {
124- versionParams := clientInfo .NewListVersionParams ()
120+ self .doOnceCacheVersionInfo ()
121+ useOidc := false
125122
126- versionResp , _ := self .Informational .ListVersion (versionParams )
127-
128- if versionResp != nil {
129- self .versionInfo = versionResp .Payload .Data
130- self .useOidc = stringz .Contains (self .versionInfo .Capabilities , string (rest_model .CapabilitiesOIDCAUTH ))
131- }
132- } else {
133- self .useOidc = false
134- }
135- })
123+ if self .useOidcExplicitlySet {
124+ useOidc = self .useOidc
125+ } else if self .oidcDynamicallyEnabled {
126+ useOidc = self .ControllerSupportsOidc ()
127+ }
136128
137- if self . useOidc {
129+ if useOidc {
138130 return self .oidcAuth (credentials , configTypesOverrides , httpClient )
139131 }
140132
@@ -216,3 +208,35 @@ func (self *ZitiEdgeClient) RefreshApiSession(apiSession ApiSession, httpClient
216208func (self * ZitiEdgeClient ) ExchangeTokens (curTokens * oidc.Tokens [* oidc.IDTokenClaims ], httpClient * http.Client ) (* oidc.Tokens [* oidc.IDTokenClaims ], error ) {
217209 return exchangeTokens (self .ClientTransportPool , curTokens , httpClient )
218210}
211+
212+ func (self * ZitiEdgeClient ) ControllerSupportsHa () bool {
213+ self .doOnceCacheVersionInfo ()
214+
215+ if self .versionInfo != nil && self .versionInfo .Capabilities != nil {
216+ return stringz .Contains (self .versionInfo .Capabilities , string (rest_model .CapabilitiesHACONTROLLER ))
217+ }
218+
219+ return false
220+ }
221+
222+ func (self * ZitiEdgeClient ) ControllerSupportsOidc () bool {
223+ self .doOnceCacheVersionInfo ()
224+
225+ if self .versionInfo != nil && self .versionInfo .Capabilities != nil {
226+ return stringz .Contains (self .versionInfo .Capabilities , string (rest_model .CapabilitiesOIDCAUTH ))
227+ }
228+
229+ return false
230+ }
231+
232+ func (self * ZitiEdgeClient ) doOnceCacheVersionInfo () {
233+ self .versionOnce .Do (func () {
234+ versionParams := clientInfo .NewListVersionParams ()
235+
236+ versionResp , _ := self .Informational .ListVersion (versionParams )
237+
238+ if versionResp != nil {
239+ self .versionInfo = versionResp .Payload .Data
240+ }
241+ })
242+ }
0 commit comments