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|