Current section

Files

Jump to
scrapped_twitch_api lib api_json template method headers.ex
Raw

lib/api_json/template/method/headers.ex

defmodule TwitchApi.ApiJson.Template.Method.Headers do
@moduledoc """
Provides the methods headers template for a twitch api item module
"""
alias TwitchApi.OIDC
alias TwitchApi.AppAccessToken
alias TwitchApi.ApiJson.Item
alias TwitchApi.ApiJson.Template.Method.Args
@doc """
Provides the twitch api Elixir headers method for a twitch api item
"""
@spec get_headers(Item.t()) :: String.t() | :not_supported | :oauth
def get_headers(item) do
item
|> valid_item?
|> parse_headers()
end
defp valid_item?(item) do
authentication = Args.authentication(item)
authorization = Args.authorization(item)
valid_header?(authentication, authorization)
end
defp valid_header?(_, :not_supported), do: :not_supported
defp valid_header?(true, _), do: true
defp valid_header?(_, true), do: true
defp valid_header?(:oauth, _), do: :oauth
defp valid_header?(_, :oauth), do: :oauth
defp valid_header?(_, _), do: false
defp parse_headers(:not_supported), do: :not_supported
defp parse_headers(true), do: ",\n Headers.config_headers()"
defp parse_headers(:oauth), do: ",\n Headers.config_oauth_headers(user_info)"
defp parse_headers(false), do: ",\n []"
@doc """
Parses the twitch api Elixir get_headers method for a twitch api item. If its an OAuth header it config the needed method param.
"""
@spec parse_get_headers(String.t()) :: parsed_get_headers :: String.t()
def parse_get_headers(headers) do
case String.contains?(headers, ["user_info"]) do
false -> ""
true -> ", user_info"
end
end
@doc """
Parses the twitch api Elixir get_headers method for a twitch api item. If its an OAuth header it config the needed method type spec.
"""
@spec get_oauth_type_spec(String.t()) :: {[type_spec :: String.t()], method_param :: String.t()}
def get_oauth_type_spec(headers) do
case String.contains?(headers, ["user_info"]) do
false ->
{[], ""}
true ->
{[
"""
@typedoc \"\"\"
Map containing the user needed information for the fetch of the required user OAuth access token.
You will be able to choose from one way or the other for fetching previously OAuth access tokens.
:user_id field contains the user ID from twitch, e.g. 61425548 or \"61425548\"
:user_name field constains the user name from twitch, e.g. \"hiimkamiyuzu\"
\"\"\"
@type user_info :: %{user_id: integer | binary} | %{user_name: binary}
"""
], ", user_info"}
end
end
@doc """
Parses the twitch api Elixir body_params method for a twitch api item
"""
@spec parse_method_params(String.t(), String.t()) :: parsed_method_params :: String.t()
def parse_method_params(method_params, "") do
case method_params do
"" -> ""
method_params -> "(" <> method_params <> ")"
end
end
def parse_method_params("", ", " <> headers),
do: "(" <> headers <> ")"
def parse_method_params(method_params, headers),
do: "(" <> method_params <> headers <> ")"
@doc """
Parses body specs from a twitch api item
"""
@spec parse_method_specs(String.t(), String.t()) :: parsed_method_params :: String.t()
def parse_method_specs("", ", " <> headers), do: headers
def parse_method_specs(specs, headers), do: specs <> headers
@doc """
Configures the headers for the Finch request
"""
@spec config_headers :: headers :: [{binary, binary}]
def config_headers do
wrapped_app_access_token = AppAccessToken.get_app_access_token()
wrapped_client_id = fn -> System.fetch_env!("client_id") end
[
{"Authorization", "Bearer " <> wrapped_app_access_token},
{"Client-Id", wrapped_client_id.()}
]
end
@doc """
Configures the OAuth headers for the Finch request
"""
@spec config_oauth_headers(map) :: headers :: [{binary, binary}]
def config_oauth_headers(%{user_id: user_id}) do
wrapped_oauth_access_token = OIDC.get_access_token_id(user_id)
wrapped_client_id = fn -> System.fetch_env!("client_id") end
[
{"Authorization", "Bearer " <> wrapped_oauth_access_token},
{"Client-Id", wrapped_client_id.()}
]
end
def config_oauth_headers(%{user_name: user_name}) do
wrapped_oauth_access_token = OIDC.get_access_token_name(user_name)
wrapped_client_id = fn -> System.fetch_env!("client_id") end
[
{"Authorization", "Bearer " <> wrapped_oauth_access_token},
{"Client-Id", wrapped_client_id.()}
]
end
end