diff --git a/Gemfile b/Gemfile
index ee11fae90..878dc62bf 100644
--- a/Gemfile
+++ b/Gemfile
@@ -68,7 +68,7 @@ gem 'digidoc_client', '~> 0.2.1'
# epp
gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp'
-gem 'epp-xml', '~> 0.10.4' # EPP XMLs
+gem 'epp-xml', '~> 1.0.1' # EPP XMLs
gem 'uuidtools', '~> 2.1.4' # For unique IDs (used by the epp gem)
# for importing legacy db
diff --git a/Gemfile.lock b/Gemfile.lock
index 859830bbf..9b674285f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -161,7 +161,7 @@ GEM
nokogiri (>= 1.4.0)
savon (>= 2.4.0)
docile (1.1.5)
- epp-xml (0.10.4)
+ epp-xml (1.0.1)
activesupport (~> 4.1)
builder (~> 3.2)
equalizer (0.0.11)
@@ -512,7 +512,7 @@ DEPENDENCIES
devise (~> 3.4.1)
digidoc_client (~> 0.2.1)
epp (~> 1.4.2)!
- epp-xml (~> 0.10.4)
+ epp-xml (~> 1.0.1)
fabrication (~> 2.12.2)
faker (~> 1.3.0)
figaro (~> 1.1.0)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 3355469f1..1a897e150 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -117,7 +117,7 @@ class Domain < ActiveRecord::Base
validate :validate_nameserver_ips
- attr_accessor :registrant_typeahead, :update_me, :deliver_emails,
+ attr_accessor :registrant_typeahead, :update_me, :deliver_emails,
:epp_pending_update, :epp_pending_delete
def subordinate_nameservers
@@ -155,6 +155,10 @@ class Domain < ActiveRecord::Base
self[:name_dirty] = value
end
+ def roid
+ "EIS-#{id}"
+ end
+
def registrant_typeahead
@registrant_typeahead || registrant.try(:name) || nil
end
@@ -250,7 +254,7 @@ class Domain < ActiveRecord::Base
def validate_period
return unless period.present?
if period_unit == 'd'
- valid_values = %w(365 366 710 712 1065 1068)
+ valid_values = %w(365 730 1095)
elsif period_unit == 'm'
valid_values = %w(12 24 36)
else
diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder
index d4fc26036..ad1db1cb2 100644
--- a/app/views/epp/domains/info.xml.builder
+++ b/app/views/epp/domains/info.xml.builder
@@ -7,6 +7,7 @@ xml.epp_head do
xml.resData do
xml.tag!('domain:infData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do
xml.tag!('domain:name', @domain.name)
+ xml.tag!('domain:roid', @domain.roid)
@domain.domain_statuses.each do |ds|
xml.tag!('domain:status', ds.description, 's' => ds.value) unless ds.description.blank?
xml.tag!('domain:status', 's' => ds.value) if ds.description.blank?
@@ -38,17 +39,17 @@ xml.epp_head do
xml.tag!('domain:clID', @domain.registrar_name)
- xml.tag!('domain:crID', @domain.creator.try(:registrar))
+ xml.tag!('domain:crID', @domain.creator.try(:registrar)) if @domain.creator
xml.tag!('domain:crDate', @domain.created_at.try(:iso8601))
+ xml.tag!('domain:upDate', @domain.updated_at.try(:iso8601)) if @domain.updated_at != @domain.created_at
+
xml.tag!('domain:exDate', @domain.valid_to.try(:iso8601))
# TODO Make domain stampable
#xml.tag!('domain:upID', @domain.updated_by)
- xml.tag!('domain:upDate', @domain.updated_at.try(:iso8601)) if @domain.updated_at != @domain.created_at
-
# TODO Make domain transferrable
#xml.tag!('domain:trDate', @domain.transferred_at) if @domain.transferred_at
diff --git a/doc/schemas/contact-1.0.xsd b/doc/schemas/contact-1.0.xsd
new file mode 100644
index 000000000..dc2b366e6
--- /dev/null
+++ b/doc/schemas/contact-1.0.xsd
@@ -0,0 +1,408 @@
+
+
+
+
+
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0
+ contact provisioning schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/domain-1.0.xsd b/doc/schemas/domain-1.0.xsd
new file mode 100644
index 000000000..9ce83db8d
--- /dev/null
+++ b/doc/schemas/domain-1.0.xsd
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0
+ domain provisioning schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/eis-1.0.xsd b/doc/schemas/eis-1.0.xsd
new file mode 100644
index 000000000..390c45579
--- /dev/null
+++ b/doc/schemas/eis-1.0.xsd
@@ -0,0 +1,74 @@
+
+
+
+
+
+ EIS Extensible Provisioning Protocol v1.0
+ extension schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/epp-1.0.xsd b/doc/schemas/epp-1.0.xsd
new file mode 100644
index 000000000..1efc25947
--- /dev/null
+++ b/doc/schemas/epp-1.0.xsd
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0 schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/eppcom-1.0.xsd b/doc/schemas/eppcom-1.0.xsd
new file mode 100644
index 000000000..3d1c44e44
--- /dev/null
+++ b/doc/schemas/eppcom-1.0.xsd
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0
+ shared structures schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/host-1.0.xsd b/doc/schemas/host-1.0.xsd
new file mode 100644
index 000000000..47015ec83
--- /dev/null
+++ b/doc/schemas/host-1.0.xsd
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0
+ host provisioning schema.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/schemas/secDNS-1.1.xsd b/doc/schemas/secDNS-1.1.xsd
new file mode 100644
index 000000000..e9fe3f65a
--- /dev/null
+++ b/doc/schemas/secDNS-1.1.xsd
@@ -0,0 +1,130 @@
+
+
+
+
+
+ Extensible Provisioning Protocol v1.0
+ domain name extension schema
+ for provisioning DNS security (DNSSEC) extensions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spec/epp/contact_spec.rb b/spec/epp/contact_spec.rb
index 19a0a3d0d..02540e109 100644
--- a/spec/epp/contact_spec.rb
+++ b/spec/epp/contact_spec.rb
@@ -939,15 +939,6 @@ describe 'EPP Contact', epp: true do
end
end
end
-
- context 'renew command' do
- it 'returns 2101-unimplemented command' do
- response = epp_plain_request('contacts/renew.xml')
-
- response[:msg].should == 'Unimplemented command'
- response[:result_code].should == '2101'
- end
- end
end
def check_multiple_contacts_xml
diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb
index f9d355482..2bb129338 100644
--- a/spec/epp/domain_spec.rb
+++ b/spec/epp/domain_spec.rb
@@ -2,6 +2,7 @@ require 'rails_helper'
describe 'EPP Domain', epp: true do
before(:all) do
+ @xsd = Nokogiri::XML::Schema(File.read('doc/schemas/domain-1.0.xsd'))
@epp_xml = EppXml.new(cl_trid: 'ABC-12345')
@registrar1 = Fabricate(:registrar1, code: 'REGDOMAIN1')
@registrar2 = Fabricate(:registrar2, code: 'REGDOMAIN2')
@@ -27,7 +28,7 @@ describe 'EPP Domain', epp: true do
{ contact: { value: 'sh1111', attrs: { type: 'tech' } } },
{ contact: { value: 'sh2222', attrs: { type: 'tech' } } }
]
- }), :xml)
+ }))
response[:results][0][:msg].should == 'Contact was not found'
response[:results][0][:result_code].should == '2303'
@@ -56,7 +57,7 @@ describe 'EPP Domain', epp: true do
name: { value: 'test.ee' }
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2003'
response[:results][0][:msg].should ==
'Required parameter missing: create > create > ns [ns]'
@@ -79,7 +80,7 @@ describe 'EPP Domain', epp: true do
dn = next_domain_name
response = epp_plain_request(domain_create_xml({
name: { value: dn }
- }), :xml)
+ }))
d = Domain.last
response[:msg].should == 'Command completed successfully'
@@ -115,7 +116,7 @@ describe 'EPP Domain', epp: true do
end
it 'creates a domain with legal document' do
- response = epp_plain_request(domain_create_xml_with_legal_doc, :xml)
+ response = epp_plain_request(domain_create_xml_with_legal_doc)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
@@ -143,7 +144,7 @@ describe 'EPP Domain', epp: true do
# ]
# })
- # epp_plain_request(xml, :xml)
+ # epp_plain_request(xml)
# d = Domain.last
# ds = d.dnskeys.last
@@ -168,7 +169,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2306'
response[:msg].should == 'IPv4 is missing [ipv4]'
@@ -178,10 +179,10 @@ describe 'EPP Domain', epp: true do
# dn = next_domain_name
# epp_plain_request(domain_create_xml({
# name: { value: dn }
- # }), :xml)
+ # }))
# response = epp_plain_request(domain_create_xml({
# name: { value: dn }
- # }), :xml)
+ # }))
# response[:msg].should == 'Domain name already exists'
# response[:result_code].should == '2302'
@@ -191,24 +192,24 @@ describe 'EPP Domain', epp: true do
it 'does not create reserved domain' do
xml = domain_create_xml(name: { value: '1162.ee' })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2302'
response[:msg].should == 'Domain name is reserved or restricted [name_dirty]'
response[:clTRID].should == 'ABC-12345'
end
it 'does not create domain without contacts and registrant' do
- xml = domain_create_xml(contacts: [], registrant: false)
+ xml = domain_create_xml(_anonymus: [], registrant: false)
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2003'
response[:results][0][:msg].should ==
'Required parameter missing: create > create > registrant [registrant]'
end
it 'does not create domain without nameservers' do
- xml = domain_create_xml(ns: [])
- response = epp_plain_request(xml, :xml)
+ xml = domain_create_xml(ns: nil)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should ==
'Required parameter missing: create > create > ns [ns]'
@@ -235,7 +236,7 @@ describe 'EPP Domain', epp: true do
ns: nameservers
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2004'
response[:msg].should == 'Nameservers count must be between 2-11 [nameservers]'
end
@@ -256,7 +257,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Hostname is invalid [hostname]'
response[:result_code].should == '2005'
end
@@ -273,13 +274,13 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Required parameter missing: create > create > ns > hostAttr [host_attr]'
response[:result_code].should == '2003'
end
it 'creates domain with nameservers with ips' do
- epp_plain_request(domain_create_with_host_attrs, :xml)
+ epp_plain_request(domain_create_with_host_attrs)
Domain.last.nameservers.count.should == 2
ns = Domain.last.nameservers.first
ns.ipv4.should == '192.0.2.2'
@@ -289,7 +290,7 @@ describe 'EPP Domain', epp: true do
it 'returns error when nameserver has invalid ips' do
domain_count = Domain.count
nameserver_count = Nameserver.count
- response = epp_plain_request(domain_create_with_invalid_ns_ip_xml, :xml)
+ response = epp_plain_request(domain_create_with_invalid_ns_ip_xml)
response[:results][0][:result_code].should == '2005'
response[:results][0][:msg].should == 'IPv4 is invalid [ipv4]'
response[:results][0][:value].should == '192.0.2.2.invalid'
@@ -304,7 +305,7 @@ describe 'EPP Domain', epp: true do
it 'creates a domain with period in days' do
xml = domain_create_xml(period_value: 365, period_unit: 'd')
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
Domain.first.valid_to.should == 1.year.since.to_date
@@ -315,7 +316,7 @@ describe 'EPP Domain', epp: true do
period: { value: '367', attrs: { unit: 'd' } }
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2004'
response[:results][0][:msg].should == 'Period must add up to 1, 2 or 3 years [period]'
response[:results][0][:value].should == '367'
@@ -350,7 +351,7 @@ describe 'EPP Domain', epp: true do
]
})
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
d = Domain.last
d.dnskeys.count.should == 3
@@ -406,7 +407,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml, validate_input: false)
response[:results][0][:msg].should ==
'Valid algorithms are: 3, 5, 6, 7, 8, 252, 253, 254, 255 [alg]'
@@ -450,7 +451,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2302'
response[:msg].should == 'Public key already exists [public_key]'
@@ -479,7 +480,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2004'
response[:msg].should == 'DNS keys count must be between 0-1 [dnskeys]'
@@ -499,7 +500,7 @@ describe 'EPP Domain', epp: true do
}]
})
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
d = Domain.last
ds = d.dnskeys.first
@@ -531,7 +532,7 @@ describe 'EPP Domain', epp: true do
}]
})
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
d = Domain.last
ds = d.dnskeys.first
@@ -565,7 +566,7 @@ describe 'EPP Domain', epp: true do
# }]
# })
- # response = epp_plain_request(xml, :xml)
+ # response = epp_plain_request(xml)
# response[:result_code].should == '2306'
# response[:msg].should == 'dsData object with key data is not allowed'
@@ -592,7 +593,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2306'
response[:msg].should == 'dsData object is not allowed'
@@ -612,7 +613,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2306'
response[:msg].should == 'keyData object is not allowed'
@@ -640,7 +641,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml, validate_input: false)
response[:msg].should == 'Mutually exclusive parameters: extension > create > keyData, '\
'extension > create > dsData'
response[:result_code].should == '2306'
@@ -656,7 +657,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
response[:clTRID].should == 'ABC-12345'
@@ -678,7 +679,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Admin contacts count must be between 1-10 [admin_domain_contacts]'
response[:result_code].should == '2004'
response[:clTRID].should == 'ABC-12345'
@@ -695,7 +696,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Admin contact can be private person only'
response[:result_code].should == '2306'
end
@@ -716,14 +717,14 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
response = login_as :registrar2 do
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
end
domain.reload
@@ -740,7 +741,7 @@ describe 'EPP Domain', epp: true do
domain.registrar.should == @registrar2
- response = epp_plain_request(@epp_xml.session.poll, :xml)
+ response = epp_plain_request(@epp_xml.session.poll)
response[:msg].should == 'Command completed successfully; ack to dequeue'
msg_q = response[:parsed].css('msgQ')
@@ -760,13 +761,13 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
}) # request with new password
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
trn_data = response[:parsed].css('trnData')
domain.reload
@@ -785,7 +786,7 @@ describe 'EPP Domain', epp: true do
domain.registrar.should == @registrar2
# should return same data if pending already
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
trn_data = response[:parsed].css('trnData')
domain.domain_transfers.count.should == 2
@@ -802,7 +803,7 @@ describe 'EPP Domain', epp: true do
# should show up in other registrar's poll
response = login_as :registrar2 do
- epp_plain_request(@epp_xml.session.poll, :xml)
+ epp_plain_request(@epp_xml.session.poll)
end
response[:msg].should == 'Command completed successfully; ack to dequeue'
@@ -817,7 +818,7 @@ describe 'EPP Domain', epp: true do
})
response = login_as :registrar2 do
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
end
response[:msg].should == 'Command completed successfully'
@@ -838,14 +839,14 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '1000'
domain.legal_documents.count.should == 1
@@ -861,7 +862,7 @@ describe 'EPP Domain', epp: true do
end
response = login_as :registrar2 do
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
end
response[:result_code].should == '1000'
@@ -878,7 +879,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -897,7 +898,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -930,7 +931,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -965,7 +966,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -1003,7 +1004,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -1057,7 +1058,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -1110,7 +1111,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -1143,7 +1144,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
end
@@ -1163,7 +1164,7 @@ describe 'EPP Domain', epp: true do
})
login_as :registrar2 do
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Authorization error'
response[:result_code].should == '2201'
end
@@ -1183,13 +1184,13 @@ describe 'EPP Domain', epp: true do
}, 'approve', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
domain.reload
dtl = domain.domain_transfers.last
@@ -1219,21 +1220,21 @@ describe 'EPP Domain', epp: true do
}, 'reject', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
response = login_as :registrar2 do
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
end
response[:msg].should == 'Transfer can be rejected only by current registrar'
response[:result_code].should == '2304'
domain.legal_documents.count.should == 0
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '1000'
domain.pending_transfer.should be_nil
domain.legal_documents.count.should == 1
@@ -1253,14 +1254,14 @@ describe 'EPP Domain', epp: true do
}, 'approve', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
response = login_as :registrar2 do
- epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
end
response[:result_code].should == '2304'
@@ -1274,13 +1275,13 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2201'
response[:msg].should == 'Authorization error'
end
@@ -1293,20 +1294,20 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '2002'
response[:msg].should == 'Domain already belongs to the querying registrar'
end
it 'returns an error for incorrect op attribute' do
- response = epp_plain_request(domain_transfer_xml({}, 'bla'), :xml)
+ response = epp_plain_request(domain_transfer_xml({}, 'bla'), validate_input: false)
response[:result_code].should == '2306'
response[:msg].should == 'Attribute is invalid: op'
end
@@ -1319,15 +1320,15 @@ describe 'EPP Domain', epp: true do
}, 'query', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
login_as :registrar2 do
- epp_plain_request(xml, :xml) # transfer domain
- response = epp_plain_request(xml, :xml) # attempt second transfer
+ epp_plain_request(xml) # transfer domain
+ response = epp_plain_request(xml) # attempt second transfer
response[:result_code].should == '2201'
response[:msg].should == 'Authorization error'
end
@@ -1341,13 +1342,13 @@ describe 'EPP Domain', epp: true do
}, 'approve', {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:msg].should == 'Pending transfer was not found'
response[:result_code].should == '2303'
end
@@ -1366,11 +1367,11 @@ describe 'EPP Domain', epp: true do
response = epp_plain_request(domain_update_xml(xml_params, {}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:results][0][:msg].should == 'Command completed successfully'
response[:results][0][:result_code].should == '1000'
@@ -1395,11 +1396,11 @@ describe 'EPP Domain', epp: true do
response = epp_plain_request(domain_update_xml(xml_params, {}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:results][0][:msg].should == 'Command completed successfully; action pending'
response[:results][0][:result_code].should == '1001'
@@ -1503,11 +1504,11 @@ describe 'EPP Domain', epp: true do
response = epp_plain_request(domain_update_xml(xml_params, {}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:results][0][:msg].should == 'Object status prohibits operation'
response[:results][0][:result_code].should == '2304'
@@ -1563,13 +1564,13 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2303'
response[:results][0][:msg].should == 'Contact was not found'
Fabricate(:contact, code: 'FIXED:MAK21')
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '1000'
d = Domain.last
@@ -1587,7 +1588,7 @@ describe 'EPP Domain', epp: true do
d.domain_statuses.last.value.should == 'clientUpdateProhibited'
d.dnskeys.count.should == 2
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2302'
response[:results][0][:msg].should == 'Nameserver already exists on this domain [hostname]'
@@ -1647,9 +1648,6 @@ describe 'EPP Domain', epp: true do
it 'updates domain with registrant change what triggers action pending' do
xml = domain_update_xml({
name: { value: domain.name },
- chg: [
- registrant: { value: 'FIXED:CITIZEN_1234' }
- ],
add: [
{
ns: [
@@ -1670,6 +1668,9 @@ describe 'EPP Domain', epp: true do
{ status: { value: 'Payment overdue.', attrs: { s: 'clientHold', lang: 'en' } } },
{ status: { value: '', attrs: { s: 'clientUpdateProhibited' } } }
]
+ ],
+ chg: [
+ registrant: { value: 'FIXED:CITIZEN_1234' }
]
}, {
add: [
@@ -1693,19 +1694,19 @@ describe 'EPP Domain', epp: true do
{
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Contact was not found'
response[:results][0][:result_code].should == '2303'
Fabricate(:contact, code: 'FIXED:PENDINGMAK21')
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Command completed successfully; action pending'
response[:results][0][:result_code].should == '1001'
@@ -1736,7 +1737,7 @@ describe 'EPP Domain', epp: true do
}]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2306'
response[:results][0][:msg].should == "Parameter value policy error. Client-side object status "\
"management not supported: status [status]"
@@ -1788,7 +1789,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Command completed successfully'
response[:results][0][:result_code].should == '1000'
@@ -1815,13 +1816,16 @@ describe 'EPP Domain', epp: true do
}, {
rem: [
{ keyData: {
+ flags: { value: '256' },
+ protocol: { value: '3' },
+ alg: { value: '254' },
pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' }
}
}
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Command completed successfully'
response[:results][0][:result_code].should == '1000'
@@ -1836,7 +1840,7 @@ describe 'EPP Domain', epp: true do
rem_cnt = d.tech_contacts.find_by(code: 'FIXED:CITIZEN_1234')
rem_cnt.should be_falsey
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2303'
response[:results][0][:msg].should == 'Nameserver was not found'
@@ -1864,7 +1868,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2303'
response[:results][0][:msg].should == 'Status was not found'
@@ -1892,8 +1896,8 @@ describe 'EPP Domain', epp: true do
}
})
- epp_plain_request(xml, :xml)
- response = epp_plain_request(xml, :xml)
+ epp_plain_request(xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2302'
response[:results][0][:msg].should == 'Nameserver already exists on this domain [hostname]'
@@ -1912,7 +1916,7 @@ describe 'EPP Domain', epp: true do
]
}
- response = epp_plain_request(domain_update_xml(xml_params), :xml)
+ response = epp_plain_request(domain_update_xml(xml_params))
response[:results][0][:msg].should ==
'Required parameter missing: extension > extdata > legalDocument [legal_document]'
response[:results][0][:result_code].should == '2003'
@@ -1926,7 +1930,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml, validate_input: false)
response[:results][0][:result_code].should == '2303'
response[:results][0][:msg].should == 'Status was not found'
response[:results][0][:value].should == 'invalidStatus'
@@ -1941,7 +1945,7 @@ describe 'EPP Domain', epp: true do
period: { value: '1', attrs: { unit: 'y' } }
)
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Command completed successfully'
response[:results][0][:result_code].should == '1000'
@@ -1958,7 +1962,7 @@ describe 'EPP Domain', epp: true do
period: { value: '1', attrs: { unit: 'y' } }
)
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:result_code].should == '2306'
response[:results][0][:msg].should == 'Given and current expire dates do not match'
end
@@ -1972,7 +1976,7 @@ describe 'EPP Domain', epp: true do
period: { value: '4', attrs: { unit: 'y' } }
)
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Period must add up to 1, 2 or 3 years [period]'
response[:results][0][:result_code].should == '2004'
response[:results][0][:value].should == '4'
@@ -1987,7 +1991,7 @@ describe 'EPP Domain', epp: true do
ds_key_tag: '123',
ds_alg: 3,
ds_digest_type: 1,
- ds_digest: 'abc',
+ ds_digest: '0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB',
flags: 257,
protocol: 3,
alg: 3,
@@ -1998,7 +2002,7 @@ describe 'EPP Domain', epp: true do
ds_key_tag: '123',
ds_alg: 3,
ds_digest_type: 1,
- ds_digest: 'abc',
+ ds_digest: '0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB',
flags: 0,
protocol: 3,
alg: 5,
@@ -2008,7 +2012,7 @@ describe 'EPP Domain', epp: true do
domain.save
xml = domain_info_xml(name: { value: domain.name })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:results][0][:msg].should == 'Command completed successfully'
response[:results][0][:result_code].should == '1000'
response[:clTRID].should be_nil
@@ -2018,6 +2022,7 @@ describe 'EPP Domain', epp: true do
inf_data.css('status').text.should == 'Payment overdue.'
inf_data.css('status').first[:s].should == 'clientHold'
inf_data.css('registrant').text.should == domain.registrant_code
+ inf_data.css('roid').text.should == domain.roid
admin_contacts_from_request = inf_data.css('contact[type="admin"]').map(&:text)
admin_contacts_existing = domain.admin_contacts.pluck(:code)
@@ -2043,7 +2048,7 @@ describe 'EPP Domain', epp: true do
ds_data_1.css('keyTag').first.text.should == '123'
ds_data_1.css('alg').first.text.should == '3'
ds_data_1.css('digestType').first.text.should == '1'
- ds_data_1.css('digest').first.text.should == 'abc'
+ ds_data_1.css('digest').first.text.should == '0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB'
dnskey_1 = ds_data_1.css('keyData')[0]
dnskey_1.css('flags').first.text.should == '257'
@@ -2061,7 +2066,7 @@ describe 'EPP Domain', epp: true do
domain.touch
- response = epp_plain_request(domain_info_xml(name: { value: domain.name }), :xml)
+ response = epp_plain_request(domain_info_xml(name: { value: domain.name }))
inf_data = response[:parsed].css('resData infData')
inf_data.css('upDate').text.should == domain.updated_at.to_time.utc.iso8601
@@ -2076,13 +2081,13 @@ describe 'EPP Domain', epp: true do
domain.nameservers.build(hostname: "ns3.test.ee", ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A')
domain.save
- xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'inalid' } })
- response = epp_plain_request(xml, :xml)
+ xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'invalid' } })
+ response = epp_plain_request(xml, validate_input: false)
response[:msg].should == 'Attribute is invalid: hosts'
response[:result_code].should == '2306'
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'sub' } })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
inf_data = response[:parsed].css('resData infData')
inf_data.css('hostAttr').count.should == 2
@@ -2090,41 +2095,41 @@ describe 'EPP Domain', epp: true do
inf_data.css('hostName').last.text.should == "ns2.#{domain.name}"
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'del' } })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
inf_data = response[:parsed].css('resData infData')
inf_data.css('hostAttr').count.should == 1
inf_data.css('hostName').first.text.should == "ns3.test.ee"
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'none' } })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
inf_data = response[:parsed].css('resData infData')
inf_data.css('ns').count.should == 0
inf_data.css('hostAttr').count.should == 0
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'all' } })
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
inf_data = response[:parsed].css('resData infData')
inf_data.css('hostAttr').count.should == 3
end
it 'returns error when domain can not be found' do
- response = epp_plain_request(domain_info_xml(name: { value: 'test.ee' }), :xml)
+ response = epp_plain_request(domain_info_xml(name: { value: 'test.ee' }))
response[:results][0][:result_code].should == '2303'
response[:results][0][:msg].should == 'Domain not found'
end
it 'sets ok status by default' do
- response = epp_plain_request(domain_info_xml(name: { value: domain.name }), :xml)
+ response = epp_plain_request(domain_info_xml(name: { value: domain.name }))
inf_data = response[:parsed].css('resData infData')
inf_data.css('status').first[:s].should == 'ok'
end
it 'can not see other registrar domains with invalid password' do
login_as :registrar2 do
- response = epp_plain_request(domain_info_xml(name: { value: domain.name }), :xml)
+ response = epp_plain_request(domain_info_xml(name: { value: domain.name }))
response[:result_code].should == '2201'
response[:msg].should == 'Authorization error'
end
@@ -2135,7 +2140,7 @@ describe 'EPP Domain', epp: true do
response = epp_plain_request(domain_info_xml(
name: { value: domain.name },
authInfo: nil
- ), :xml)
+ ))
response[:result_code].should == '1000'
response[:parsed].css('authInfo pw').first.should == nil
@@ -2148,7 +2153,7 @@ describe 'EPP Domain', epp: true do
response = epp_plain_request(domain_info_xml(
name: { value: domain.name },
authInfo: { pw: { value: pw } }
- ), :xml)
+ ))
response[:result_code].should == '1000'
response[:parsed].css('authInfo pw').text.should == pw
@@ -2162,11 +2167,11 @@ describe 'EPP Domain', epp: true do
}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:msg].should == 'Command completed successfully; action pending'
response[:result_code].should == '1001'
@@ -2182,11 +2187,11 @@ describe 'EPP Domain', epp: true do
}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:result_code].should == '2304'
response[:msg].should == 'Domain status prohibits operation'
@@ -2200,18 +2205,18 @@ describe 'EPP Domain', epp: true do
}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
- }), :xml)
+ }))
response[:msg].should == 'Object status prohibits operation'
response[:result_code].should == '2304'
end
it 'does not delete domain without legal document' do
- response = epp_plain_request(@epp_xml.domain.delete(name: { value: 'example.ee' }), :xml)
+ response = epp_plain_request(@epp_xml.domain.delete(name: { value: 'example.ee' }))
response[:result_code].should == '2003'
response[:msg].should ==
'Required parameter missing: extension > extdata > legalDocument [legal_document]'
@@ -2223,7 +2228,7 @@ describe 'EPP Domain', epp: true do
_anonymus: [
{ name: { value: 'one.ee' } }
]
- }), :xml)
+ }))
response[:result_code].should == '1000'
response[:msg].should == 'Command completed successfully'
@@ -2236,7 +2241,7 @@ describe 'EPP Domain', epp: true do
_anonymus: [
{ name: { value: domain.name } }
]
- }), :xml)
+ }))
res_data = response[:parsed].css('resData chkData cd').first
name = res_data.css('name').first
reason = res_data.css('reason').first
@@ -2255,7 +2260,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '1000'
response[:msg].should == 'Command completed successfully'
@@ -2276,7 +2281,7 @@ describe 'EPP Domain', epp: true do
]
})
- response = epp_plain_request(xml, :xml)
+ response = epp_plain_request(xml)
response[:result_code].should == '1000'
response[:msg].should == 'Command completed successfully'
diff --git a/spec/epp/requests/contacts/renew.xml b/spec/epp/requests/contacts/renew.xml
deleted file mode 100644
index aeffaa569..000000000
--- a/spec/epp/requests/contacts/renew.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- info-4444
-
- 2fooBAR
-
-
-
- ABC-12345
-
-
diff --git a/spec/epp/session_spec.rb b/spec/epp/session_spec.rb
index 4f4cde6c4..b8a0d6c21 100644
--- a/spec/epp/session_spec.rb
+++ b/spec/epp/session_spec.rb
@@ -5,6 +5,7 @@ describe 'EPP Session', epp: true do
@api_user = Fabricate(:gitlab_api_user)
@epp_xml = EppXml.new(cl_trid: 'ABC-12345')
@login_xml_cache = @epp_xml.session.login(clID: { value: 'gitlab' }, pw: { value: 'ghyt9e4fu' })
+ @xsd = Nokogiri::XML::Schema(File.read('doc/schemas/epp-1.0.xsd'))
end
context 'when not connected' do
@@ -23,7 +24,7 @@ describe 'EPP Session', epp: true do
it 'does not log in with invalid user' do
wrong_user = @epp_xml.session.login(clID: { value: 'wrong-user' }, pw: { value: 'ghyt9e4fu' })
- response = epp_plain_request(wrong_user, :xml)
+ response = epp_plain_request(wrong_user)
response[:msg].should == 'Authentication error; server closing connection'
response[:result_code].should == '2501'
response[:clTRID].should == 'ABC-12345'
@@ -34,28 +35,29 @@ describe 'EPP Session', epp: true do
Fabricate(:api_user, username: 'inactive-user', active: false, registrar: @registrar)
inactive = @epp_xml.session.login(clID: { value: 'inactive-user' }, pw: { value: 'ghyt9e4fu' })
- response = epp_plain_request(inactive, :xml)
+ response = epp_plain_request(inactive)
response[:msg].should == 'Authentication error; server closing connection'
response[:result_code].should == '2501'
end
it 'prohibits further actions unless logged in' do
- response = epp_plain_request(@epp_xml.domain.create, :xml)
+ @xsd = Nokogiri::XML::Schema(File.read('doc/schemas/domain-1.0.xsd'))
+ response = epp_plain_request(@epp_xml.domain.info(name: { value: 'test.ee' }))
response[:msg].should == 'You need to login first.'
response[:result_code].should == '2002'
response[:clTRID].should == 'ABC-12345'
end
it 'should not have clTRID in response if client does not send it' do
- epp_xml_no_cltrid = EppXml.new(cl_trid: '')
+ epp_xml_no_cltrid = EppXml.new(cl_trid: false)
wrong_user = epp_xml_no_cltrid.session.login(clID: { value: 'wrong-user' }, pw: { value: 'ghyt9e4fu' })
- response = epp_plain_request(wrong_user, :xml)
+ response = epp_plain_request(wrong_user)
response[:clTRID].should be_nil
end
context 'with valid user' do
it 'logs in epp user' do
- response = epp_plain_request(@login_xml_cache, :xml)
+ response = epp_plain_request(@login_xml_cache)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
response[:clTRID].should == 'ABC-12345'
@@ -67,12 +69,12 @@ describe 'EPP Session', epp: true do
end
it 'does not log in twice' do
- response = epp_plain_request(@login_xml_cache, :xml)
+ response = epp_plain_request(@login_xml_cache)
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
response[:clTRID].should == 'ABC-12345'
- response = epp_plain_request(@login_xml_cache, :xml)
+ response = epp_plain_request(@login_xml_cache)
response[:msg].should match(/Already logged in. Use/)
response[:result_code].should == '2002'
@@ -84,10 +86,10 @@ describe 'EPP Session', epp: true do
it 'logs out epp user' do
c = EppSession.count
- epp_plain_request(@login_xml_cache, :xml)
+ epp_plain_request(@login_xml_cache)
EppSession.count.should == c + 1
- response = epp_plain_request(@epp_xml.session.logout, :xml)
+ response = epp_plain_request(@epp_xml.session.logout)
response[:msg].should == 'Command completed successfully; ending session'
response[:result_code].should == '1500'
@@ -100,7 +102,7 @@ describe 'EPP Session', epp: true do
clID: { value: 'gitlab' },
pw: { value: 'ghyt9e4fu' },
newPW: { value: 'abcdefg' }
- ), :xml)
+ ))
response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000'
@@ -115,7 +117,22 @@ describe 'EPP Session', epp: true do
clID: { value: 'gitlab' },
pw: { value: 'ghyt9e4fu' },
newPW: { value: '' }
- ), :xml)
+ ), validate_input: false)
+
+ response[:msg].should == 'Password is missing [password]'
+ response[:result_code].should == '2306'
+
+ @api_user.reload
+ @api_user.password.should == 'ghyt9e4fu'
+ end
+
+ it 'fails if new password is not valid' do
+ @api_user.update(password: 'ghyt9e4fu')
+ response = epp_plain_request(@epp_xml.session.login(
+ clID: { value: 'gitlab' },
+ pw: { value: 'ghyt9e4fu' },
+ newPW: { value: '' }
+ ), validate_input: false)
response[:msg].should == 'Password is missing [password]'
response[:result_code].should == '2306'
diff --git a/spec/support/epp.rb b/spec/support/epp.rb
index f877bfc2f..5e9847d48 100644
--- a/spec/support/epp.rb
+++ b/spec/support/epp.rb
@@ -66,15 +66,27 @@ module Epp
end
def epp_plain_request(data, *args)
- res = parse_response(server.send_request(data)) if args.include?(:xml)
- if res
- log(data, res[:parsed])
- return res
+ options = args.extract_options!
+ validate_input = options[:validate_input] != false # true by default
+ validate_output = options[:validate_output] != false # true by default
+
+ if validate_input && @xsd
+ xml = Nokogiri::XML(data)
+ @xsd.validate(xml).each do |error|
+ fail Exception.new, error.to_s
+ end
end
- res = parse_response(server.send_request(read_body(data)))
- log(read_body(data), res[:parsed])
- return res
+ res = parse_response(server.send_request(data))
+ if res
+ log(data, res[:parsed])
+ if validate_output && @xsd
+ @xsd.validate(Nokogiri(res[:raw])).each do |error|
+ fail Exception.new, error.to_s
+ end
+ end
+ return res
+ end
rescue => e
e
end
@@ -127,7 +139,7 @@ module Epp
xml_params = defaults.deep_merge(xml_params)
- epp_xml = EppXml::Domain.new(cl_trid: '')
+ epp_xml = EppXml::Domain.new(cl_trid: false)
epp_xml.info(xml_params)
end
@@ -176,7 +188,7 @@ module Epp
custom_params = {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
@@ -219,7 +231,7 @@ module Epp
epp_xml.create(xml_params, {}, {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
@@ -260,7 +272,7 @@ module Epp
custom_params = {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]
@@ -304,7 +316,7 @@ module Epp
custom_params = {
_anonymus: [
legalDocument: {
- value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==',
+ value: 'dGVzdCBmYWlsCg==',
attrs: { type: 'pdf' }
}
]