Packages

A simple api library for battle.net (develop.battle.net)

Current section

Files

Jump to
bnet_api lib bnet_api_server.ex
Raw

lib/bnet_api_server.ex

defmodule BnetApi.Server do
require Logger
@moduledoc """
Documentation for BnetApi.
"""
@doc """
This is just a passthrough for the api it returns a JSON payload for given the response:
there are three paths (one for each api)
/wow
/d3
/starcraft
"""
require Logger
use Ace.HTTP.Service, [
port: Application.get_env(:bnet_api, :port),
cleartext: true
# certfile: Application.get_env(:bnet_api, :cert_path),
# keyfile: Application.get_env(:bnet_api, :key_path)
]
use Raxx.SimpleServer
_callback_path = Application.get_env(:bnet_api, :redirect_uri)
@impl Raxx.SimpleServer
def handle_request(%{method: :GET, path: [game, method], query: query}, _state) do
opts = URI.decode_query(query)
|> Map.put_new("region", "us")
resp = case game do
"wow" -> make_wow_request(method, opts)
"d3" -> make_d3_request(method, opts)
"starcraft" -> make_sc2_request(method, opts)
end
response(:ok)
|> set_header("content-type", "application/json")
|> set_body(resp)
end
defp make_wow_request(method, opts) do
case apply(BnetApi.Request.Wow, String.to_atom(method), [opts]) do
{:ok, env} ->
Jason.encode!(env.body)
:error -> nil
end
end
defp make_d3_request(method, opts) do
case apply(BnetApi.Request.Diablo, String.to_atom(method), [opts]) do
{:ok, env} ->
Jason.encode!(env.body)
:error -> nil
end
end
defp make_sc2_request(method, opts) do
case apply(BnetApi.Request.Starcraft, String.to_atom(method), [opts]) do
{:ok, env} ->
Jason.encode!(env.body)
anythingelse -> Logger.warn("#{inspect anythingelse}")
end
end
end