Skip to content

Commit 5457fa9

Browse files
committed
add new env to fix an issue when domainNameOverride has 3. in the end instead of two
1 parent 315d0e8 commit 5457fa9

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

oci/provider.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const (
6565
userAgentFormatter = "Oracle-GoSDK/%s (go/%s; %s/%s; terraform/%s; terraform-cli/%s) %s/%s"
6666
userAgentProviderNameEnv = "USER_AGENT_PROVIDER_NAME"
6767
domainNameOverrideEnv = "domain_name_override"
68+
hasCorrectDomainNameEnv = "has_correct_domain_name"
6869
clientHostOverridesEnv = "CLIENT_HOST_OVERRIDES"
6970
customCertLocationEnv = "custom_cert_location"
7071
acceptLocalCerts = "accept_local_certs"
@@ -610,8 +611,11 @@ func buildConfigureClientFn(configProvider oci_common.ConfigurationProvider, htt
610611
domainNameOverride := getEnvSettingWithBlankDefault(domainNameOverrideEnv)
611612

612613
if domainNameOverride != "" {
613-
re := regexp.MustCompile(`(.*?)[-\w]+\.\w+$`) // (capture: preamble) match: d0main-name . tld end-of-string
614-
client.Host = re.ReplaceAllString(client.Host, "${1}"+domainNameOverride) // non-match conveniently returns original string
614+
hasCorrectDomainName := getEnvSettingWithBlankDefault(hasCorrectDomainNameEnv)
615+
re := regexp.MustCompile(`(.*?)[-\w]+\.\w+$`) // (capture: preamble) match: d0main-name . tld end-of-string
616+
if hasCorrectDomainName == "" || !strings.HasSuffix(client.Host, hasCorrectDomainName) {
617+
client.Host = re.ReplaceAllString(client.Host, "${1}"+domainNameOverride) // non-match conveniently returns original string
618+
}
615619
}
616620

617621
customCertLoc := getEnvSettingWithBlankDefault(customCertLocationEnv)

oci/provider_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,12 @@ func TestUnitBuildClientConfigureFn_withDomainNameOverride(t *testing.T) {
695695
defer os.Unsetenv(domainNameOverrideEnv)
696696
}
697697

698+
if hadPreviousEnvVar {
699+
defer os.Setenv(hasCorrectDomainNameEnv, prevEnvVar)
700+
} else {
701+
defer os.Unsetenv(hasCorrectDomainNameEnv)
702+
}
703+
698704
os.Setenv(domainNameOverrideEnv, "0r4-c10ud.com")
699705
assert.Equal(t, "0r4-c10ud.com", getEnvSettingWithBlankDefault(domainNameOverrideEnv))
700706
configProvider := oci_common.DefaultConfigProvider()
@@ -732,6 +738,61 @@ func TestUnitBuildClientConfigureFn_withDomainNameOverride(t *testing.T) {
732738
assert.Equal(t, `DUMMY_ENDPOINT`, baseClient.Host)
733739
}
734740

741+
// ensure a custom domain that has already override with more than 2 dots can be targeted and expected http client settings are preserved
742+
func TestUnitBuildClientConfigureFn_withDomainNameOverrideAndCorrectDomainName(t *testing.T) {
743+
744+
prevEnvVar, hadPreviousEnvVar := os.LookupEnv(domainNameOverrideEnv)
745+
if hadPreviousEnvVar {
746+
defer os.Setenv(domainNameOverrideEnv, prevEnvVar)
747+
} else {
748+
defer os.Unsetenv(domainNameOverrideEnv)
749+
}
750+
751+
if hadPreviousEnvVar {
752+
defer os.Setenv(hasCorrectDomainNameEnv, prevEnvVar)
753+
} else {
754+
defer os.Unsetenv(hasCorrectDomainNameEnv)
755+
}
756+
757+
os.Setenv(domainNameOverrideEnv, "oc.0r4-c10ud.com")
758+
os.Setenv(hasCorrectDomainNameEnv, "oc.0r4-c10ud.com")
759+
assert.Equal(t, "oc.0r4-c10ud.com", getEnvSettingWithBlankDefault(domainNameOverrideEnv))
760+
assert.Equal(t, "oc.0r4-c10ud.com", getEnvSettingWithBlankDefault(hasCorrectDomainNameEnv))
761+
configProvider := oci_common.DefaultConfigProvider()
762+
httpClient := buildHttpClient()
763+
configureClientFn, err := buildConfigureClientFn(configProvider, httpClient)
764+
assert.NoError(t, err)
765+
766+
baseClient := &oci_common.BaseClient{}
767+
baseClient.Host = "https://svc.region.oc.0r4-c10ud.com"
768+
err = configureClientFn(baseClient)
769+
assert.NoError(t, err)
770+
771+
// verify transport settings are unchanged
772+
tr := httpClient.Transport.(*http.Transport)
773+
assert.NotNil(t, tr.TLSClientConfig)
774+
assert.Equal(t, uint16(tls.VersionTLS12), tr.TLSClientConfig.MinVersion, "expected min tls 1.2")
775+
assert.NotNil(t, tr.Proxy, "expected http.ProxyFromEnvironment fn")
776+
assert.Nil(t, tr.TLSClientConfig.RootCAs)
777+
778+
// verify url has expected domain
779+
assert.Equal(t, `https://svc.region.oc.0r4-c10ud.com`, baseClient.Host)
780+
781+
// verify subdomains are preserved
782+
baseClient = &oci_common.BaseClient{}
783+
baseClient.Host = "avnzdivwaadfa-management.kms.us-phoenix-1.oraclecloud.com"
784+
err = configureClientFn(baseClient)
785+
assert.NoError(t, err)
786+
assert.Equal(t, `avnzdivwaadfa-management.kms.us-phoenix-1.oc.0r4-c10ud.com`, baseClient.Host)
787+
788+
// verify non-match preserves original url
789+
baseClient = &oci_common.BaseClient{}
790+
baseClient.Host = "DUMMY_ENDPOINT"
791+
err = configureClientFn(baseClient)
792+
assert.NoError(t, err)
793+
assert.Equal(t, `DUMMY_ENDPOINT`, baseClient.Host)
794+
}
795+
735796
// ensure use_obo_token env var results in `opc-obo-token` http header injection
736797
func TestUnitBuildClientConfigureFn_interceptor(t *testing.T) {
737798

0 commit comments

Comments
 (0)