Skip to content

Commit

Permalink
Merge pull request #439 from okta/support-thread-headers
Browse files Browse the repository at this point in the history
Add all Headers form HttpHeaderHolder
  • Loading branch information
bdemers authored Jul 23, 2020
2 parents 3a18638 + 9a6697a commit aa3fc87
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 4 deletions.
11 changes: 7 additions & 4 deletions impl/src/main/java/com/okta/sdk/impl/ds/DefaultDataStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@
import static com.okta.commons.http.HttpHeaders.OKTA_USER_AGENT;
import static com.okta.commons.http.HttpHeaders.USER_AGENT;
import static com.okta.commons.http.HttpHeaders.OKTA_AGENT;
import static com.okta.commons.http.HttpHeaders.OKTA_CLIENT_REQUEST_ID;

/**
* @since 0.5.0
Expand Down Expand Up @@ -498,9 +497,13 @@ protected void applyDefaultRequestHeaders(Request request) {
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
}

List<String> clientRequestId;
if (headerMap != null && (clientRequestId = headerMap.get(OKTA_CLIENT_REQUEST_ID)) != null) {
request.getHeaders().put(OKTA_CLIENT_REQUEST_ID, clientRequestId);
// all other headers
if (headerMap != null) {
headerMap.entrySet().stream()
// filter use agent, there is logic to add that above
.filter(entry -> !OKTA_AGENT.equals(entry.getKey()))
.filter(entry -> !USER_AGENT.equals(entry.getKey()))
.forEach(entry -> request.getHeaders().put(entry.getKey(), entry.getValue()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ import com.okta.commons.http.RequestExecutor
import com.okta.commons.http.Response
import com.okta.sdk.authc.credentials.ClientCredentials
import com.okta.sdk.impl.api.ClientCredentialsResolver
import com.okta.sdk.impl.http.HttpHeadersHolder
import com.okta.sdk.impl.resource.TestResource
import com.okta.sdk.impl.util.StringInputStream
import org.hamcrest.Matcher
import org.mockito.ArgumentCaptor
import org.mockito.Mockito
import org.testng.annotations.AfterTest
import org.testng.annotations.Test

import static org.mockito.Mockito.*
Expand All @@ -39,6 +41,11 @@ import static org.hamcrest.MatcherAssert.*
*/
class DefaultDataStoreTest {

@AfterTest
void cleanUpHeaders() {
HttpHeadersHolder.clear();
}

@Test
void testApiKeyResolverReturnsCorrectApiKey() {
def requestExecutor = mock(RequestExecutor)
Expand Down Expand Up @@ -175,4 +182,41 @@ class DefaultDataStoreTest {
containsString("java/${System.getProperty("java.version")}"),
containsString("${System.getProperty("os.name")}/${System.getProperty("os.version")}"))
}

@Test
void testAdditionalHeaders() {
def resourceHref = "https://api.okta.com/v1/testResource"
def requestExecutor = mock(RequestExecutor)
def apiKeyResolver = mock(ClientCredentialsResolver)
def response = mock(Response)
def responseBody = '{"name": "jcoder"}'
def defaultDataStore = new DefaultDataStore(requestExecutor, "https://api.okta.com/v1", apiKeyResolver)
def requestCapture = ArgumentCaptor.forClass(Request)

when(requestExecutor.executeRequest(requestCapture.capture())).thenReturn(response)
when(response.hasBody()).thenReturn(true)
when(response.getBody()).thenReturn(new StringInputStream(responseBody))
when(response.getHeaders()).thenReturn(new HttpHeaders())

HttpHeadersHolder.set([
"threaded-header1": ["value1", "value2"],
"threaded-header2": ["single-value"]
])

defaultDataStore.getResource(resourceHref, TestResource, null,
["Foo-Bar": ["test-value"]])

def request = requestCapture.getValue()
// from the request arg
assertThat request.headers, hasEntry("Foo-Bar", ["test-value"])
// thread local
assertThat request.headers, hasEntry("threaded-header1", ["value1", "value2"])
assertThat request.headers, hasEntry("threaded-header2", ["single-value"])
// default headers
assertThat request.headers.get("User-Agent"), hasSize(1)
assertThat request.headers.getFirst("User-Agent"), allOf(
containsString("okta-sdk-java/"),
containsString("java/${System.getProperty("java.version")}"),
containsString("${System.getProperty("os.name")}/${System.getProperty("os.version")}"))
}
}

0 comments on commit aa3fc87

Please sign in to comment.