summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLindolfo 'Lorn' Rodrigues <lorn@lornlab.org>2019-02-13 16:40:19 -0200
committerLindolfo 'Lorn' Rodrigues <lorn@lornlab.org>2019-02-13 16:59:20 -0200
commitab206a90b61f7b411dae49e0676cd64165ee10f2 (patch)
tree467b6b9d2624bf1acd3ed9a9215baf295088df9a /lib
parentbump version (diff)
Support Elixir-1.8
Also dropped support for elixir < 1.6
Diffstat (limited to 'lib')
-rw-r--r--lib/powerdnsex.ex23
-rw-r--r--lib/powerdnsex/config.ex22
-rw-r--r--lib/powerdnsex/converter.ex9
-rw-r--r--lib/powerdnsex/gen_server/server.ex6
-rw-r--r--lib/powerdnsex/http_client.ex10
-rw-r--r--lib/powerdnsex/managers/records_manager.ex8
-rw-r--r--lib/powerdnsex/managers/zones_manager.ex24
-rw-r--r--lib/powerdnsex/models/error.ex2
-rw-r--r--lib/powerdnsex/models/record.ex4
-rw-r--r--lib/powerdnsex/models/resource_record_set.ex69
-rw-r--r--lib/powerdnsex/models/zone.ex23
11 files changed, 114 insertions, 86 deletions
diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex
index 0f7876b..6568319 100644
--- a/lib/powerdnsex.ex
+++ b/lib/powerdnsex.ex
@@ -5,9 +5,9 @@ defmodule PowerDNSex do
@name :PowerDNSex
- def start(_,_), do: start()
+ def start(_, _), do: start()
- @spec start() :: GenServer.on_start
+ @spec start() :: GenServer.on_start()
@doc false
def start() do
import Supervisor.Spec
@@ -16,7 +16,7 @@ defmodule PowerDNSex do
options = [strategy: :one_for_one, name: :"#{@name}.Supervisor"]
try do
- Config.valid?
+ Config.valid?()
case Supervisor.start_link(children, options) do
{:ok, pid} -> {:ok, pid}
@@ -34,7 +34,7 @@ defmodule PowerDNSex do
# Zones #
#########
- @spec create_zone(Zone.t, String.t) :: Zone.t | Error.t
+ @spec create_zone(Zone.t(), String.t()) :: Zone.t() | Error.t()
@doc """
Create a new Zone on PowerDNS
"""
@@ -42,8 +42,7 @@ defmodule PowerDNSex do
call({:create_zone, zone, server_name})
end
-
- @spec show_zone(String.t, String.t) :: :ok | {:error, String.t}
+ @spec show_zone(String.t(), String.t()) :: :ok | {:error, String.t()}
@doc """
Show / Retrive info of the specific Zone
"""
@@ -51,8 +50,7 @@ defmodule PowerDNSex do
call({:show_zone, zone, server_name})
end
-
- @spec delete_zone(String.t, String.t) :: :ok | {:error, String.t}
+ @spec delete_zone(String.t(), String.t()) :: :ok | {:error, String.t()}
@doc """
Delete specific Zone on PowerDNS
"""
@@ -64,7 +62,7 @@ defmodule PowerDNSex do
# Records #
###########
- @spec create_record(Zone.t, struct) :: :ok | {:error, String.t}
+ @spec create_record(Zone.t(), struct) :: :ok | {:error, String.t()}
@doc """
Create a new Record for the given Zone
"""
@@ -72,7 +70,7 @@ defmodule PowerDNSex do
call({:create_record, zone, rrset_attrs})
end
- @spec show_record(String.t, struct) :: :ok | {:error, String.t}
+ @spec show_record(String.t(), struct) :: :ok | {:error, String.t()}
@doc """
Show / Retrive info of the specific Record of the given Zone name
"""
@@ -80,7 +78,7 @@ defmodule PowerDNSex do
call({:show_record, zone_name, rrset_attrs})
end
- @spec update_record(Zone.t, struct) :: :ok | {:error, String.t}
+ @spec update_record(Zone.t(), struct) :: :ok | {:error, String.t()}
@doc """
Update Record of the given Zone
"""
@@ -88,7 +86,7 @@ defmodule PowerDNSex do
call({:update_record, zone, rrset_attrs})
end
- @spec delete_record(Zone.t, struct) :: :ok | {:error, String.t}
+ @spec delete_record(Zone.t(), struct) :: :ok | {:error, String.t()}
@doc """
Delete specific Record of given Zone
"""
@@ -101,5 +99,4 @@ defmodule PowerDNSex do
###########
defp call(params), do: GenServer.call(@name, params)
-
end
diff --git a/lib/powerdnsex/config.ex b/lib/powerdnsex/config.ex
index 0d97cb2..34d5889 100644
--- a/lib/powerdnsex/config.ex
+++ b/lib/powerdnsex/config.ex
@@ -5,22 +5,22 @@ defmodule PowerDNSex.Config do
alias PowerDNSex.Config
def data do
- set_attr_value = &(Map.put(&2, &1, get_key(&1)))
+ set_attr_value = &Map.put(&2, &1, get_key(&1))
%Config{}
- |> Map.from_struct
- |> Map.keys
+ |> Map.from_struct()
+ |> Map.keys()
|> Enum.reduce(%Config{}, set_attr_value)
end
def powerdns_url do
- url = data.url
- if String.ends_with?(url, "/"), do: url, else: url <> "/"
+ url = data().url
+ if String.ends_with?(url, "/"), do: url, else: url <> "/"
end
- def powerdns_token, do: data.token
+ def powerdns_token, do: data().token
- def valid?(), do: powerdns_url && powerdns_token
+ def valid?(), do: powerdns_url() && powerdns_token()
###
# Private
@@ -28,8 +28,12 @@ defmodule PowerDNSex.Config do
defp get_key(key) do
case Application.fetch_env(:powerdnsex, key) do
- {:ok, {:system, env_var_name}} -> System.get_env(env_var_name)
- {:ok, value} -> value
+ {:ok, {:system, env_var_name}} ->
+ System.get_env(env_var_name)
+
+ {:ok, value} ->
+ value
+
_ ->
raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured."
end
diff --git a/lib/powerdnsex/converter.ex b/lib/powerdnsex/converter.ex
index 507c119..8f8639e 100644
--- a/lib/powerdnsex/converter.ex
+++ b/lib/powerdnsex/converter.ex
@@ -7,9 +7,12 @@ defmodule PowerDNSex.Converter do
for {key, value} <- struct, into: %{} do
n_key = if is_binary(key), do: String.to_atom(key), else: key
- n_value = if is_map(value) or is_list(value) do
- keys_to_atom(value)
- else value end
+ n_value =
+ if is_map(value) or is_list(value) do
+ keys_to_atom(value)
+ else
+ value
+ end
{n_key, n_value}
end
diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex
index 3b24503..a0bb7d8 100644
--- a/lib/powerdnsex/gen_server/server.ex
+++ b/lib/powerdnsex/gen_server/server.ex
@@ -2,7 +2,11 @@ defmodule PowerDNSex.Server do
use GenServer
alias PowerDNSex.Managers.{ZonesManager, RecordsManager}
- alias PowerDNSex.{Models.Zone, Converter}
+ alias PowerDNSex.Converter
+
+ def init(args) do
+ {:ok, args}
+ end
def start_link(name) do
GenServer.start_link(__MODULE__, :ok, name: name)
diff --git a/lib/powerdnsex/http_client.ex b/lib/powerdnsex/http_client.ex
index 0a242b5..13e5023 100644
--- a/lib/powerdnsex/http_client.ex
+++ b/lib/powerdnsex/http_client.ex
@@ -1,5 +1,5 @@
defmodule PowerDNSex.HttpClient do
- @moduledoc"""
+ @moduledoc """
Client to do http requests for PowerDns API
"""
@@ -7,10 +7,10 @@ defmodule PowerDNSex.HttpClient do
alias PowerDNSex.Config
- def process_url(url), do: Config.powerdns_url <> url
+ def process_url(url), do: Config.powerdns_url() <> url
- defp process_request_headers(headers) do
- custom = ["X-API-Key": Config.powerdns_token]
- Enum.into(headers, custom)
+ def process_request_headers(headers) do
+ custom = ["X-API-Key": Config.powerdns_token()]
+ Keyword.merge(headers, custom)
end
end
diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex
index 9b6a96f..f2ef6b5 100644
--- a/lib/powerdnsex/managers/records_manager.ex
+++ b/lib/powerdnsex/managers/records_manager.ex
@@ -7,7 +7,6 @@ defmodule PowerDNSex.Managers.RecordsManager do
alias PowerDNSex.Managers.ZonesManager
alias HTTPoison.Response
-
def create(%Zone{} = zone, %{} = rrset_attrs) do
rrset_attrs = Map.merge(rrset_attrs, %{changetype: "REPLACE"})
patch(zone, rrset_attrs)
@@ -45,9 +44,12 @@ defmodule PowerDNSex.Managers.RecordsManager do
defp process_request_response(%Response{body: body, status_code: status}) do
case status do
- s when s == 204 -> :ok
+ s when s == 204 ->
+ :ok
+
s when s < 300 ->
:ok
+
s when s >= 300 ->
error = Poison.decode!(body, as: %Error{})
{:error, %{error | http_status_code: s}}
@@ -60,7 +62,7 @@ defmodule PowerDNSex.Managers.RecordsManager do
defp patch(%Zone{} = zone, %RRSet{} = rrset) do
rrset_body = RRSet.as_body(rrset)
- Logger.info "Request to [#{zone.name}] with params [#{rrset_body}]"
+ Logger.info("Request to [#{zone.name}] with params [#{rrset_body}]")
zone.url
|> HttpClient.patch!(rrset_body)
diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex
index c7ec1ab..23bab1d 100644
--- a/lib/powerdnsex/managers/zones_manager.ex
+++ b/lib/powerdnsex/managers/zones_manager.ex
@@ -1,5 +1,4 @@
defmodule PowerDNSex.Managers.ZonesManager do
-
@default_server "localhost"
alias PowerDNSex.HttpClient
@@ -15,19 +14,17 @@ defmodule PowerDNSex.Managers.ZonesManager do
def show(zone_name, server_name \\ @default_server)
when is_bitstring(zone_name) do
-
server_name
|> zone_path(zone_name)
- |> HttpClient.get!
+ |> HttpClient.get!()
|> process_request_response
end
def delete(zone_name, server_name \\ @default_server)
when is_bitstring(zone_name) do
-
server_name
|> zone_path(zone_name)
- |> HttpClient.delete!
+ |> HttpClient.delete!()
|> process_request_response
end
@@ -45,20 +42,25 @@ defmodule PowerDNSex.Managers.ZonesManager do
defp process_request_response(%Response{body: body, status_code: status}) do
case status do
- s when s == 204 -> {:ok, %{}}
- s when s < 300 -> {:ok, decode_body(body)}
+ s when s == 204 ->
+ {:ok, %{}}
+
+ s when s < 300 ->
+ {:ok, decode_body(body)}
+
s when s == 500 ->
{:error, %Error{error: "Internal Server Error", http_status_code: s}}
+
s when s >= 300 ->
- error = %{Poison.decode!(body,as: %Error{}) | http_status_code: s}
+ error = %{Poison.decode!(body, as: %Error{}) | http_status_code: s}
{:error, error}
end
end
defp decode_body(body) do
- zone = body
- |> Poison.decode!(as: %Zone{rrsets:
- [%ResourceRecordSet{records: [%Record{}]}]})
+ zone =
+ body
+ |> Poison.decode!(as: %Zone{rrsets: [%ResourceRecordSet{records: [%Record{}]}]})
nameservers = ResourceRecordSet.nameservers(zone.rrsets)
Map.put(zone, :nameservers, nameservers)
diff --git a/lib/powerdnsex/models/error.ex b/lib/powerdnsex/models/error.ex
index b4397df..c1626f0 100644
--- a/lib/powerdnsex/models/error.ex
+++ b/lib/powerdnsex/models/error.ex
@@ -1,5 +1,5 @@
defmodule PowerDNSex.Models.Error do
defstruct [:error, :http_status_code]
- @type t :: %__MODULE__{error: String.t}
+ @type t :: %__MODULE__{error: String.t()}
end
diff --git a/lib/powerdnsex/models/record.ex b/lib/powerdnsex/models/record.ex
index ed0e327..b73cd98 100644
--- a/lib/powerdnsex/models/record.ex
+++ b/lib/powerdnsex/models/record.ex
@@ -20,8 +20,8 @@ defmodule PowerDNSex.Models.Record do
end
def find(records, attrs) when is_list(records) do
- Enum.find(records, fn(record) ->
- Enum.all?(attrs, fn({attr, attr_value}) ->
+ Enum.find(records, fn record ->
+ Enum.all?(attrs, fn {attr, attr_value} ->
Map.get(record, attr) == attr_value
end)
end)
diff --git a/lib/powerdnsex/models/resource_record_set.ex b/lib/powerdnsex/models/resource_record_set.ex
index 1a410b1..dbb90b3 100644
--- a/lib/powerdnsex/models/resource_record_set.ex
+++ b/lib/powerdnsex/models/resource_record_set.ex
@@ -1,5 +1,4 @@
defmodule PowerDNSex.Models.ResourceRecordSet do
-
alias PowerDNSex.Models.Record
defstruct [:name, :type, :ttl, :records, :changetype]
@@ -10,21 +9,23 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
end
def as_body(%__MODULE__{} = rrset) do
- %{rrsets: [
- %{
- name: rrset.name,
- type: rrset.type,
- ttl: rrset.ttl,
- changetype: rrset.changetype,
- records: Record.as_body(rrset.records)
- }
- ]}
- |> Poison.encode!
+ %{
+ rrsets: [
+ %{
+ name: rrset.name,
+ type: rrset.type,
+ ttl: rrset.ttl,
+ changetype: rrset.changetype,
+ records: Record.as_body(rrset.records)
+ }
+ ]
+ }
+ |> Poison.encode!()
end
def find(rrsets, %{} = attrs) when is_list(rrsets) do
- Enum.find(rrsets, fn(rrset) ->
- Enum.all?(attrs, fn({attr, attr_value}) ->
+ Enum.find(rrsets, fn rrset ->
+ Enum.all?(attrs, fn {attr, attr_value} ->
if Enum.member?(Map.keys(%__MODULE__{}), attr) do
equal_attr?(attr, attr_value, rrset)
else
@@ -35,23 +36,26 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
end
def update(%__MODULE__{} = rrset, %{} = new_attrs) do
- Enum.reduce(@permited_attrs, rrset, fn(attr_name, rrset) ->
- case Map.fetch(new_attrs, attr_name) do
- {:ok, new_value} ->
- if attr_name == :records do
- new_value = Record.build(new_value)
- end
- %{rrset | attr_name => new_value}
- _ -> rrset
- end
- end)
+ Enum.reduce(@permited_attrs, rrset, fn attr_name, rrset ->
+ case {attr_name, Map.fetch(new_attrs, attr_name)} do
+ {:records, {:ok, new_value}} ->
+ %{rrset | attr_name => Record.build(new_value)}
+
+ {_, {:ok, new_value}} ->
+ %{rrset | attr_name => new_value}
+
+ _ ->
+ rrset
+ end
+ end)
end
def nameservers(rrsets) do
- rrset = Enum.find(rrsets, fn(rrset) -> rrset.type == "NS" end)
- nameservers = case rrset do
+ rrset = Enum.find(rrsets, fn rrset -> rrset.type == "NS" end)
+
+ case rrset do
nil -> []
- _ -> Enum.map(rrset.records, &(&1.content) )
+ _ -> Enum.map(rrset.records, & &1.content)
end
end
@@ -62,10 +66,11 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
defp set_attrs(rrset, attr_name, attrs) do
if Map.has_key?(attrs, attr_name) do
- attr_value = case attr_name do
- :records -> Record.build(Map.fetch!(attrs, attr_name))
- _ -> Map.fetch!(attrs, attr_name)
- end
+ attr_value =
+ case attr_name do
+ :records -> Record.build(Map.fetch!(attrs, attr_name))
+ _ -> Map.fetch!(attrs, attr_name)
+ end
%{rrset | attr_name => attr_value}
else
@@ -80,7 +85,7 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
defp build_rrset(rrset_attrs) do
%__MODULE__{}
- |> Map.keys
- |> Enum.reduce(%__MODULE__{}, &(set_attrs(&2, &1, rrset_attrs)))
+ |> Map.keys()
+ |> Enum.reduce(%__MODULE__{}, &set_attrs(&2, &1, rrset_attrs))
end
end
diff --git a/lib/powerdnsex/models/zone.ex b/lib/powerdnsex/models/zone.ex
index 8620443..96089e0 100644
--- a/lib/powerdnsex/models/zone.ex
+++ b/lib/powerdnsex/models/zone.ex
@@ -6,15 +6,26 @@ defmodule PowerDNSex.Models.Zone do
@body_attrs ~w(account dns kind masters name nameservers records serial
soa_edit soa_edit_api)a
- defstruct name: nil, kind: "Native", masters: [], nameservers: [], rrsets: [],
- account: nil, comments: [], dnssec: false, id: nil, last_check: 0,
- notified_serial: 0, serial: nil, soa_edit: "", soa_edit_api: "",
+ defstruct name: nil,
+ kind: "Native",
+ masters: [],
+ nameservers: [],
+ rrsets: [],
+ account: nil,
+ comments: [],
+ dnssec: false,
+ id: nil,
+ last_check: 0,
+ notified_serial: 0,
+ serial: nil,
+ soa_edit: "",
+ soa_edit_api: "",
url: nil
@type t :: %__MODULE__{}
def as_body(%__MODULE__{} = zone) do
- get_valid_attrs = fn({attr, value}, body) ->
+ get_valid_attrs = fn {attr, value}, body ->
if Enum.member?(@body_attrs, attr) do
Map.merge(body, %{attr => value})
else
@@ -23,8 +34,8 @@ defmodule PowerDNSex.Models.Zone do
end
zone
- |> Map.from_struct
+ |> Map.from_struct()
|> Enum.reduce(%{}, get_valid_attrs)
- |> Poison.encode!
+ |> Poison.encode!()
end
end