Add pluggable HTTP client support #494
Closed
+637
−38
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds pluggable HTTP client support to allow users to swap Erlang's built-in
httpcfor alternative HTTP clients.Problem
httpcsendsContent-Length: 0header for GET requests, which AWS ELB rejects. This causesOidcc.ProviderConfiguration.Worker.start_link/1to fail when connecting to OIDC providers hosted behind it and potentially other load balancers.Solution
Introduce an HTTP client behaviour:
oidcc_http_client- Erlang behaviour withrequest/2callbackoidcc_http_client_httpc- Default adapter wrappinghttpc(preserves backwards compatibility)Oidcc.HttpClient.Req- Optional Req adapter for Elixir projects (only compiles whenreqis a dependency)Configuration
Per-request:
Application-wide:
Backwards Compatibility
httpc)timeout,ssl,httpc_profileoptions continue to work