Skip to content

Commit 0ceb6ea

Browse files
authored
Add okta sdk golang v6 (#2553)
1 parent 86b6fa3 commit 0ceb6ea

6 files changed

Lines changed: 145 additions & 3 deletions

File tree

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/cenkalti/backoff v2.2.1+incompatible
1010
github.com/cenkalti/backoff/v4 v4.3.0
1111
github.com/crewjam/saml v0.5.1
12-
github.com/go-jose/go-jose/v4 v4.1.1
12+
github.com/go-jose/go-jose/v4 v4.1.3
1313
github.com/google/uuid v1.6.0
1414
github.com/hashicorp/go-cleanhttp v0.5.2
1515
github.com/hashicorp/go-cty v1.5.0
@@ -29,6 +29,7 @@ require (
2929
github.com/okta/okta-governance-sdk-golang v1.0.1
3030
github.com/okta/okta-sdk-golang/v4 v4.1.2
3131
github.com/okta/okta-sdk-golang/v5 v5.0.6
32+
github.com/okta/okta-sdk-golang/v6 v6.0.0
3233
github.com/patrickmn/go-cache v2.1.0+incompatible
3334
github.com/stretchr/testify v1.11.1
3435
gopkg.in/dnaeon/go-vcr.v4 v4.0.5

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi
6060
github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
6161
github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
6262
github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
63-
github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI=
64-
github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA=
63+
github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=
64+
github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
6565
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
6666
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6767
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -218,6 +218,8 @@ github.com/okta/okta-sdk-golang/v4 v4.1.2 h1:gSycAYWGrvYeXBW8HakMZnNu/ptMuTvTQ/z
218218
github.com/okta/okta-sdk-golang/v4 v4.1.2/go.mod h1:01oiHDXvZQHlZo1Uw084VDYwXIqJe19z34b53PBZpUY=
219219
github.com/okta/okta-sdk-golang/v5 v5.0.6 h1:p7ptDMB1KxQ/7xSh+6FhMSybwl+ubTV4f1oL4N0Bu6U=
220220
github.com/okta/okta-sdk-golang/v5 v5.0.6/go.mod h1:T/vmECtJX33YPZSVD+sorebd8LLhe38Bi/VrFTjgVX0=
221+
github.com/okta/okta-sdk-golang/v6 v6.0.0 h1:6gS4r+Y1lYa4rcFYGLY+JaS7MMAUDaLTSzE34CY4PS4=
222+
github.com/okta/okta-sdk-golang/v6 v6.0.0/go.mod h1:4SyyJmsMn2Sd6W+F87VqXvB/wO90W7fpEDUCNR+tvFs=
221223
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
222224
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
223225
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=

okta/acctest/acctest.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/okta/okta-governance-sdk-golang/governance"
3030
v4SdkOkta "github.com/okta/okta-sdk-golang/v4/okta"
3131
v5SdkOkta "github.com/okta/okta-sdk-golang/v5/okta"
32+
v6SdkOkta "github.com/okta/okta-sdk-golang/v6/okta"
3233
"github.com/okta/terraform-provider-okta/okta/api"
3334
"github.com/okta/terraform-provider-okta/okta/config"
3435
"github.com/okta/terraform-provider-okta/okta/fwprovider"
@@ -667,6 +668,7 @@ type HttpClientHelper interface {
667668
}
668669

669670
type vcrIDaaSTestClient struct {
671+
sdkV6Client *v6SdkOkta.APIClient
670672
sdkV5Client *v5SdkOkta.APIClient
671673
sdkV3Client *v4SdkOkta.APIClient
672674
sdkV2Client *oktaSdk.Client
@@ -687,6 +689,7 @@ func NewVcrIDaaSClient(d *schema_sdk.ResourceData) *vcrIDaaSTestClient {
687689
// force all the API clients on a new config to use the same round tripper
688690
// for VCR recording/playback
689691
tripper := c.OktaIDaaSClient.OktaSDKClientV5().GetConfig().HTTPClient.Transport
692+
c.OktaIDaaSClient.OktaSDKClientV6().GetConfig().HTTPClient.Transport = tripper
690693
c.OktaIDaaSClient.OktaSDKClientV3().GetConfig().HTTPClient.Transport = tripper
691694
c.OktaIDaaSClient.OktaSDKClientV2().GetConfig().HttpClient.Transport = tripper
692695
re := c.OktaIDaaSClient.OktaSDKClientV2().CloneRequestExecutor()
@@ -696,6 +699,7 @@ func NewVcrIDaaSClient(d *schema_sdk.ResourceData) *vcrIDaaSTestClient {
696699
}
697700

698701
client := &vcrIDaaSTestClient{
702+
sdkV6Client: c.OktaIDaaSClient.OktaSDKClientV6(),
699703
sdkV5Client: c.OktaIDaaSClient.OktaSDKClientV5(),
700704
sdkV3Client: c.OktaIDaaSClient.OktaSDKClientV3(),
701705
sdkV2Client: c.OktaIDaaSClient.OktaSDKClientV2(),
@@ -738,6 +742,7 @@ func (c *vcrGovernanceTestClient) Transport() http.RoundTripper {
738742
func (c *vcrIDaaSTestClient) SetTransport(rt http.RoundTripper) {
739743
c.transport = rt
740744

745+
c.sdkV6Client.GetConfig().HTTPClient.Transport = rt
741746
c.sdkV5Client.GetConfig().HTTPClient.Transport = rt
742747
c.sdkV3Client.GetConfig().HTTPClient.Transport = rt
743748
c.sdkV2Client.GetConfig().HttpClient.Transport = rt
@@ -753,6 +758,10 @@ func (c *vcrGovernanceTestClient) SetTransport(rt http.RoundTripper) {
753758
c.oktaGovernanceSDKClient.GetConfig().HTTPClient.Transport = rt
754759
}
755760

761+
func (c *vcrIDaaSTestClient) OktaSDKClientV6() *v6SdkOkta.APIClient {
762+
return c.sdkV6Client
763+
}
764+
756765
func (c *vcrIDaaSTestClient) OktaSDKClientV5() *v5SdkOkta.APIClient {
757766
return c.sdkV5Client
758767
}

okta/api/api.go

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,116 @@ import (
1515
"github.com/hashicorp/go-retryablehttp"
1616
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
1717
v5okta "github.com/okta/okta-sdk-golang/v5/okta"
18+
v6okta "github.com/okta/okta-sdk-golang/v6/okta"
1819
"github.com/okta/terraform-provider-okta/okta/internal/apimutex"
1920
"github.com/okta/terraform-provider-okta/okta/internal/transport"
2021
"github.com/okta/terraform-provider-okta/okta/utils"
2122
"github.com/okta/terraform-provider-okta/okta/version"
2223
"github.com/okta/terraform-provider-okta/sdk"
2324
)
2425

26+
func getV6ClientConfig(c *OktaAPIConfig) (*v6okta.Configuration, *v6okta.APIClient, error) {
27+
var httpClient *http.Client
28+
if c.Backoff {
29+
retryableClient := retryablehttp.NewClient()
30+
retryableClient.RetryWaitMin = time.Second * time.Duration(c.MinWait)
31+
retryableClient.RetryWaitMax = time.Second * time.Duration(c.MaxWait)
32+
retryableClient.RetryMax = c.RetryCount
33+
retryableClient.Logger = c.Logger
34+
retryableClient.HTTPClient.Transport = logging.NewSubsystemLoggingHTTPTransport("Okta", retryableClient.HTTPClient.Transport)
35+
retryableClient.ErrorHandler = errHandler
36+
retryableClient.CheckRetry = checkRetry
37+
httpClient = retryableClient.StandardClient()
38+
c.Logger.Info(fmt.Sprintf("v6 running with backoff http client, wait min %d, wait max %d, retry max %d", retryableClient.RetryWaitMin, retryableClient.RetryWaitMax, retryableClient.RetryMax))
39+
} else {
40+
httpClient = cleanhttp.DefaultClient()
41+
httpClient.Transport = logging.NewSubsystemLoggingHTTPTransport("Okta", httpClient.Transport)
42+
c.Logger.Info("v6 running with default http client")
43+
}
44+
45+
// adds transport governor to retryable or default client
46+
if c.MaxAPICapacity > 0 && c.MaxAPICapacity < 100 {
47+
c.Logger.Info(fmt.Sprintf("v6 running with experimental max_api_capacity configuration at %d%%", c.MaxAPICapacity))
48+
apiMutex, err := apimutex.NewAPIMutex(c.MaxAPICapacity)
49+
if err != nil {
50+
return nil, nil, err
51+
}
52+
httpClient.Transport = transport.NewGovernedTransport(httpClient.Transport, apiMutex, c.Logger)
53+
}
54+
var orgURL string
55+
var disableHTTPS bool
56+
if c.HttpProxy != "" {
57+
orgURL = strings.TrimSuffix(c.HttpProxy, "/")
58+
disableHTTPS = strings.HasPrefix(orgURL, "http://")
59+
} else {
60+
orgURL = fmt.Sprintf("https://%v.%v", c.OrgName, c.Domain)
61+
}
62+
_, err := url.Parse(orgURL)
63+
if err != nil {
64+
return nil, nil, fmt.Errorf("malformed Okta API URL (org_name+base_url value, or http_proxy value): %+v", err)
65+
}
66+
67+
setters := []v6okta.ConfigSetter{
68+
v6okta.WithOrgUrl(orgURL),
69+
v6okta.WithCache(false),
70+
v6okta.WithHttpClientPtr(httpClient),
71+
v6okta.WithRateLimitMaxBackOff(int64(c.MaxWait)),
72+
v6okta.WithRequestTimeout(int64(c.RequestTimeout)),
73+
v6okta.WithRateLimitMaxRetries(int32(c.RetryCount)),
74+
v6okta.WithUserAgentExtra(version.OktaTerraformProviderUserAgent),
75+
}
76+
// v6 client also needs http proxy explicitly set
77+
if c.HttpProxy != "" {
78+
_url, err := url.Parse(c.HttpProxy)
79+
if err != nil {
80+
return nil, nil, err
81+
}
82+
host := v6okta.WithProxyHost(_url.Hostname())
83+
setters = append(setters, host)
84+
85+
sPort := _url.Port()
86+
if sPort == "" {
87+
sPort = "80"
88+
}
89+
iPort, err := strconv.Atoi(sPort)
90+
if err != nil {
91+
return nil, nil, err
92+
}
93+
port := v6okta.WithProxyPort(int32(iPort))
94+
setters = append(setters, port)
95+
}
96+
97+
switch {
98+
case c.AccessToken != "":
99+
setters = append(
100+
setters,
101+
v6okta.WithToken(c.AccessToken), v6okta.WithAuthorizationMode("Bearer"),
102+
)
103+
104+
case c.ApiToken != "":
105+
setters = append(
106+
setters,
107+
v6okta.WithToken(c.ApiToken), v6okta.WithAuthorizationMode("SSWS"),
108+
)
109+
110+
case c.PrivateKey != "":
111+
setters = append(
112+
setters,
113+
v6okta.WithPrivateKey(c.PrivateKey), v6okta.WithPrivateKeyId(c.PrivateKeyId), v6okta.WithScopes(c.Scopes), v6okta.WithClientId(c.ClientID), v6okta.WithAuthorizationMode("PrivateKey"),
114+
)
115+
}
116+
117+
if disableHTTPS {
118+
setters = append(setters, v6okta.WithTestingDisableHttpsCheck(true))
119+
}
120+
121+
config, err := v6okta.NewConfiguration(setters...)
122+
if err != nil {
123+
return nil, nil, err
124+
}
125+
return config, nil, nil
126+
}
127+
25128
func getV5ClientConfig(c *OktaAPIConfig) (*v5okta.Configuration, *v5okta.APIClient, error) {
26129
var httpClient *http.Client
27130
logLevel := strings.ToLower(os.Getenv("TF_LOG"))

okta/api/idaas.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
1717
"github.com/okta/okta-sdk-golang/v4/okta"
1818
v5okta "github.com/okta/okta-sdk-golang/v5/okta"
19+
v6okta "github.com/okta/okta-sdk-golang/v6/okta"
1920
"github.com/okta/terraform-provider-okta/okta/internal/apimutex"
2021
"github.com/okta/terraform-provider-okta/okta/internal/transport"
2122
"github.com/okta/terraform-provider-okta/okta/version"
@@ -32,6 +33,7 @@ type contextKey string
3233
const RetryOnStatusCodes contextKey = "retryOnStatusCodes"
3334

3435
type OktaIDaaSClient interface {
36+
OktaSDKClientV6() *v6okta.APIClient
3537
OktaSDKClientV5() *v5okta.APIClient
3638
OktaSDKClientV3() *okta.APIClient
3739
OktaSDKClientV2() *sdk.Client
@@ -58,12 +60,17 @@ type OktaAPIConfig struct {
5860
}
5961

6062
type iDaaSAPIClient struct {
63+
oktaSDKClientV6 *v6okta.APIClient
6164
oktaSDKClientV5 *v5okta.APIClient
6265
oktaSDKClientV3 *okta.APIClient
6366
oktaSDKClientV2 *sdk.Client
6467
oktaSDKSupplementClient *sdk.APISupplement
6568
}
6669

70+
func (c *iDaaSAPIClient) OktaSDKClientV6() *v6okta.APIClient {
71+
return c.oktaSDKClientV6
72+
}
73+
6774
func (c *iDaaSAPIClient) OktaSDKClientV5() *v5okta.APIClient {
6875
return c.oktaSDKClientV5
6976
}
@@ -81,6 +88,11 @@ func (c *iDaaSAPIClient) OktaSDKSupplementClient() *sdk.APISupplement {
8188
}
8289

8390
func NewOktaIDaaSAPIClient(c *OktaAPIConfig) (client OktaIDaaSClient, err error) {
91+
v6client, err := oktaV6SDKClient(c)
92+
if err != nil {
93+
return
94+
}
95+
8496
v5Client, err := oktaV5SDKClient(c)
8597
if err != nil {
8698
return
@@ -104,6 +116,7 @@ func NewOktaIDaaSAPIClient(c *OktaAPIConfig) (client OktaIDaaSClient, err error)
104116
}
105117

106118
client = &iDaaSAPIClient{
119+
oktaSDKClientV6: v6client,
107120
oktaSDKClientV5: v5Client,
108121
oktaSDKClientV3: v3Client,
109122
oktaSDKClientV2: v2Client,
@@ -113,6 +126,15 @@ func NewOktaIDaaSAPIClient(c *OktaAPIConfig) (client OktaIDaaSClient, err error)
113126
return
114127
}
115128

129+
func oktaV6SDKClient(c *OktaAPIConfig) (client *v6okta.APIClient, err error) {
130+
config, apiClient, err := getV6ClientConfig(c)
131+
if err != nil {
132+
return apiClient, err
133+
}
134+
client = v6okta.NewAPIClient(config)
135+
return client, nil
136+
}
137+
116138
func oktaV5SDKClient(c *OktaAPIConfig) (client *v5okta.APIClient, err error) {
117139
config, apiClient, err := getV5ClientConfig(c)
118140
if err != nil {

okta/services/idaas/idaas.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure"
1515
"github.com/okta/okta-sdk-golang/v4/okta"
1616
oktav5sdk "github.com/okta/okta-sdk-golang/v5/okta"
17+
v6okta "github.com/okta/okta-sdk-golang/v6/okta"
1718
"github.com/okta/terraform-provider-okta/okta/config"
1819
"github.com/okta/terraform-provider-okta/okta/internal/mutexkv"
1920
"github.com/okta/terraform-provider-okta/okta/resources"
@@ -56,6 +57,10 @@ func getOktaV5ClientFromMetadata(meta interface{}) *oktav5sdk.APIClient {
5657
return meta.(*config.Config).OktaIDaaSClient.OktaSDKClientV5()
5758
}
5859

60+
func getOktaV6ClientFromMetadata(meta interface{}) *v6okta.APIClient {
61+
return meta.(*config.Config).OktaIDaaSClient.OktaSDKClientV6()
62+
}
63+
5964
func getAPISupplementFromMetadata(meta interface{}) *sdk.APISupplement {
6065
return meta.(*config.Config).OktaIDaaSClient.OktaSDKSupplementClient()
6166
}

0 commit comments

Comments
 (0)