Packages

HTTP Client for Vuforia Web Services.

Current section

Files

Jump to
vuforex lib signature.ex
Raw

lib/signature.ex

defmodule Vuforex.Signature do
@moduledoc false
@hex_digest "d41d8cd98f00b204e9800998ecf8427e"
@server_secret_key Application.compile_env!(:vuforex, :server_secret_key)
@spec generate(String.t(), String.t() | nil, String.t(), String.t()) :: any()
@doc """
Generates the signature based on path, body, http verb and time.
## Examples
iex> Vuforex.Signature.generate("/summary", nil, "GET", "Sun, 25 Apr 2021 17:34:44 GMT")
"JLJTY+J/6O6FpXsY4t3CbGRwmOc="
"""
def generate(path, body, verb, time) when body in ["POST", "PUT"] do
hex_digest =
:crypto.hash(:md5, Jason.encode!(body))
|> Base.encode16()
to_digest = "#{verb}\n#{hex_digest}\napplication/json\n#{time}\n#{path}"
to_digest |> do_generate_hash()
end
def generate(path, _body, verb, time) do
to_digest = "#{verb}\n#{@hex_digest}\n\n#{time}\n#{path}"
to_digest |> do_generate_hash()
end
defp do_generate_hash(to_digest) do
:crypto.hmac(:sha, @server_secret_key, to_digest) |> Base.encode64()
end
end