From 2db401fd98221b5e8da5760fd20411d9d8825e36 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 26 Feb 2018 10:30:46 +0200 Subject: [PATCH] Add registrar nameserver replacement UI #661 --- app/api/repp/nameservers_v1.rb | 2 +- .../registrar_nameservers_controller.rb | 59 +++++++++++++++++++ app/views/registrar/domains/index.html.erb | 6 +- .../registrar_nameservers/_form.html.erb | 50 ++++++++++++++++ .../registrar_nameservers/edit.html.erb | 11 ++++ config/locales/registrar/domains.en.yml | 1 + .../registrar/registrar_nameservers.en.yml | 12 ++++ config/routes.rb | 2 + doc/repp/v1/nameservers.md | 4 +- .../{patch_test.rb => put_test.rb} | 12 ++-- .../registrar/nameserver_replacement_test.rb | 49 +++++++++++++++ 11 files changed, 197 insertions(+), 11 deletions(-) create mode 100644 app/controllers/registrar/registrar_nameservers_controller.rb create mode 100644 app/views/registrar/registrar_nameservers/_form.html.erb create mode 100644 app/views/registrar/registrar_nameservers/edit.html.erb create mode 100644 config/locales/registrar/registrar_nameservers.en.yml rename test/integration/api/nameservers/{patch_test.rb => put_test.rb} (82%) create mode 100644 test/integration/registrar/nameserver_replacement_test.rb diff --git a/app/api/repp/nameservers_v1.rb b/app/api/repp/nameservers_v1.rb index fe391b704..cbc58eece 100644 --- a/app/api/repp/nameservers_v1.rb +++ b/app/api/repp/nameservers_v1.rb @@ -2,7 +2,7 @@ module Repp class NameserversV1 < Grape::API version 'v1', using: :path - resource :nameservers do + resource 'registrar/nameservers' do put '/' do params do requires :data, type: Hash do diff --git a/app/controllers/registrar/registrar_nameservers_controller.rb b/app/controllers/registrar/registrar_nameservers_controller.rb new file mode 100644 index 000000000..b4776f70e --- /dev/null +++ b/app/controllers/registrar/registrar_nameservers_controller.rb @@ -0,0 +1,59 @@ +class Registrar + class RegistrarNameserversController < DeppController + def edit + authorize! :manage, :repp + end + + def update + authorize! :manage, :repp + + ipv4 = params[:ipv4].split("\r\n") + ipv6 = params[:ipv6].split("\r\n") + + uri = URI.parse("#{ENV['repp_url']}registrar/nameservers") + request = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json') + request.body = { data: { type: 'nameserver', id: params[:old_hostname], + attributes: { hostname: params[:new_hostname], + ipv4: ipv4, + ipv6: ipv6 } } }.to_json + request.basic_auth(current_user.username, current_user.password) + + if Rails.env.test? + response = Net::HTTP.start(uri.hostname, uri.port, + use_ssl: (uri.scheme == 'https'), + verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http| + http.request(request) + end + elsif Rails.env.development? + client_cert = File.read(ENV['cert_path']) + client_key = File.read(ENV['key_path']) + response = Net::HTTP.start(uri.hostname, uri.port, + use_ssl: (uri.scheme == 'https'), + verify_mode: OpenSSL::SSL::VERIFY_NONE, + cert: OpenSSL::X509::Certificate.new(client_cert), + key: OpenSSL::PKey::RSA.new(client_key)) do |http| + http.request(request) + end + else + client_cert = File.read(ENV['cert_path']) + client_key = File.read(ENV['key_path']) + response = Net::HTTP.start(uri.hostname, uri.port, + use_ssl: (uri.scheme == 'https'), + cert: OpenSSL::X509::Certificate.new(client_cert), + key: OpenSSL::PKey::RSA.new(client_key)) do |http| + http.request(request) + end + end + + parsed_response = JSON.parse(response.body, symbolize_names: true) + + if response.code == '200' + flash[:notice] = t '.replaced' + redirect_to registrar_domains_url + else + @api_errors = parsed_response[:errors] + render :edit + end + end + end +end diff --git a/app/views/registrar/domains/index.html.erb b/app/views/registrar/domains/index.html.erb index a62619ca4..319f0d04f 100644 --- a/app/views/registrar/domains/index.html.erb +++ b/app/views/registrar/domains/index.html.erb @@ -1,12 +1,14 @@