diff options
Diffstat (limited to 'lib/powerdnsex/managers/zones_manager.ex')
-rw-r--r-- | lib/powerdnsex/managers/zones_manager.ex | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex new file mode 100644 index 0000000..e511ac1 --- /dev/null +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -0,0 +1,46 @@ +defmodule PowerDNSex.ZonesManager do + + @default_server "localhost" + + alias PowerDNSex.HttpClient + alias PowerDNSex.Models.{Zone, Error, ResourceRecordSet, Record} + alias HTTPoison.Response + + def create(%Zone{} = zone, server_name \\ @default_server) do + zone_path(server_name) + |> HttpClient.post!(Zone.as_body(zone)) + |> process_request_response + end + + def show(zone_name, server_name \\ @default_server) + when is_bitstring(zone_name) do + + zone_path(server_name, zone_name) + |> HttpClient.get! + |> process_request_response + end + + ### + # Private + ### + + defp zone_path(server_name) when is_bitstring(server_name) do + "api/v1/servers/#{server_name}/zones" + end + + defp zone_path(server_name, zone_name) when is_bitstring(server_name) do + zone_path(server_name) <> "/#{zone_name}" + end + + defp process_request_response(%Response{body: body, status_code: status}) do + case status do + s when s < 300 -> + body |> Poison.decode!(as: %Zone{rrsets: [ + %ResourceRecordSet{ + records: [%Record{}] + }]}) + s when s >= 300 -> + body |> Poison.decode!(as: %Error{}) + end + end +end |