Basic domain check command implementation

This commit is contained in:
Martin Lensment 2014-06-27 17:46:03 +03:00
parent f8757891ef
commit cd52da3f8f
8 changed files with 49 additions and 9 deletions

View file

@ -67,8 +67,8 @@ For development configuration, add:
SetHandler cgi-script SetHandler cgi-script
</Directory> </Directory>
Listen 700 Listen 701
<VirtualHost *:700> <VirtualHost *:701>
SSLEngine on SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateFile /etc/apache2/ssl/apache.crt
@ -89,6 +89,8 @@ For development configuration, add:
</IfModule> </IfModule>
``` ```
Note: Its best to go with two virtual hosts, one for test and one for dev, then you don't have to worry about quitting the dev appserver for running tests (because of colliding ports).
For plain TCP EPP configuration, see below (may be useful for debugging purposes). For plain TCP EPP configuration, see below (may be useful for debugging purposes).
* `sudo a2ensite epp_ssl` * `sudo a2ensite epp_ssl`
@ -98,7 +100,7 @@ Try it out:
* Fire up your appserver on port 8989 (This setup is tested with Unicorn) * Fire up your appserver on port 8989 (This setup is tested with Unicorn)
* `cd $mod_epp` * `cd $mod_epp`
* `./epptelnet.pl localhost 700 -s` * `./epptelnet.pl localhost 701 -s`
You should receive the greeting from the registry server. You should receive the greeting from the registry server.
Wait for the greeting message on the STD, then send EPP/TCP frame: Wait for the greeting message on the STD, then send EPP/TCP frame:

View file

@ -12,4 +12,9 @@ class Epp::CommandsController < ApplicationController
type = OBJECT_TYPES[parsed_frame.css('create create').attr('schemaLocation').value] type = OBJECT_TYPES[parsed_frame.css('create create').attr('schemaLocation').value]
send("create_#{type}") send("create_#{type}")
end end
def check
type = OBJECT_TYPES[parsed_frame.css('check check').attr('schemaLocation').value]
send("check_#{type}")
end
end end

View file

@ -1,6 +1,6 @@
module Epp::CommandsHelper module Epp::CommandsHelper
def command_params def command_params_for type
node_set = parsed_frame.css('epp command create create').children.select(&:element?) node_set = parsed_frame.css("epp command #{type} #{type}").children.select(&:element?)
node_set.inject({}) {|hash, obj| hash[obj.name.to_sym] = obj.text;hash } node_set.inject({}) {|hash, obj| hash[obj.name.to_sym] = obj.text;hash }
end end
end end

View file

@ -4,8 +4,17 @@ module Epp::DomainsHelper
render '/epp/domains/create' render '/epp/domains/create'
end end
def check_domain
cp = command_params_for('check')
@domain = cp[:name]
render '/epp/domains/check'
end
### HELPER METHODS ###
def domain_params def domain_params
cp = command_params cp = command_params_for('create')
{ {
name: cp[:name], name: cp[:name],
registrar_id: current_epp_user.registrar.try(:id), registrar_id: current_epp_user.registrar.try(:id),

View file

@ -1,3 +1,17 @@
xml.epp_head do xml.epp_head do
xml.bla xml.response do
xml.result('code' => '1000') do
xml.msg 'Command completed successfully'
end
xml.resData do
xml.tag!('domain:chkData', 'xmlns:domain' => 'http://www.nic.cz/xml/epp/domain-1.4', 'xsi:schemaLocation' => 'http://www.nic.cz/xml/epp/domain-1.4 domain-1.4.xsd') do
xml.tag!('domain:cd') do
xml.tag!('domain:name', @domain, 'avail' => 1)
end
end
end
xml << render('/epp/shared/trID')
end
end end

View file

@ -0,0 +1,4 @@
xml.trID do
xml.clTRID params[:clTRID]
xml.svTRID @svTRID
end

View file

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe 'EPP Domain', epp: true do describe 'EPP Domain', epp: true do
let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'test', password: 'test'}) } let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'test', password: 'test', port: 701}) }
context 'with valid user' do context 'with valid user' do
before(:each) { Fabricate(:epp_user) } before(:each) { Fabricate(:epp_user) }
@ -14,5 +14,11 @@ describe 'EPP Domain', epp: true do
expect(Domain.first.registrar.name).to eq('Zone Media OÜ') expect(Domain.first.registrar.name).to eq('Zone Media OÜ')
end end
it 'checks domain' do
response = epp_request('domains/check.xml')
expect(response[:result_code]).to eq('1000')
expect(response[:msg]).to eq('Command completed successfully')
end
end end
end end

View file

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
describe 'EPP Session', epp: true do describe 'EPP Session', epp: true do
let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'test', password: 'test'}) } let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'test', password: 'test', port: 701}) }
context 'when not connected' do context 'when not connected' do
it 'greets client upon connection' do it 'greets client upon connection' do