Skip to content

Commit 31ad3b6

Browse files
ginoaugustinejoshunter
authored andcommitted
add support for xdate header in signature
Signed-off-by: Gino Augustine <[email protected]>
1 parent 7ef4c14 commit 31ad3b6

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

bmc-common/src/main/java/com/oracle/bmc/http/signing/internal/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class Constants {
2121
// Signing
2222
static final String REQUEST_TARGET = "(request-target)";
2323
static final String DATE = "date";
24+
static final String X_DATE = "x-date";
2425
static final String CONTENT_LENGTH = "content-length";
2526
static final String CONTENT_TYPE = "content-type";
2627
static final String X_CONTENT_SHA256 = "x-content-sha256";

bmc-common/src/main/java/com/oracle/bmc/http/signing/internal/RequestSignerImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ static Map<String, String> calculateMissingHeaders(
317317
// all of the required headers that are currently missing
318318
Map<String, String> missingHeaders = new HashMap<>();
319319

320-
if (isRequiredHeaderMissing(Constants.DATE, requiredHeaders, existingHeaders)) {
320+
if (isRequiredHeaderMissing(Constants.DATE, requiredHeaders, existingHeaders) &&
321+
!existingHeaders.containsKey(Constants.X_DATE)) {
321322
missingHeaders.put(Constants.DATE, createFormatter().format(new Date()));
322323
}
323324

bmc-common/src/test/java/com/oracle/bmc/http/signing/internal/RequestSignerImplTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,32 @@ public void calculateMissingHeaders_headInputStreamBodyWithExcludeBodySigningStr
415415
SigningStrategy.EXCLUDE_BODY);
416416
}
417417

418+
@Test
419+
public void calculateMissingHeaders_whenGetRequestWithXDateHeader()
420+
throws IOException {
421+
final URI uri = URI.create("https://identity.us-phoenix-1.oraclecloud.com/20160918/users");
422+
final Map<String, List<String>> temp = new HashMap<>();
423+
temp.put("x-date",Collections.singletonList("Wed, 11 Oct 2023 12:23:17 GMT"));
424+
final Map<String, List<String>> existingHeaders = Collections.unmodifiableMap(temp);
425+
SigningStrategy signingStrategy = SigningStrategy.STANDARD;
426+
final RequestSignerImpl.SigningConfiguration signingConfiguration =
427+
new RequestSignerImpl.SigningConfiguration(
428+
signingStrategy.getHeadersToSign(),
429+
signingStrategy.getOptionalHeadersToSign(),
430+
signingStrategy.isSkipContentHeadersForStreamingPutRequests());
431+
final Map<String, String> missingHeaders =
432+
RequestSignerImpl.calculateMissingHeaders(
433+
"get",
434+
uri,
435+
existingHeaders,
436+
null,
437+
Constants.ALL_HEADERS_LIST,
438+
signingConfiguration);
439+
assertNotNull(missingHeaders);
440+
assertEquals(1, missingHeaders.size());
441+
assertFalse(missingHeaders.containsKey("date"));
442+
}
443+
418444
private void calculateAndVerifyMissingHeaders(
419445
final String httpMethod,
420446
final String contentType,

0 commit comments

Comments
 (0)