defmodule Endpoints.Players.Verification do
alias Clashofclans.Api
alias Utils.FormatTag
@moduledoc """
This module is responsible for verifying a players account.
e.g. "#AB123", "my_token_here"
Returns "invalid" if the API token is invalid/expired,
Return "ok" if both is valid and the player is verified.
DEV NOTE: This module has its own request endpoint since we need a POST request with a "content-type"
# instead of the "accept" header.
"""
def process_request_headers(headers),
do: headers ++ [Authorization: "Bearer #{api_key()}", "content-type": "application/json"]
defp api_key() do
with {:ok, token} <- Application.fetch_env(:clashofclans, :api_key) do
token
else
_ -> raise "No API key found in config.exs or .env"
end
end
@spec verify_player(String.t(), String.t()) :: String.t()
def verify_player(playertag, token) do
body = Jason.encode!(%{"token" => token})
response =
Api.post(
"https://api.clashofclans.com/v1/players/#{FormatTag.format_tag(playertag)}/verifytoken",
body
)
# decode the response and only return the status code of the body.
with {:ok, %{body: body}} <- response do
Jason.decode!(body) |> Map.get("status")
end
end
end