From 22f753aa6c42b6a091f15322d861ef882b6cf575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andres=20Keskk=C3=BCla?= Date: Fri, 29 Aug 2014 11:51:56 +0300 Subject: [PATCH] Contact info command now honors disclosure --- .../epp/contacts/_postal_info.xml.builder | 34 +++++++++++-------- app/views/epp/contacts/info.xml.builder | 6 ++-- spec/epp/contact_spec.rb | 13 +++++++ .../contact_disclosure_fabricator.rb | 10 ++++++ spec/fabricators/contact_fabricator.rb | 1 + 5 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 spec/fabricators/contact_disclosure_fabricator.rb diff --git a/app/views/epp/contacts/_postal_info.xml.builder b/app/views/epp/contacts/_postal_info.xml.builder index ffa165bb7..280722b33 100644 --- a/app/views/epp/contacts/_postal_info.xml.builder +++ b/app/views/epp/contacts/_postal_info.xml.builder @@ -1,26 +1,30 @@ if @contact.international_address address = @contact.international_address xml.tag!('contact:postalInfo', type: 'int') do # TODO instance method of defining type - xml.tag!('contact:name', address.name) - xml.tag!('contact:org', address.org_name) - xml.tag!('contact:addr') do - xml.tag!('contact:street', address.street) if address.street - xml.tag!('contact:street', address.street2) if address.street2 - xml.tag!('contact:street', address.street3) if address.street3 - xml.tag!('contact:cc', address.try(:country).try(:iso)) unless address.try(:country).nil? + xml.tag!('contact:name', address.name) if @contact.disclosure.int_name + xml.tag!('contact:org', address.org_name) if @contact.disclosure.int_org_name + if @contact.disclosure.int_addr + xml.tag!('contact:addr') do + xml.tag!('contact:street', address.street) if address.street + xml.tag!('contact:street', address.street2) if address.street2 + xml.tag!('contact:street', address.street3) if address.street3 + xml.tag!('contact:cc', address.try(:country).try(:iso)) unless address.try(:country).nil? + end end end end if @contact.local_address address = @contact.local_address - xml.tag!('contact:postalInfo', type: 'loc') do - xml.tag!('contact:name', address.name) - xml.tag!('contact:org', address.org_name) - xml.tag!('contact:addr') do - xml.tag!('contact:street', address.street) if address.street - xml.tag!('contact:street', address.street2) if address.street2 - xml.tag!('contact:street', address.street3) if address.street3 - xml.tag!('contact:cc', address.try(:country).try(:iso)) unless address.try(:country).nil? + xml.tag!('contact:postalInfo', type: 'loc') do + xml.tag!('contact:name', address.name) if @contact.disclosure.loc_name + xml.tag!('contact:org', address.org_name) if @contact.disclosure.loc_org_name + if @contact.disclosure.loc_addr + xml.tag!('contact:addr') do + xml.tag!('contact:street', address.street) if address.street + xml.tag!('contact:street', address.street2) if address.street2 + xml.tag!('contact:street', address.street3) if address.street3 + xml.tag!('contact:cc', address.try(:country).try(:iso)) unless address.try(:country).nil? + end end end end diff --git a/app/views/epp/contacts/info.xml.builder b/app/views/epp/contacts/info.xml.builder index 9bd654ca2..f501b1bf7 100644 --- a/app/views/epp/contacts/info.xml.builder +++ b/app/views/epp/contacts/info.xml.builder @@ -7,9 +7,9 @@ xml.epp_head do xml.resData do xml.tag!('contact:chkData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do xml << render('/epp/contacts/postal_info') - xml.tag!('contact:voice', @contact.phone) - xml.tag!('contact:fax', @contact.fax) - xml.tag!('contact:email', @contact.email) + xml.tag!('contact:voice', @contact.phone) if @contact.disclosure.phone + xml.tag!('contact:fax', @contact.fax) if @contact.disclosure.fax + xml.tag!('contact:email', @contact.email) if @contact.disclosure.email xml.tag!('contact:clID', @current_epp_user.username) if @current_epp_user xml.tag!('contact:crID', @contact.cr_id ) if @contact.cr_id xml.tag!('contact:crDate', @contact.created_at) diff --git a/spec/epp/contact_spec.rb b/spec/epp/contact_spec.rb index 2743d610a..0de164227 100644 --- a/spec/epp/contact_spec.rb +++ b/spec/epp/contact_spec.rb @@ -228,6 +228,19 @@ describe 'EPP Contact', epp: true do end + it 'doesn\'t disclose private elements' do + Fabricate(:contact, code: 'info-4444', auth_info: '2fooBAR', + disclosure: Fabricate(:contact_disclosure, email: false, phone: false)) + response = epp_request('contacts/info.xml') + contact = response[:parsed].css('resData chkData') + + expect(response[:result_code]).to eq('1000') + + expect(contact.css('phone').present?).to eq(false) + expect(contact.css('email').present?).to eq(false) + expect(contact.css('name').present?).to be(true) + end + it 'doesn\'t display unassociated object' do Fabricate(:contact, code: 'info-4444') diff --git a/spec/fabricators/contact_disclosure_fabricator.rb b/spec/fabricators/contact_disclosure_fabricator.rb new file mode 100644 index 000000000..784bd5bf8 --- /dev/null +++ b/spec/fabricators/contact_disclosure_fabricator.rb @@ -0,0 +1,10 @@ +Fabricator(:contact_disclosure) do + email true + phone true + loc_addr true + loc_name true + loc_org_name true + int_name true + int_org_name true + int_addr true +end diff --git a/spec/fabricators/contact_fabricator.rb b/spec/fabricators/contact_fabricator.rb index bcba61a4d..d9cfebe73 100644 --- a/spec/fabricators/contact_fabricator.rb +++ b/spec/fabricators/contact_fabricator.rb @@ -6,4 +6,5 @@ Fabricator(:contact) do ident_type 'op' auth_info 'ccds4324pok' international_address + disclosure { Fabricate(:contact_disclosure) } end