Packages
surgex
2.20.1
6.0.1
6.0.0
5.1.1
5.1.0
5.0.0
5.0.0-git-015aa39a
4.15.2
4.15.1
4.15.1-git-98b3
4.15.0
4.15.0-git-943e
4.15.0-git-5806
4.14.1
4.14.0
4.13.1
4.13.0
4.12.0
4.11.0
4.11.0-git-97d4
4.11.0-git-14c8
4.10.0
4.10.0-git-37f2
4.9.0
4.9.0-git-9d5f
4.8.1-git-80a7
4.8.0
4.8.0-git-fbda
4.8.0-git-e058
4.7.0
4.7.0-git-5414
4.6.1
4.6.0
4.5.0
4.4.0
4.3.0
4.2.1
4.2.0
4.1.1
4.1.1-git-9f6b
4.1.1-git-6f0cd
4.1.0
4.1.0-git-e934
4.1.0-git-8c28
4.1.0-git-56a9
4.1.0-git-55fd
4.0.0
3.2.8
3.2.7
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
retired
3.1.0
3.0.0
2.24.1
2.24.0
retired
2.23.0
2.22.0
2.21.0
2.20.1
2.20.0
2.19.0
2.18.1
2.18.0
2.17.0
2.16.0
2.15.0
2.14.0
2.13.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.1
2.5.0
2.4.0
retired
2.3.0
2.2.1
2.2.0
2.1.1
2.1.0
2.0.0
1.6.0
1.5.2
1.5.1
1.5.0
1.4.0
1.3.1
retired
1.3.0
retired
1.2.1
1.2.0
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
All Things Elixir @ Surge Ventures Inc, the creators of Fresha
Current section
Files
Jump to
Current section
Files
lib/surgex/rpc/adapters/http_adapter.ex
defmodule Surgex.RPC.HTTPAdapter do
@moduledoc """
Transports RPC calls through HTTP requests protected with a secret header.
## Usage
In order to use this adapter in your client, use the following code:
defmodule MyProject.MyRPC do
use Surgex.RPC.Client
transport :http,
url: "https://app.example.com/rpc",
secret: "my-rpc-secret"
# ...
end
You can also configure the adapter per environment in your Mix config as follows:
config :my_project, MyProject.MyRPC,
transport: [adapter: :http,
url: {:system, "MY_RPC_URL"},
secret: {:system, "MY_RPC_SECRET"}]
"""
alias Surgex.Config
alias Surgex.RPC.TransportError
@doc false
def call(request_payload, opts) do
url =
opts
|> Keyword.fetch!(:url)
|> Config.parse()
secret =
opts
|> Keyword.fetch!(:secret)
|> Config.parse()
headers = build_headers(secret)
response_body = make_http_request(url, request_payload, headers)
response_body
end
defp build_headers(secret) do
[
{"X-RPC-Secret", secret}
]
end
defp make_http_request(url, body, headers) do
response = HTTPoison.post!(url, body, headers)
if response.status_code != 200 do
raise TransportError, adapter: __MODULE__, context: response.status_code
end
response.body
end
end