Current section
Files
Jump to
Current section
Files
lib/hmac_storage.ex
defmodule HmacStorage do
@moduledoc """
Hub Http Client(HMac Auth) for WeChat Storage
### Example usage
config :hmac_storage,
hub_base_url: "https://wx-hub.example.com/api/hub/expose",
client_id: "client_id",
secret: "secret"
"""
alias WeChat.Storage.Adapter
@behaviour WeChat.Storage.Adapter
@impl true
@spec store(Adapter.store_id(), Adapter.store_key(), Adapter.value()) :: :ok | any
def store(_store_id, _store_key, _value) do
{:error, "Did not supported store value, this storage only used for hub_client."}
end
@impl true
@spec restore(Adapter.store_id(), Adapter.store_key()) :: {:ok, Adapter.value()} | any
def restore(store_id, store_key) do
%{hub_base_url: hub_base_url, client_id: client_id, secret: secret} =
Application.get_all_env(:hmac_storage) |> Map.new()
Tesla.client(
[
{TeslaHmacAuth, client_id: client_id, secret: secret},
Tesla.Middleware.DecodeJson,
Tesla.Middleware.Logger
],
WeChat.Utils.default_adapter()
)
|> Tesla.get("#{hub_base_url}/#{store_id}/#{store_key}")
|> case do
{:ok, %{status: 200, body: %{"error" => 0, "store_map" => store_map}}} -> {:ok, store_map}
{:ok, %{status: 200, body: %{"msg" => error_msg}}} -> {:error, error_msg}
_ -> {:error, "request error"}
end
end
end