From a5eaae562a3719d9af21fb616af942c65fe587d7 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Thu, 1 Feb 2018 01:35:32 +0200 Subject: [PATCH] Add nameservers REST API #661 --- app/api/repp/api.rb | 1 + app/api/repp/nameservers_v1.rb | 30 +++++++++++++++++++ test/fixtures/nameservers.yml | 4 +-- .../api/nameservers/put_nameservers_test.rb | 29 ++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 app/api/repp/nameservers_v1.rb create mode 100644 test/integration/api/nameservers/put_nameservers_test.rb diff --git a/app/api/repp/api.rb b/app/api/repp/api.rb index aec46c68b..9c12470a0 100644 --- a/app/api/repp/api.rb +++ b/app/api/repp/api.rb @@ -58,5 +58,6 @@ module Repp mount Repp::ContactV1 mount Repp::AccountV1 mount Repp::DomainTransfersV1 + mount Repp::NameserversV1 end end diff --git a/app/api/repp/nameservers_v1.rb b/app/api/repp/nameservers_v1.rb new file mode 100644 index 000000000..10e9930f3 --- /dev/null +++ b/app/api/repp/nameservers_v1.rb @@ -0,0 +1,30 @@ +module Repp + class NameserversV1 < Grape::API + version 'v1', using: :path + + resource :nameservers do + put '/' do + params do + requires :data, type: Hash do + requires :type, type: String, allow_blank: false + requires :id, type: String, allow_blank: false + requires :attributes, type: Hash do + requires :hostname, type: String, allow_blank: false + end + end + end + + current_user.registrar.nameservers.where(hostname: params[:data][:id]).each do |nameserver| + nameserver.hostname = params[:data][:attributes][:hostname] + nameserver.ipv4 = params[:data][:attributes][:ipv4] + nameserver.ipv6 = params[:data][:attributes][:ipv6] + nameserver.save! + end + + status 204 + body false + @response = {} + end + end + end +end diff --git a/test/fixtures/nameservers.yml b/test/fixtures/nameservers.yml index a7d0e066a..870e678ad 100644 --- a/test/fixtures/nameservers.yml +++ b/test/fixtures/nameservers.yml @@ -3,7 +3,7 @@ ns1: ipv4: - 192.0.2.1 ipv6: - - 2001:DB8::1 + - 2001:db8::1 domain: shop ns2: @@ -11,5 +11,5 @@ ns2: ipv4: - 192.0.2.2 ipv6: - - 2001:DB8::2 + - 2001:db8::2 domain: shop diff --git a/test/integration/api/nameservers/put_nameservers_test.rb b/test/integration/api/nameservers/put_nameservers_test.rb new file mode 100644 index 000000000..e21eae1cc --- /dev/null +++ b/test/integration/api/nameservers/put_nameservers_test.rb @@ -0,0 +1,29 @@ +require 'test_helper' + +class APIPutNameserversTest < ActionDispatch::IntegrationTest + def test_changes_nameservers_of_all_domains_of_current_registrar + ns2 = domains(:shop).nameservers.find_by(hostname: 'ns2.bestnames.test') + request_params = { format: :json, data: { type: 'nameservers', id: 'ns2.bestnames.test', + attributes: { hostname: 'ns3.bestnames.test', + ipv4: ['192.0.2.3'], + ipv6: ['2001:DB8::3'] } } } + put '/repp/v1/nameservers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key } + ns2.reload + assert_equal 'ns3.bestnames.test', ns2.hostname + assert_equal ['192.0.2.3'], ns2.ipv4 + assert_equal ['2001:DB8::3'], ns2.ipv6 + assert_response 204 + assert_empty response.body + end + + def test_unauthenticated + put '/repp/v1/nameservers' + assert_response 401 + end + + private + + def http_auth_key + ActionController::HttpAuthentication::Basic.encode_credentials('test_bestnames', 'testtest') + end +end