From c20723cfb5c3af983a42a54e1233e9b6f0550ce1 Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Wed, 10 Feb 2021 18:36:38 -0300 Subject: Add zone without rrset --- lib/powerdnsex.ex | 4 ++++ lib/powerdnsex/gen_server/server.ex | 4 ++++ lib/powerdnsex/managers/records_manager.ex | 4 ++++ lib/powerdnsex/managers/zones_manager.ex | 12 ++++++++++ .../lib/powerdnsex/managers/zones_manager_test.exs | 10 ++++++++ .../cassettes/zones_manager/get_zone/success.json | 28 ++++++++++++++++++++++ 6 files changed, 62 insertions(+) create mode 100644 test/support/cassettes/zones_manager/get_zone/success.json diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index b77389c..6b71f08 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -48,6 +48,10 @@ defmodule PowerDNSex do call({:show_zone, zone, server_name}) end + def get_zone(zone, server_name \\ @default_server) when is_binary(zone) do + call({:get_zone, zone, server_name}) + end + @spec delete_zone(String.t(), String.t()) :: :ok | {:error, String.t()} @doc """ Delete specific Zone on PowerDNS diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex index df8a453..e015c7e 100644 --- a/lib/powerdnsex/gen_server/server.ex +++ b/lib/powerdnsex/gen_server/server.ex @@ -24,6 +24,10 @@ defmodule PowerDNSex.Server do {:reply, ZonesManager.show(zone, server_name), state} end + def handle_call({:get_zone, zone, server_name}, _from, state) do + {:reply, ZonesManager.get_zone(zone, server_name), state} + end + def handle_call({:delete_zone, zone, server_name}, _from, state) do {:reply, ZonesManager.delete(zone, server_name), state} end diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index f2ef6b5..89b8d4b 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -12,6 +12,10 @@ defmodule PowerDNSex.Managers.RecordsManager do patch(zone, rrset_attrs) end + def put_zone(%Zone{} = zone, %{} = rrset_attrs) do + create(zone, rrset_attrs) + end + def show(zone_name, %{} = rrset_attrs) do case ZonesManager.show(zone_name) do {:ok, zone} -> RRSet.find(zone.rrsets, rrset_attrs) diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index 23bab1d..1f16a6c 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -20,6 +20,14 @@ defmodule PowerDNSex.Managers.ZonesManager do |> process_request_response end + def get_zone(zone_name, server_name \\ @default_server) + when is_bitstring(zone_name) do + server_name + |> zone_path_light(zone_name) + |> HttpClient.get!() + |> process_request_response + end + def delete(zone_name, server_name \\ @default_server) when is_bitstring(zone_name) do server_name @@ -40,6 +48,10 @@ defmodule PowerDNSex.Managers.ZonesManager do zone_path(server_name) <> "/#{zone_name}" end + defp zone_path_light(server_name, zone_name) when is_bitstring(server_name) do + "api/v1/servers/#{server_name}/zones/#{zone_name}?rrsets=false" + end + defp process_request_response(%Response{body: body, status_code: status}) do case status do s when s == 204 -> diff --git a/test/lib/powerdnsex/managers/zones_manager_test.exs b/test/lib/powerdnsex/managers/zones_manager_test.exs index 1b4982e..e2ae2d8 100644 --- a/test/lib/powerdnsex/managers/zones_manager_test.exs +++ b/test/lib/powerdnsex/managers/zones_manager_test.exs @@ -86,6 +86,16 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do end end + describe "ZonesManager.get_zone/1" do + @tag :zones_manager_get_zone + test "type of return given a correct zone name" do + use_cassette "zones_manager/show/success" do + {:ok, zone} = ZonesManager.get_zone(@valid_zone_test.name) + assert zone == @expected_zone + end + end + end + describe "ZonesManager.show/2" do @tag :zones_manager_show test "type of return given a correct zone name" do diff --git a/test/support/cassettes/zones_manager/get_zone/success.json b/test/support/cassettes/zones_manager/get_zone/success.json new file mode 100644 index 0000000..a6ca219 --- /dev/null +++ b/test/support/cassettes/zones_manager/get_zone/success.json @@ -0,0 +1,28 @@ +[ + { + "request": { + "body": "", + "headers": { + "X-API-Key": "S3cr37_70k3n" + }, + "method": "get", + "options": { + "ssl_options": { + "versions": [ + "tlsv1.1" + ] + }, + "recv_timeout": 300000 + }, + "request_body": "", + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." + }, + "response": { + "binary": false, + "body": "nxdomain", + "headers": [], + "status_code": null, + "type": "error" + } + } +] \ No newline at end of file -- cgit v1.2.3 From 5f08bc012ddc5557ad450a9381b89552a89c761e Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Thu, 11 Feb 2021 10:26:16 -0300 Subject: Add put methot in record_manager --- lib/powerdnsex.ex | 3 +++ lib/powerdnsex/gen_server/server.ex | 5 +++++ lib/powerdnsex/managers/records_manager.ex | 2 +- lib/powerdnsex/managers/zones_manager.ex | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index 6b71f08..8f13ee6 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -87,6 +87,9 @@ defmodule PowerDNSex do def update_record(%Zone{} = zone, %{} = rrset_attrs) do call({:update_record, zone, rrset_attrs}) end + def put_record(%Zone{} = zone, %{} = rrset_attrs) do + call({:put_record, zone, rrset_attrs}) + end @spec delete_record(Zone.t(), struct) :: :ok | {:error, String.t()} @doc """ diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex index e015c7e..b252143 100644 --- a/lib/powerdnsex/gen_server/server.ex +++ b/lib/powerdnsex/gen_server/server.ex @@ -47,6 +47,11 @@ defmodule PowerDNSex.Server do {:reply, RecordsManager.update(zone, attrs), state} end + def handle_call({:update_record, zone, rrset_attrs}, _from, state) do + attrs = Converter.keys_to_atom(rrset_attrs) + {:reply, RecordsManager.put(zone, attrs), state} + end + def handle_call({:delete_record, zone, rrset_attrs}, _from, state) do {:reply, RecordsManager.delete(zone, rrset_attrs), state} end diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index 89b8d4b..e377322 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -12,7 +12,7 @@ defmodule PowerDNSex.Managers.RecordsManager do patch(zone, rrset_attrs) end - def put_zone(%Zone{} = zone, %{} = rrset_attrs) do + def put(%Zone{} = zone, %{} = rrset_attrs) do create(zone, rrset_attrs) end diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index 1f16a6c..7a8f1df 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -20,7 +20,7 @@ defmodule PowerDNSex.Managers.ZonesManager do |> process_request_response end - def get_zone(zone_name, server_name \\ @default_server) + def get(zone_name, server_name \\ @default_server) when is_bitstring(zone_name) do server_name |> zone_path_light(zone_name) -- cgit v1.2.3 From a5a8c093cc5db8ddd6e23a9edf0171546ff577a2 Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Thu, 11 Feb 2021 11:29:00 -0300 Subject: Format files --- lib/powerdnsex.ex | 11 ++++++++++- lib/powerdnsex/gen_server/server.ex | 2 +- lib/powerdnsex/http_client.ex | 3 +-- lib/powerdnsex/managers/zones_manager.ex | 10 +++++----- test/lib/powerdnsex/config_test.exs | 5 +++-- test/support/fake_config.exs | 1 - 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index 8f13ee6..cc6db9e 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -48,6 +48,10 @@ defmodule PowerDNSex do call({:show_zone, zone, server_name}) end + @spec get_zone(String.t(), String.t()) :: :ok | {:error, String.t()} + @doc """ + Show / Retrive info of the specific Zone without RRSets + """ def get_zone(zone, server_name \\ @default_server) when is_binary(zone) do call({:get_zone, zone, server_name}) end @@ -87,6 +91,11 @@ defmodule PowerDNSex do def update_record(%Zone{} = zone, %{} = rrset_attrs) do call({:update_record, zone, rrset_attrs}) end + + @spec put_record(Zone.t(), struct) :: :ok | {:error, String.t()} + @doc """ + Update Record of the given Zone + """ def put_record(%Zone{} = zone, %{} = rrset_attrs) do call({:put_record, zone, rrset_attrs}) end @@ -114,7 +123,7 @@ defmodule PowerDNSex do defp call(params) do :poolboy.transaction(@name, fn pid -> - GenServer.call(pid, params, Config.powerdns_timeout) + GenServer.call(pid, params, Config.powerdns_timeout()) end) end end diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex index b252143..149351b 100644 --- a/lib/powerdnsex/gen_server/server.ex +++ b/lib/powerdnsex/gen_server/server.ex @@ -47,7 +47,7 @@ defmodule PowerDNSex.Server do {:reply, RecordsManager.update(zone, attrs), state} end - def handle_call({:update_record, zone, rrset_attrs}, _from, state) do + def handle_call({:put_record, zone, rrset_attrs}, _from, state) do attrs = Converter.keys_to_atom(rrset_attrs) {:reply, RecordsManager.put(zone, attrs), state} end diff --git a/lib/powerdnsex/http_client.ex b/lib/powerdnsex/http_client.ex index 3431795..98e299d 100644 --- a/lib/powerdnsex/http_client.ex +++ b/lib/powerdnsex/http_client.ex @@ -15,8 +15,7 @@ defmodule PowerDNSex.HttpClient do end def process_request_options(options) do - custom_options = [ssl: [{:versions, [:'tlsv1.1']}], recv_timeout: Config.powerdns_timeout()] + custom_options = [ssl: [{:versions, [:"tlsv1.1"]}], recv_timeout: Config.powerdns_timeout()] Keyword.merge(options, custom_options) end - end diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index 7a8f1df..b1567ef 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -21,11 +21,11 @@ defmodule PowerDNSex.Managers.ZonesManager do end def get(zone_name, server_name \\ @default_server) - when is_bitstring(zone_name) do - server_name - |> zone_path_light(zone_name) - |> HttpClient.get!() - |> process_request_response + when is_bitstring(zone_name) do + server_name + |> zone_path_light(zone_name) + |> HttpClient.get!() + |> process_request_response end def delete(zone_name, server_name \\ @default_server) diff --git a/test/lib/powerdnsex/config_test.exs b/test/lib/powerdnsex/config_test.exs index c8649ae..394d97c 100644 --- a/test/lib/powerdnsex/config_test.exs +++ b/test/lib/powerdnsex/config_test.exs @@ -67,9 +67,10 @@ defmodule PowerDNSex.ConfigTest do @tag :configs test "uses default timeout" do existing = Application.get_env(:powerdnsex, :timeout) - on_exit fn -> + + on_exit(fn -> Application.put_env(:powerdnsex, :timeout, existing) - end + end) Application.delete_env(:powerdnsex, :timeout) diff --git a/test/support/fake_config.exs b/test/support/fake_config.exs index e05db22..80912e1 100644 --- a/test/support/fake_config.exs +++ b/test/support/fake_config.exs @@ -7,7 +7,6 @@ defmodule PowerDNSex.FakeConfig do def set_token, do: Application.put_env(:powerdnsex, :token, @app_config_token) def set_timeout, do: Application.put_env(:powerdnsex, :timeout, @app_config_timeout) - def token, do: @app_config_token def url, do: @app_config_url def timeout, do: @app_config_timeout -- cgit v1.2.3 From b612b7a3ade495ff1312e7abc85a9c5876901a13 Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Thu, 11 Feb 2021 11:31:29 -0300 Subject: Add zone light with only server name --- lib/powerdnsex/managers/zones_manager.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index b1567ef..f92af87 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -48,8 +48,12 @@ defmodule PowerDNSex.Managers.ZonesManager do zone_path(server_name) <> "/#{zone_name}" end + defp zone_path_light(server_name) when is_bitstring(server_name) do + "api/v1/servers/#{server_name}/zones?rrsets=false" + end + defp zone_path_light(server_name, zone_name) when is_bitstring(server_name) do - "api/v1/servers/#{server_name}/zones/#{zone_name}?rrsets=false" + zone_path(server_name) <> "/#{zone_name}?rrsets=false" end defp process_request_response(%Response{body: body, status_code: status}) do -- cgit v1.2.3 From 13873ac74f4b262ffae35e59c16590a4ae3536ec Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Thu, 11 Feb 2021 11:33:14 -0300 Subject: Add get zone in readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3aba62c..5614f2c 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,9 @@ zone_model = %PowerDNSex.Models.Zone{ # SHOW ZONE: {:ok, zone} = PowerDNSex.show_zone("example.com") +# SHOW ZONE without RRSets: +{:ok, zone} = PowerDNSex.get_zone("example.com") + # DELETE ZONE: res = PowerDNSex.delete_zone("example.com") ``` -- cgit v1.2.3 From 963322fbd3c71c5fb318b73f98fd4e4fc55adfbc Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Thu, 11 Feb 2021 12:10:19 -0300 Subject: Fix zone path light --- lib/powerdnsex/managers/zones_manager.ex | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index f92af87..b1567ef 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -48,12 +48,8 @@ defmodule PowerDNSex.Managers.ZonesManager do zone_path(server_name) <> "/#{zone_name}" end - defp zone_path_light(server_name) when is_bitstring(server_name) do - "api/v1/servers/#{server_name}/zones?rrsets=false" - end - defp zone_path_light(server_name, zone_name) when is_bitstring(server_name) do - zone_path(server_name) <> "/#{zone_name}?rrsets=false" + "api/v1/servers/#{server_name}/zones/#{zone_name}?rrsets=false" end defp process_request_response(%Response{body: body, status_code: status}) do -- cgit v1.2.3