Packages
pigeon
0.12.1
2.0.1
2.0.0
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.1.0-rc.1
1.1.0-rc.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.0
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
iOS (APNS), Android (FCM), and Amazon Android (ADM) push notifications for Elixir.
Current section
Files
Jump to
Current section
Files
lib/pigeon/apns_config.ex
defmodule Pigeon.APNS.Config do
@moduledoc """
Validates configuration settings that initialize APNSWorkers.
"""
def default_name, do: :default
def config(name) do
config = Application.get_env(:pigeon, :apns)[name]
%{
name: name,
mode: config[:mode],
cert: cert(config[:cert]),
certfile: file_path(config[:cert]),
key: key(config[:key]),
keyfile: file_path(config[:key]),
use_2197: config[:use_2197] || false
}
end
def file_path(nil), do: nil
def file_path(path) when is_binary(path) do
cond do
:filelib.is_file(path) -> Path.expand(path)
true -> nil
end
end
def file_path({app_name, path}) when is_atom(app_name),
do: Path.expand(path, :code.priv_dir(app_name))
def cert({_app_name, _path}), do: nil
def cert(nil), do: nil
def cert(bin) do
case :public_key.pem_decode(bin) do
[{:Certificate, cert, _}] -> cert
_ -> nil
end
end
def key({_app_name, _path}), do: nil
def key(nil), do: nil
def key(bin) do
case :public_key.pem_decode(bin) do
[{:RSAPrivateKey, key, _}] -> {:RSAPrivateKey, key}
_ -> nil
end
end
def valid?(config) do
valid_mode? = (config[:mode] == :dev || config[:mode] == :prod)
valid_cert? = !is_nil(config[:cert] || config[:certfile])
valid_key? = !is_nil(config[:key] || config[:keyfile])
valid_mode? && valid_cert? && valid_key?
end
end