diff --git a/app/views/epp/contacts/info.xml.builder b/app/views/epp/contacts/info.xml.builder index 7067ed1e9..525396772 100644 --- a/app/views/epp/contacts/info.xml.builder +++ b/app/views/epp/contacts/info.xml.builder @@ -5,7 +5,7 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:infData', 'xmlns:contact' => Xsd::Schema.filename(for_prefix: 'contact-ee')) do + xml.tag!('contact:infData', 'xmlns:contact' => Xsd::Schema.filename(for_prefix: 'contact-ee', for_version: '1.1')) do xml.tag!('contact:id', @contact.code) xml.tag!('contact:roid', @contact.roid) @@ -78,7 +78,7 @@ xml.epp_head do end if can? :view_full_info, @contact, @password xml.tag!('extension') do - xml.tag!('eis:extdata', 'xmlns:eis' => Xsd::Schema.filename(for_prefix: 'eis')) do + xml.tag!('eis:extdata', 'xmlns:eis' => Xsd::Schema.filename(for_prefix: 'eis', for_version: '1.0')) do xml.tag!('eis:ident', @contact.ident, type: @contact.ident_type, cc: @contact.ident_country_code) end diff --git a/app/views/epp/domains/check.xml.builder b/app/views/epp/domains/check.xml.builder index 6a37d8382..fff382ab7 100644 --- a/app/views/epp/domains/check.xml.builder +++ b/app/views/epp/domains/check.xml.builder @@ -6,7 +6,7 @@ xml.epp_head do xml.resData do xml.tag!('domain:chkData', - 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix)) do + 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix, for_version: @schema_version)) do @domains.each do |x| xml.tag!('domain:cd') do xml.tag!('domain:name', x[:name], 'avail' => x[:avail]) diff --git a/app/views/epp/domains/create.xml.builder b/app/views/epp/domains/create.xml.builder index e1338780a..d2e1e293b 100644 --- a/app/views/epp/domains/create.xml.builder +++ b/app/views/epp/domains/create.xml.builder @@ -6,7 +6,7 @@ xml.epp_head do xml.resData do xml.tag!('domain:creData', - 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix)) do + 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix, for_version: @schema_version)) do xml.tag!('domain:name', @domain.name) xml.tag!('domain:crDate', @domain.created_at.try(:iso8601)) xml.tag!('domain:exDate', @domain.valid_to.iso8601) diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder index e836265d7..8e7f351ee 100644 --- a/app/views/epp/domains/info.xml.builder +++ b/app/views/epp/domains/info.xml.builder @@ -6,7 +6,7 @@ xml.epp_head do xml.resData do xml.tag! 'domain:infData', - 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix) do + 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix, for_version: @schema_version) do xml.tag!('domain:name', @domain.name) xml.tag!('domain:roid', @domain.roid) @domain.statuses.each do |s| diff --git a/app/views/epp/domains/partials/_transfer.xml.builder b/app/views/epp/domains/partials/_transfer.xml.builder index e9de73ce3..dbe8ad384 100644 --- a/app/views/epp/domains/partials/_transfer.xml.builder +++ b/app/views/epp/domains/partials/_transfer.xml.builder @@ -1,4 +1,4 @@ -builder.tag!('domain:trnData', 'xmlns:domain' => Xsd::Schema.filename(for_prefix: 'domain-ee')) do +builder.tag!('domain:trnData', 'xmlns:domain' => Xsd::Schema.filename(for_prefix: 'domain-ee', for_version: @schema_version)) do builder.tag!('domain:name', dt.domain_name) builder.tag!('domain:trStatus', dt.status) builder.tag!('domain:reID', dt.new_registrar.code) diff --git a/app/views/epp/domains/renew.xml.builder b/app/views/epp/domains/renew.xml.builder index 4b7b64cdd..18165b418 100644 --- a/app/views/epp/domains/renew.xml.builder +++ b/app/views/epp/domains/renew.xml.builder @@ -6,7 +6,7 @@ xml.epp_head do xml.resData do xml.tag!('domain:renData', - 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix)) do + 'xmlns:domain' => Xsd::Schema.filename(for_prefix: @schema_prefix, for_version: @schema_version)) do xml.tag!('domain:name', @domain[:name]) xml.tag!('domain:exDate', @domain.valid_to.iso8601) end diff --git a/lib/epp_constraint.rb b/lib/epp_constraint.rb index 122be7593..845671173 100644 --- a/lib/epp_constraint.rb +++ b/lib/epp_constraint.rb @@ -1,8 +1,8 @@ class EppConstraint OBJECT_TYPES = { domain: [ - { domain: Xsd::Schema.filename(for_prefix: 'domain-ee') }, - { domain: Xsd::Schema.filename(for_prefix: 'domain-eis') }, + { domain: Xsd::Schema.filename(for_prefix: 'domain-ee', for_version: '1.1') }, + { domain: Xsd::Schema.filename(for_prefix: 'domain-eis', for_version: '1.0') }, ], contact: { contact: Xsd::Schema.filename(for_prefix: 'contact-ee') }, }.freeze diff --git a/lib/xsd/schema.rb b/lib/xsd/schema.rb index 2ac57fb3a..d4b6b23f6 100644 --- a/lib/xsd/schema.rb +++ b/lib/xsd/schema.rb @@ -19,11 +19,12 @@ module Xsd secDNS ].freeze - attr_reader :xsd_schemas, :for_prefix + attr_reader :xsd_schemas, :for_prefix, :for_version def initialize(params) schema_path = params.fetch(:schema_path, SCHEMA_PATH) @for_prefix = params.fetch(:for_prefix) + @for_version = params.fetch(:for_version, '1.1') @xsd_schemas = Dir.entries(schema_path).select { |f| File.file? File.join(schema_path, f) } end @@ -38,10 +39,42 @@ module Xsd private + # xml = response.gsub!(/(?<=>)(.*?)(?=<)/, &:strip) + # xml.to_s.match(/xmlns:domain=\"https:\/\/epp.tld.ee\/schema\/(?\w+-\w+)-(?\w.\w).xsd/) + # The prefix and version of the response are returned are these variants - res[:prefix] res[:version] + def latest(prefix) - schemas_by_name[prefix].last + schemas = schemas_by_name[prefix] + + actual_schema = '' + + schemas.each do |schema| + result = return_some(schema) + + if result[:version] == @for_version + actual_schema = schema + end + + if result[:prefix] == 'epp-ee' + actual_schema = 'epp-ee-1.0.xsd' + end + + if result[:prefix] == 'eis' + actual_schema = 'eis-1.0.xsd' + end + end + + actual_schema end + def return_some(data) + res = data.to_s.match(/(?\w+-\w+)-(?\w.\w).xsd/) + + res = data.to_s.match(/(?\w+)-(?\w.\w).xsd/) if res.nil? + + res + end + def basename(filename) File.basename(filename, '.xsd') end diff --git a/test/integration/epp/domain/create/base_test.rb b/test/integration/epp/domain/create/base_test.rb index 4c6b9e7af..0bc8206b4 100644 --- a/test/integration/epp/domain/create/base_test.rb +++ b/test/integration/epp/domain/create/base_test.rb @@ -38,6 +38,7 @@ class EppDomainCreateBaseTest < EppTestCase XML + assert_no_difference 'Domain.count' do post epp_create_path, params: { frame: request_xml }, headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } diff --git a/test/integration/epp/domain/info/base_test.rb b/test/integration/epp/domain/info/base_test.rb index 5462f8f86..355d1ed4b 100644 --- a/test/integration/epp/domain/info/base_test.rb +++ b/test/integration/epp/domain/info/base_test.rb @@ -66,7 +66,7 @@ class EppDomainInfoBaseTest < EppTestCase - + shop.test diff --git a/test/lib/xsd_schema/xsd_schema_test.rb b/test/lib/xsd_schema/xsd_schema_test.rb index 0d3e30103..d51e0f443 100644 --- a/test/lib/xsd_schema/xsd_schema_test.rb +++ b/test/lib/xsd_schema/xsd_schema_test.rb @@ -8,13 +8,13 @@ class XsdSchemaTest < ActiveSupport::TestCase end def test_single_part_name - filename = Xsd::Schema.filename(schema_path: @schema_path, for_prefix: 'abcde') + filename = Xsd::Schema.filename(schema_path: @schema_path, for_prefix: 'abcde', for_version: '1.2') assert_equal Xsd::Schema::BASE_URL + 'abcde-1.2.xsd', filename end def test_double_part_name - filename = Xsd::Schema.filename(schema_path: @schema_path, for_prefix: 'abcde-fghij') + filename = Xsd::Schema.filename(schema_path: @schema_path, for_prefix: 'abcde-fghij', for_version: '1.3') assert_equal Xsd::Schema::BASE_URL + 'abcde-fghij-1.3.xsd', filename end