DigexRequest
A digest access authentication implementation for Elixir. It tries to follow RFC 7616 as much as possible.
Installation
If available in Hex, the package can be installed
by adding digex_request to your list of dependencies in mix.exs:
def deps do
[
{:digex_request, "~> 0.1.0"}
]
end
Usage
To use the digest request, you need to create a module and use the DigexRequest behaviour
def DigexClient do
use DigexRequest
end
after that, build a request and send it:
DigexRequest.new(:get, "http://www.example.com", "username", "password") |> DigexClient.request()
By default the http client used is :httpc, you can override this behaviour by implementing the
handle_request/4 function.
For example if we want to use Finch to send the request
def DigexClient do
use DigexRequest
@impl DigexRequest
def handle_request(method, url, headers, body) do
case Finch.build(method, url, headers, body) |> Finch.request(MyFinch) do
{:ok, response} ->
{:ok,
%DigexRequest.Response{
status: response.status,
headers: response.headers,
body: response.body}}
{:error, error} ->
{:error, error}
end
end
end
Authorization header refresh
Each call made by the client will update the DigexRequest struct, so you need to keep this request
in order to reuse the authorization header.
req = DigexRequest.new(:get, "http://www.example.com", "username", "password")
{:ok, resp, req} = DigexClient.request(req)
# re-use the authorization header for another path
req = %DigexRequest{req | url: "http://www.example.com/another/path"}
{:ok, resp, req} = DigexClient.request(req)