diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index 788ef91be..e0434dd89 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -12,4 +12,8 @@ module Epp::Common def parsed_frame Nokogiri::XML(params[:frame]).remove_namespaces! end + + def error + render 'error' + end end diff --git a/app/controllers/epp/commands_controller.rb b/app/controllers/epp/commands_controller.rb new file mode 100644 index 000000000..bec443441 --- /dev/null +++ b/app/controllers/epp/commands_controller.rb @@ -0,0 +1,8 @@ +class Epp::CommandsController < ApplicationController + include Epp::Common + + private + def create + render '/epp/domains/create' + end +end diff --git a/app/controllers/epp/sessions_controller.rb b/app/controllers/epp/sessions_controller.rb index 61121fe15..cb17374ae 100644 --- a/app/controllers/epp/sessions_controller.rb +++ b/app/controllers/epp/sessions_controller.rb @@ -17,4 +17,9 @@ class Epp::SessionsController < ApplicationController render 'login_fail' end end + + def logout + response.headers['X-EPP-Returncode'] = '1500' + render 'logout' + end end diff --git a/app/views/epp/domains/create.xml.builder b/app/views/epp/domains/create.xml.builder new file mode 100644 index 000000000..5d019a5f0 --- /dev/null +++ b/app/views/epp/domains/create.xml.builder @@ -0,0 +1,8 @@ +xml.instruct! +xml.epp('xmlns' => 'urn:ietf:params:xml:ns:epp-1.0', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd') do + xml.response do + xml.result('code' => '1000') do + xml.msg('Command completed successfully') + end + end +end diff --git a/app/views/epp/error.xml.builder b/app/views/epp/error.xml.builder new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/epp/sessions/logout.xml.builder b/app/views/epp/sessions/logout.xml.builder new file mode 100644 index 000000000..d7e440975 --- /dev/null +++ b/app/views/epp/sessions/logout.xml.builder @@ -0,0 +1,12 @@ +xml.instruct! +xml.epp('xmlns' => 'urn:ietf:params:xml:ns:epp-1.0', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation' => 'urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd') do + xml.response do + xml.result('code' => '1500') do + xml.msg('Command completed successfully; ending session', 'lang' => 'en') + end + end + + xml.trID do + xml.clTRID 'sample1trid' + end +end diff --git a/config/routes.rb b/config/routes.rb index d251ff636..4b27e41e6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ Rails.application.routes.draw do namespace(:epp) do match 'session/:command', to: 'sessions#proxy', defaults: { format: :xml }, via: [:get, :post] + match 'command/:command', to: 'commands#proxy', defaults: { format: :xml }, via: [:post, :get] end # The priority is based upon order of creation: first created -> highest priority. diff --git a/spec/epp/requests/create_domain.xml b/spec/epp/requests/create_domain.xml new file mode 100644 index 000000000..d66398932 --- /dev/null +++ b/spec/epp/requests/create_domain.xml @@ -0,0 +1,21 @@ + + + + + + testing.ee + 1 + name_server_set1 + domain_registrator1 + administrative_contact1 + password + + + + + .... base64 encoded document .... + + + dpbx005#10-01-29at19:21:47 + + diff --git a/spec/epp/requests/logout.xml b/spec/epp/requests/logout.xml new file mode 100644 index 000000000..dc49dca14 --- /dev/null +++ b/spec/epp/requests/logout.xml @@ -0,0 +1,7 @@ + + + + + ABC-12345 + + diff --git a/spec/epp/session_spec.rb b/spec/epp/session_spec.rb index feb15dc34..b3f4f491c 100644 --- a/spec/epp/session_spec.rb +++ b/spec/epp/session_spec.rb @@ -30,6 +30,14 @@ describe 'EPP Session', epp: true do expect(result[:code]).to eq('2501') end + it 'prohibits further actions unless logged in' do + response = Nokogiri::XML(server.send_request(read_body('create_domain.xml'))) + expect(parse_result_code(response)).to eq('2002') + + msg = response.css('epp response result msg').text + expect(msg).to eq('You need to login first.') + end + it 'logs in epp user' do Fabricate(:epp_user) @@ -42,6 +50,17 @@ describe 'EPP Session', epp: true do expect(msg).to eq('Command completed successfully') end + it 'logs out epp user' do + Fabricate(:epp_user) + server.send_request(read_body('login.xml')) + response = Nokogiri::XML(server.send_request(read_body('logout.xml'))) + result = response.css('epp response result').first + expect(result[:code]).to eq('1500') + + msg = response.css('epp response result msg').text + expect(msg).to eq('Command completed successfully; ending session') + end + it 'does not log in twice' do Fabricate(:epp_user) server.send_request(read_body('login.xml')) diff --git a/spec/support/epp.rb b/spec/support/epp.rb index 16bd1c9d2..ed940f626 100644 --- a/spec/support/epp.rb +++ b/spec/support/epp.rb @@ -1,7 +1,11 @@ module Epp - def read_body(filename) + def read_body filename File.read("spec/epp/requests/#{filename}") end + + def parse_result_code response + response.css('epp response result').first[:code] + end end RSpec.configure do |c|