diff --git a/Gemfile b/Gemfile index db9d4e366..62e00f4f8 100644 --- a/Gemfile +++ b/Gemfile @@ -99,7 +99,7 @@ group :development, :test do gem 'epp', '~> 1.4.0' # EPP XMLs - gem 'epp-xml', '~> 0.10.1' + gem 'epp-xml', '~> 0.10.2' # Replacement for fixtures gem 'fabrication', '~> 2.11.3' diff --git a/Gemfile.lock b/Gemfile.lock index 2669b642f..8cfb5425b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -107,7 +107,7 @@ GEM epp (1.4.0) hpricot libxml-ruby - epp-xml (0.10.1) + epp-xml (0.10.2) activesupport (~> 4.1) builder (~> 3.2) equalizer (0.0.9) @@ -148,7 +148,7 @@ GEM hike (1.2.3) hitimes (1.2.2) hpricot (0.8.6) - i18n (0.6.11) + i18n (0.7.0) ice_nine (0.11.0) isikukood (0.1.2) iso8601 (0.8.2) @@ -388,7 +388,7 @@ DEPENDENCIES delayed_job_active_record (~> 4.0.2) devise (~> 3.3.0) epp (~> 1.4.0) - epp-xml (~> 0.10.1) + epp-xml (~> 0.10.2) fabrication (~> 2.11.3) faker (~> 1.3.0) guard (~> 2.6.1) diff --git a/app/models/domain.rb b/app/models/domain.rb index 808fcc228..3af14098d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -35,6 +35,8 @@ class Domain < ActiveRecord::Base accepts_nested_attributes_for :dnskeys, allow_destroy: true, reject_if: proc { |attrs| attrs[:public_key].blank? } + has_many :legal_documents, as: :documentable + delegate :code, to: :owner_contact, prefix: true delegate :email, to: :owner_contact, prefix: true delegate :ident, to: :owner_contact, prefix: true diff --git a/app/models/epp/epp_domain.rb b/app/models/epp/epp_domain.rb index d43de8c94..b5c7e0b61 100644 --- a/app/models/epp/epp_domain.rb +++ b/app/models/epp/epp_domain.rb @@ -54,6 +54,7 @@ class Epp::EppDomain < Domain attach_contacts(self.class.parse_contacts_from_frame(parsed_frame)) attach_nameservers(self.class.parse_nameservers_from_frame(parsed_frame)) attach_statuses(self.class.parse_statuses_from_frame(parsed_frame)) + attach_legal_document(self.class.parse_legal_document_from_frame(parsed_frame)) errors.empty? end @@ -92,6 +93,15 @@ class Epp::EppDomain < Domain errors.empty? end + def attach_legal_document(legal_document_data) + return unless legal_document_data + + legal_documents.build( + document_type: legal_document_data[:type], + body: legal_document_data[:body] + ) + end + def attach_owner_contact(code) return unless code self.owner_contact = Contact.find_by(code: code) @@ -528,6 +538,16 @@ class Epp::EppDomain < Domain res end + def parse_legal_document_from_frame(parsed_frame) + ld = parsed_frame.css('legalDocument').first + return nil unless ld + + { + body: ld.text, + type: ld['type'] + } + end + def check_availability(domains) domains = [domains] if domains.is_a?(String) diff --git a/app/models/legal_document.rb b/app/models/legal_document.rb new file mode 100644 index 000000000..0f690480b --- /dev/null +++ b/app/models/legal_document.rb @@ -0,0 +1,3 @@ +class LegalDocument < ActiveRecord::Base + belongs_to :documentable, polymorphic: true +end diff --git a/db/migrate/20141229115619_create_legal_documents.rb b/db/migrate/20141229115619_create_legal_documents.rb new file mode 100644 index 000000000..f66456415 --- /dev/null +++ b/db/migrate/20141229115619_create_legal_documents.rb @@ -0,0 +1,11 @@ +class CreateLegalDocuments < ActiveRecord::Migration + def change + create_table :legal_documents do |t| + t.string :document_type + t.text :body + t.references :documentable, polymorphic: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e00caf67b..04c5b70c5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20141218154829) do +ActiveRecord::Schema.define(version: 20141229115619) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -245,6 +245,15 @@ ActiveRecord::Schema.define(version: 20141218154829) do t.datetime "updated_at" end + create_table "legal_documents", force: true do |t| + t.string "document_type" + t.text "body" + t.integer "documentable_id" + t.string "documentable_type" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "messages", force: true do |t| t.integer "registrar_id" t.string "body" diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 0e0cec11d..fed556bc7 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -245,6 +245,15 @@ describe 'EPP Domain', epp: true do expect(key.public_key).to eq('AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8') end + it 'creates a domain with legal document' do + response = epp_request(domain_create_xml_with_legal_doc, :xml) + + expect(response[:result_code]).to eq('1000') + expect(response[:msg]).to eq('Command completed successfully') + d = Domain.first + expect(d.legal_documents.count).to eq(1) + end + it 'creates ria.ee with valid ds record' do xml = domain_create_xml({ name: { value: 'ria.ee' } diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index 2ea9efe9a..2d2abded4 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -8,6 +8,7 @@ describe Domain do it { should have_many(:admin_contacts) } it { should have_many(:domain_transfers) } it { should have_many(:dnskeys) } + it { should have_many(:legal_documents) } context 'with sufficient settings' do before(:each) do diff --git a/spec/support/epp.rb b/spec/support/epp.rb index a35580384..68072905d 100644 --- a/spec/support/epp.rb +++ b/spec/support/epp.rb @@ -128,6 +128,208 @@ module Epp epp_xml.create(xml_params, dnssec_params) end + def domain_create_xml_with_legal_doc + epp_xml = EppXml::Domain.new(cl_trid: 'ABC-12345') + + epp_xml.create({ + name: { value: 'example.ee' }, + period: { value: '1', attrs: { unit: 'y' } }, + ns: [ + { + hostAttr: [ + { hostName: { value: 'ns1.example.net' } }, + { hostAddr: { value: '192.0.2.2', attrs: { ip: 'v4' } } }, + { hostAddr: { value: '1080:0:0:0:8:800:200C:417A', attrs: { ip: 'v6' } } } + ] + }, + { + hostAttr: { + hostName: { value: 'ns2.example.net' } + } + } + ], + registrant: { value: 'jd1234' }, + _anonymus: [ + { contact: { value: 'sh8013', attrs: { type: 'admin' } } }, + { contact: { value: 'sh8013', attrs: { type: 'tech' } } }, + { contact: { value: 'sh801333', attrs: { type: 'tech' } } } + ] + }, {}, { + _anonymus: [ + legalDocument: { value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp'\ +'bHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nCWKsQrCMBRF9/cVdxaavBfz'\ +'mhZCBrEKbsGAg7hZuymNg79vRO5yOOeyEXxoBYMb6ajGYfBiBtSZLhs8/62t'\ +'LrQrpH1LIfh2LnfYg0AcyuMaWVIIkV2SyNvUucg+dRpZuefwk0Nqbky3cqKp'\ +'UKaMFXY6nhXLG7ZUj/0Lmb7IGR/MCmVuZHN0cmVhbQplbmRvYmoKCjMgMCBv'\ +'YmoKMTMwCmVuZG9iagoKNCAwIG9iago8PC9UeXBlL1hPYmplY3QKL1N1YnR5'\ +'cGUvRm9ybQovQkJveFsgLTExMiA0MjAgNzA4IDQyMC4xIF0KL0dyb3VwPDwv'\ +'Uy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0sgdHJ1ZT4+Ci9MZW5ndGgg'\ +'OAovRmlsdGVyL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nAMAAAAAAQplbmRz'\ +'dHJlYW0KZW5kb2JqCgo1IDAgb2JqCjw8L0NBIDAuNQogICAvY2EgMC41Cj4+'\ +'CmVuZG9iagoKNyAwIG9iago8PC9MZW5ndGggOCAwIFIvRmlsdGVyL0ZsYXRl'\ +'RGVjb2RlL0xlbmd0aDEgODQ0ND4+CnN0cmVhbQp4nOVYfVBbV3Y/970noQ9A'\ +'EpZknoXRk5/Fh4UkQMZgm4AASQiDgzCQCBxAMhKg2HxYkp11nKzZTZx45bh2'\ +'s9t81G7jpNtOJtkZP+y0QzZpTKbZdjqbxJvZzW63G2/c2Z1pZ2Jqb5pkduLY'\ +'9NwngT822Z3pdqZ/9CK9d87vfNxzzj33vofSyX1xyIdZYME7OhmdWVegVQHA'\ +'2wCkaHR/Wlhq9QpIXwJgzGMz45MVnl/8JwD7W4A8xfieA2P/oGu9DqBFE01k'\ +'Ih6NHaj/eg2AKYLApgkEum8cyEP+GeTXT0ymv/ZjrnM18q8jX7ZnejS6Rfsf'\ +'hcj/GnnzZPRrM3+lPMwh/wXywlR0Mr49/vx3UFQCoOqamU6lY7B+CaB0gspn'\ +'kvGZTwefxnhLj2B8acQI/tGRj6SS8gzLKZR5KjX8Px2KY2CCoOIu0MGMfL1t'\ +'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'\ +'0SzHcns+/5dzs7k3HRvO+CVjTh15g+TR/xLl63nCeQfIpevkwnUiXCeHrpHQ'\ +'NTL78YmPmd9crbSeuXr+KtN9ZeTKmSts9RWiu0JUsKhfDC1GFmcWTy8qNbrL'\ +'JB8+IoZfXWqwfui52P9Lzwf9cJE0hi7OXpQusvT9bvCiShu4SNj+D1izVb8g'\ +'LFQvzCzMLvxo4dLC1QXV7Bsn3mD+/nW3Vfe69XXGeq773KFzbORFonvR+iIT'\ +'Ohk5yZw4RXSnrKfcp9g/f9Zlfba91Pr0U+XWS09dfYqh7uueKjAERv6MHHry'\ +'+JPMzGOzj514jJ09fOIwc2b/+f1MKlRpnZ5yWKfaN1h5T3F/noftV7JL8ou2'\ +'b5e9IhAZ8VpHUGnnYLV1sL3SuspT1K/AYDlU1LFWtpntZqfZ4+x5Nk+1I1Rq'\ +'7cHvpdDVEKPrtna7u+X/k6KdNnS0bWbb7Da2I1BpDbY3WHXt1nZ3+4X2D9uv'\ +'tCtH2slz+AmcCZwPsN5ApTvgDZTaAiVBS7/ZY+rXe3T9DIF+4oF+t25Jx+h0'\ +'I7pDOlaH/8kzs2aiIPPkxFxfr8PROZ+3tKNTUoV2SuSIZO+lV2/PoKQ8IkH/'\ +'4M7wHCF/MnD42DFoXdsp1faGpcjagU4phoSXErNI6NfOmaF1IJVKO+jAV20k'\ +'9+EVHPsQGk5lQXAsi8GRIqkUpFLEQWUyiQikHBSmCLUhaDmcAnqhUoesRalU'\ +'qnj4vwGYP7CyCmVuZHN0cmVhbQplbmRvYmoKCjggMCBvYmoKNTE1NQplbmRv'\ +'YmoKCjkgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9C'\ +'QUFBQUErTGliZXJhdGlvblNlcmlmCi9GbGFncyA0Ci9Gb250QkJveFstMTc2'\ +'IC0zMDMgMTAwNSA5ODFdL0l0YWxpY0FuZ2xlIDAKL0FzY2VudCA4OTEKL0Rl'\ +'c2NlbnQgLTIxNgovQ2FwSGVpZ2h0IDk4MQovU3RlbVYgODAKL0ZvbnRGaWxl'\ +'MiA3IDAgUgo+PgplbmRvYmoKCjEwIDAgb2JqCjw8L0xlbmd0aCAyNjMvRmls'\ +'dGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZDNasQgFIX3PoXL6WLQZCaZ'\ +'BoJQUgay6A9N+wBGb1KhUTFmkbevP9MWulC+yz1H77mk6x97rTx5dUYM4PGk'\ +'tHSwms0JwCPMSqOixFIJf6vSLRZuEQneYV89LL2eTNsi8hZ6q3c7PjxIM8Id'\ +'Ii9OglN6xoePbgj1sFn7BQtojyliDEuYwjtP3D7zBUhyHXsZ2srvx2D5E7zv'\ +'FnCZ6iKPIoyE1XIBjusZUEspw+31yhBo+a/XZMc4iU/ugrIISkqrMwtcJq6r'\ +'yKfEl1Pkc+akqRKXNHKd9XXkS+Yi8n3mJnKTuUuz3H6NU8W1/aTFYnMuJE27'\ +'TRFjOKXhd/3W2OhK5xucIn/9CmVuZHN0cmVhbQplbmRvYmoKCjExIDAgb2Jq'\ +'Cjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0JBQUFB'\ +'QStMaWJlcmF0aW9uU2VyaWYKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciA5Ci9X'\ +'aWR0aHNbMzY1IDYxMCA0NDMgMzg5IDI3NyAyNTAgMzMzIDQ0MyAyNzcgMjc3'\ +'IF0KL0ZvbnREZXNjcmlwdG9yIDkgMCBSCi9Ub1VuaWNvZGUgMTAgMCBSCj4+'\ +'CmVuZG9iagoKMTIgMCBvYmoKPDwvRjEgMTEgMCBSCj4+CmVuZG9iagoKMTMg'\ +'MCBvYmoKPDwvRm9udCAxMiAwIFIKL1hPYmplY3Q8PC9UcjQgNCAwIFI+Pgov'\ +'RXh0R1N0YXRlPDwvRUdTNSA1IDAgUj4+Ci9Qcm9jU2V0Wy9QREYvVGV4dC9J'\ +'bWFnZUMvSW1hZ2VJL0ltYWdlQl0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5'\ +'cGUvUGFnZS9QYXJlbnQgNiAwIFIvUmVzb3VyY2VzIDEzIDAgUi9NZWRpYUJv'\ +'eFswIDAgNTk1IDg0Ml0vR3JvdXA8PC9TL1RyYW5zcGFyZW5jeS9DUy9EZXZp'\ +'Y2VSR0IvSSB0cnVlPj4vQ29udGVudHMgMiAwIFI+PgplbmRvYmoKCjYgMCBv'\ +'YmoKPDwvVHlwZS9QYWdlcwovUmVzb3VyY2VzIDEzIDAgUgovTWVkaWFCb3hb'\ +'IDAgMCA1OTUgODQyIF0KL0tpZHNbIDEgMCBSIF0KL0NvdW50IDE+PgplbmRv'\ +'YmoKCjE0IDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyA2IDAgUgovT3Bl'\ +'bkFjdGlvblsxIDAgUiAvWFlaIG51bGwgbnVsbCAwXQovTGFuZyhlbi1VUykK'\ +'Pj4KZW5kb2JqCgoxNSAwIG9iago8PC9DcmVhdG9yPEZFRkYwMDU3MDA3MjAw'\ +'NjkwMDc0MDA2NTAwNzI+Ci9Qcm9kdWNlcjxGRUZGMDA0QzAwNjkwMDYyMDA3'\ +'MjAwNjUwMDRGMDA2NjAwNjYwMDY5MDA2MzAwNjUwMDIwMDAzNDAwMkUwMDMy'\ +'PgovQ3JlYXRpb25EYXRlKEQ6MjAxNDEyMjkxMjM5MTkrMDInMDAnKT4+CmVu'\ +'ZG9iagoKeHJlZgowIDE2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwNjYw'\ +'MiAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDAyMjAgMDAw'\ +'MDAgbiAKMDAwMDAwMDI0MCAwMDAwMCBuIAowMDAwMDAwNDE5IDAwMDAwIG4g'\ +'CjAwMDAwMDY3NDUgMDAwMDAgbiAKMDAwMDAwMDQ1OSAwMDAwMCBuIAowMDAw'\ +'MDA1Njk4IDAwMDAwIG4gCjAwMDAwMDU3MTkgMDAwMDAgbiAKMDAwMDAwNTkx'\ +'NCAwMDAwMCBuIAowMDAwMDA2MjQ3IDAwMDAwIG4gCjAwMDAwMDY0NDQgMDAw'\ +'MDAgbiAKMDAwMDAwNjQ3NyAwMDAwMCBuIAowMDAwMDA2ODQ0IDAwMDAwIG4g'\ +'CjAwMDAwMDY5NDEgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDE2L1Jvb3Qg'\ +'MTQgMCBSCi9JbmZvIDE1IDAgUgovSUQgWyA8MTM0NjQ3Qzk5NTQ5RDA2RTZB'\ +'RUI5ODBDOERCRENBRUM+CjwxMzQ2NDdDOTk1NDlEMDZFNkFFQjk4MEM4REJE'\ +'Q0FFQz4gXQovRG9jQ2hlY2tzdW0gLzFDNzgzNDRCNkIxRTEzQjlBQ0Y0NTlC'\ +'OEExMzZDNEY1Cj4+CnN0YXJ0eHJlZgo3MTE2CiUlRU9GCg==', attrs: { type: 'pdf' } } + ] + }) + end + def domain_create_with_invalid_ns_ip_xml xml_params = { name: { value: 'example.ee' }, @@ -230,8 +432,18 @@ module Epp def log(req, res) return unless ENV['EPP_DOC'] - puts "REQUEST:\n\n```xml\n#{Nokogiri(req)}```\n\n" - puts "RESPONSE:\n\n```xml\n#{res}```\n\n" + puts "REQUEST: + + ```xml + #{Nokogiri(req)}``` + + " + puts "RESPONSE: + + ```xml + #{res}``` + + " end end