38 lines
923 B
Elixir
38 lines
923 B
Elixir
defmodule SteamAPI do
|
|
@behaviour Tesla.Middleware
|
|
# steam API helper, based off baseurl and query
|
|
|
|
@impl Tesla.Middleware
|
|
def call(env, next, interface) do
|
|
env
|
|
|> apply_base(interface)
|
|
|> apply_base("https://api.steampowered.com")
|
|
|> merge(key: Application.fetch_env!(:steamwebapi, :token))
|
|
|> Tesla.run(next)
|
|
end
|
|
|
|
defp apply_base(env, base) do
|
|
if Regex.match?(~r/^https?:\/\//i, env.url) do
|
|
# skip if url is already with scheme
|
|
env
|
|
else
|
|
%{env | url: join(base, env.url)}
|
|
end
|
|
end
|
|
|
|
defp merge(env, query) do
|
|
Map.update!(env, :query, &(&1 ++ query))
|
|
end
|
|
|
|
defp join(base, url) do
|
|
case {String.last(to_string(base)), url} do
|
|
{nil, url} -> url
|
|
{"/", "/" <> rest} -> base <> rest
|
|
{"/", rest} -> base <> rest
|
|
{_, ""} -> base
|
|
{_, "/" <> rest} -> base <> "/" <> rest
|
|
{_, rest} -> base <> "/" <> rest
|
|
end
|
|
end
|
|
end
|