Packages
guard
0.12.8
0.19.1
0.19.0
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
Useful package for dealing with user authentication and signup
Current section
Files
Jump to
Current section
Files
lib/guard/sms/server.ex
defmodule Guard.Sms.Server do
use GenServer
use Tesla
# Hackney does not play well with gatewayapi.com
adapter(Tesla.Adapter.Httpc)
def start_link(name, config) do
GenServer.start_link(__MODULE__, config, name: name)
end
def send_message(pid, recipients, message, callback) do
GenServer.cast(pid, {:message, recipients, message, callback})
end
def status(pid) do
GenServer.call(pid, {:status})
end
## GenServer Callbacks
def init(config) do
client =
Tesla.client([
{Tesla.Middleware.BaseUrl, "https://gatewayapi.com/rest"},
{Tesla.Middleware.BasicAuth, [{:username, config[:token] || ""}]},
Tesla.Middleware.JSON
])
{:ok, %{options: config[:options], client: client}}
end
def handle_call({:status}, _from, state) do
{:reply, {:ok, state}, state}
end
def handle_cast({:message, recipients, message, callback}, state) do
resp =
try do
recip =
if is_list(recipients) do
recipients
else
[recipients]
end
recip = Enum.map(recip, fn r -> %{msisdn: r} end)
payload =
if is_map(message) do
Map.put(message, :recipients, recip)
else
%{recipients: recip, message: message}
end
do_post(state.client, state.options, payload)
rescue
error -> {:error, error}
end
if !is_nil(callback) do
callback.(resp)
end
{:noreply, state, :hibernate}
end
defp do_post(client, options, payload) do
msg = Map.merge(options, payload)
post!(client, "/mtsms", msg)
end
end