Current section
Files
Jump to
Current section
Files
lib/exsms.ex
defmodule Exsms do
def send(service, payload) do
case check_service(service) do
:true ->
process_response_body(service, payload)
:false ->
{:error, "Service Not Found"}
end
end
def process_response_body(service, body) do
config = serviceconfig(service)
headers = auth_headers(service, config)
build_payload(config, service, body)
|> Poison.encode
|> case do
{:ok, payload} ->
request(config[:type], config[:url], payload, headers)
{:error, error} ->
{:error, error}
end
end
def build_payload(config, service, payload) do
case service do
:textlocal ->
Map.put_new payload, :apiKey, config[:api]
_->
payload
end
end
def auth_headers(service, config) do
case service do
:sendinblue ->
[{"api-key", config[:api]}, {"Content-Type", "application/json"}]
:mailjet ->
[{"Authorization", "Bearer " <> config[:api]}, {"Content-Type", "application/json"}]
:textlocal->
[]
end
end
def serviceconfig(service) do
case service do
:sendinblue ->
Application.get_env(:exsms, :sendinblue)
:mailjet ->
Application.get_env(:exsms, :mailjet)
:textlocal ->
Application.get_env(:exsms, :textlocal)
_ ->
"Service Not Found"
end
end
defp check_service(service) do
case service do
service when service in [:sendinblue, :mailjet, :textlocal] ->
:true
_ ->
:false
end
end
def request(method, url, body, headers) do
url = String.to_charlist(url)
HTTPoison.request(method,url, body, headers)
|> normalise_response
end
defp normalise_response(response) do
case response do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, %HTTPoison.Error{reason: reason}} ->
{:error, reason}
end
end
end