/** * Extract signature from Authentication header * * @param request signed request with Authentication header * @return signature (Hex) string */ private String getHeaderSignature(SdkHttpFullRequest request) { Optional<String> authHeader = request.firstMatchingHeader(SignerConstant.AUTHORIZATION); if (authHeader.isPresent()) { Matcher matcher = AUTHENTICATION_HEADER_PATTERN.matcher(authHeader.get()); if (matcher.matches()) { String headerSignature = matcher.group(3); return headerSignature; } } // Without header signature, signer can not proceed. Thus throw out exception throw SdkClientException.builder().message("Signature is missing in AUTHORIZATION header!").build(); } }
/** * Extract signature from Authentication header * * @param request signed request with Authentication header * @return signature (Hex) string */ private String getHeaderSignature(SdkHttpFullRequest request) { Optional<String> authHeader = request.firstMatchingHeader(SignerConstant.AUTHORIZATION); if (authHeader.isPresent()) { Matcher matcher = AUTHENTICATION_HEADER_PATTERN.matcher(authHeader.get()); if (matcher.matches()) { String headerSignature = matcher.group(3); return headerSignature; } } // Without header signature, signer can not proceed. Thus throw out exception throw SdkClientException.builder().message("Signature is missing in AUTHORIZATION header!").build(); } }
private boolean shouldSetContentLength(SdkHttpFullRequest request, SdkHttpContentPublisher requestProvider) { return requestProvider != null && !request.firstMatchingHeader("Content-Length").isPresent() && requestProvider.contentLength().isPresent() // Can cause issues with signing if content length is present for these method && request.method() != SdkHttpMethod.GET && request.method() != SdkHttpMethod.HEAD; }
public InterceptorContext modifyHttpRequest(InterceptorContext context, ExecutionAttributes executionAttributes) { InterceptorContext result = context; for (ExecutionInterceptor interceptor : interceptors) { AsyncRequestBody asyncRequestBody = interceptor.modifyAsyncHttpContent(result, executionAttributes).orElse(null); SdkHttpFullRequest sdkHttpFullRequest = (SdkHttpFullRequest) context.httpRequest(); if (!result.requestBody().isPresent() && sdkHttpFullRequest.contentStreamProvider().isPresent()) { int contentLength = Integer.parseInt(sdkHttpFullRequest.firstMatchingHeader("Content-Length").orElse("0")); String contentType = sdkHttpFullRequest.firstMatchingHeader("Content-Type").orElse(""); RequestBody requestBody = RequestBody.fromContentProvider(sdkHttpFullRequest.contentStreamProvider().get(), contentLength, contentType); result = result.toBuilder().requestBody(requestBody).build(); } RequestBody requestBody = interceptor.modifyHttpContent(result, executionAttributes).orElse(null); SdkHttpRequest interceptorResult = interceptor.modifyHttpRequest(result, executionAttributes); validateInterceptorResult(result.httpRequest(), interceptorResult, interceptor, "modifyHttpRequest"); result = result.copy(b -> b.httpRequest(interceptorResult) .asyncRequestBody(asyncRequestBody) .requestBody(requestBody)); } return result; }