diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb index 6685ed708..a8426090b 100644 --- a/app/controllers/epp/contacts_controller.rb +++ b/app/controllers/epp/contacts_controller.rb @@ -94,12 +94,26 @@ class Epp::ContactsController < EppController 'postalInfo > addr > pc', 'postalInfo > addr > cc', 'voice', 'email' ) ident = params[:parsed_frame].css('ident') + + if ident.present? && ident.attr('type').blank? + epp_errors << { + code: '2003', + msg: I18n.t('errors.messages.required_ident_attribute_missing', key: 'type') + } + end + if ident.present? && ident.text != 'birthday' && ident.attr('cc').blank? epp_errors << { code: '2003', - msg: I18n.t('errors.messages.required_attribute_missing', key: 'ident country code missing') + msg: I18n.t('errors.messages.required_ident_attribute_missing', key: 'cc') } end + # if ident.present? && ident.attr('cc').blank? + # epp_errors << { + # code: '2003', + # msg: I18n.t('errors.messages.required_ident_attribute_missing', key: 'cc') + # } + # end contact_org_disabled fax_disabled status_editing_disabled diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml index 9d273892e..c8bef118b 100644 --- a/app/views/admin/domain_versions/_version.haml +++ b/app/views/admin/domain_versions/_version.haml @@ -1,125 +1,126 @@ -- children = HashWithIndifferentAccess.new(version.children) -- nameservers = children[:nameservers] || [] -- tech_contacts = children[:tech_contacts] || [] -- admin_contacts = children[:admin_contacts] || [] -- registrant = children[:registrant] || [] +- if version.present? && domain.present? + - children = HashWithIndifferentAccess.new(version.children) + - nameservers = children[:nameservers] || [] + - tech_contacts = children[:tech_contacts] || [] + - admin_contacts = children[:admin_contacts] || [] + - registrant = children[:registrant] || [] -%td - %p.nowrap - = l(domain.updated_at, format: :short) - = version.event - %p.text-right - = version.terminator + %td + %p.nowrap + = l(domain.updated_at, format: :short) + = version.event + %p.text-right + = version.terminator -%td - %p - = "#{domain.period}#{domain.period_unit}" - = "#{l(domain.valid_from, format: :date)} - #{l(domain.valid_to, format: :date)}" - %p - = domain.status - -%td - - registrant.each do |oc| + %td %p - = oc[:name] - = oc[:phone] - = oc[:email] + = "#{domain.period}#{domain.period_unit}" + = "#{l(domain.valid_from, format: :date)} - #{l(domain.valid_to, format: :date)}" %p - = oc[:code] + = domain.status -%td - - admin_contacts.each do |ac| + %td + - registrant.each do |oc| + %p + = oc[:name] + = oc[:phone] + = oc[:email] + %p + = oc[:code] + + %td + - admin_contacts.each do |ac| + %p + = ac[:name] + = ac[:phone] + = ac[:email] + %p + = ac[:code] + + %td + - tech_contacts.each do |tc| + %p + = tc[:name] + = tc[:phone] + = tc[:email] + %p + = tc[:code] + + %td + - nameservers.each do |ns| + %p + = ns[:hostname] + %br + = ns[:ipv4] + = ns[:ipv6] + + %td %p - = ac[:name] - = ac[:phone] - = ac[:email] - %p - = ac[:code] + = domain.registrar.name -%td - - tech_contacts.each do |tc| - %p - = tc[:name] - = tc[:phone] - = tc[:email] - %p - = tc[:code] + -# %td + -# = version.children.inspect -%td - - nameservers.each do |ns| - %p - = ns[:hostname] - %br - = ns[:ipv4] - = ns[:ipv6] - -%td - %p - = domain.registrar.name - --# %td - -# = version.children.inspect - --# %td{ class: changes.include?(:domain) ? 'edit-highlight' : 'no-highlight' } - -# - if children[:domain] - -# %p{:style => "font-size:x-small;"} - -# = children[:domain][:period] - -# = children[:domain][:period_unit] if children[:domain][:period] - -# - if children[:domain][:valid_to] && children[:domain][:valid_from] - -# = "," - -# = l(children[:domain][:valid_from], format: :date) + '-' + l(children[:domain][:valid_to], format: :date) - -# - if children[:domain].try(:[], :registrar_id) - -# = "," - -# = Registrar.find(children[:domain][:registrar_id]).try(:name) - -# - if children[:domain][:status] - -# = ',' + children[:domain][:status] - - --# %td{ class: changes.include?(:registrant) ? 'edit-highlight' : 'no-highlight' } - -# - if children[:registrant] - -# %p{:style => "font-size:x-small;"} - -# = children[:registrant][:name] - -# = "," - -# = children[:registrant][:phone] - -# = "," - -# = children[:registrant][:email] - -# = "," - -# = children[:registrant][:code] - --# %td{ class: changes.include?(:admin_contacts) ? 'edit-highlight' : 'no-highlight' } - -# - if children[:admin_contacts] - -# - children[:admin_contacts].each do |ac| + -# %td{ class: changes.include?(:domain) ? 'edit-highlight' : 'no-highlight' } + -# - if children[:domain] -# %p{:style => "font-size:x-small;"} - -# = ac[:name] - -# = "," - -# = ac[:phone] - -# = "," - -# = ac[:email] - -# = "," - -# = ac[:code] + -# = children[:domain][:period] + -# = children[:domain][:period_unit] if children[:domain][:period] + -# - if children[:domain][:valid_to] && children[:domain][:valid_from] + -# = "," + -# = l(children[:domain][:valid_from], format: :date) + '-' + l(children[:domain][:valid_to], format: :date) + -# - if children[:domain].try(:[], :registrar_id) + -# = "," + -# = Registrar.find(children[:domain][:registrar_id]).try(:name) + -# - if children[:domain][:status] + -# = ',' + children[:domain][:status] --# %td{ class: changes.include?(:tech_contacts) ? 'edit-highlight' : 'no-highlight' } - -# - if children[:tech_contacts] - -# - children[:tech_contacts].each do |tc| + + -# %td{ class: changes.include?(:registrant) ? 'edit-highlight' : 'no-highlight' } + -# - if children[:registrant] -# %p{:style => "font-size:x-small;"} - -# = tc[:name] + -# = children[:registrant][:name] -# = "," - -# = tc[:phone] + -# = children[:registrant][:phone] -# = "," - -# = tc[:email] + -# = children[:registrant][:email] -# = "," - -# = tc[:code] + -# = children[:registrant][:code] --# %td{ class: changes.include?(:nameservers) ? 'edit-highlight' : 'no-highlight' } - -# - if children[:nameservers] - -# - children[:nameservers].each do |ns| - -# %p{:style => "font-size:x-small;"} - -# = ns[:hostname] - -# = "," - -# = ns[:ipv4] || ns[:ipv6] + -# %td{ class: changes.include?(:admin_contacts) ? 'edit-highlight' : 'no-highlight' } + -# - if children[:admin_contacts] + -# - children[:admin_contacts].each do |ac| + -# %p{:style => "font-size:x-small;"} + -# = ac[:name] + -# = "," + -# = ac[:phone] + -# = "," + -# = ac[:email] + -# = "," + -# = ac[:code] --# %td - -# %p{ :style => 'font-size:x-small;' } - -# = l(version.created_at, format: :short) - -# = whodunnit_with_protocol(version.whodunnit) - -# = version.event + -# %td{ class: changes.include?(:tech_contacts) ? 'edit-highlight' : 'no-highlight' } + -# - if children[:tech_contacts] + -# - children[:tech_contacts].each do |tc| + -# %p{:style => "font-size:x-small;"} + -# = tc[:name] + -# = "," + -# = tc[:phone] + -# = "," + -# = tc[:email] + -# = "," + -# = tc[:code] + + -# %td{ class: changes.include?(:nameservers) ? 'edit-highlight' : 'no-highlight' } + -# - if children[:nameservers] + -# - children[:nameservers].each do |ns| + -# %p{:style => "font-size:x-small;"} + -# = ns[:hostname] + -# = "," + -# = ns[:ipv4] || ns[:ipv6] + + -# %td + -# %p{ :style => 'font-size:x-small;' } + -# = l(version.created_at, format: :short) + -# = whodunnit_with_protocol(version.whodunnit) + -# = version.event diff --git a/config/locales/en.yml b/config/locales/en.yml index 8b2668bc3..e360bc69b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -256,7 +256,7 @@ en: invalid_type: 'PostalInfo type is invalid' unimplemented_command: 'Unimplemented command' domain_exists_but_belongs_to_other_registrar: 'Domain exists but belongs to other registrar' - required_attribute_missing: Required attributes missing + required_ident_attribute_missing: "Required ident attribute missing: %{key}" code: 'Code' value: 'Value' diff --git a/spec/epp/contact_spec.rb b/spec/epp/contact_spec.rb index 752f017ef..5eb8a3832 100644 --- a/spec/epp/contact_spec.rb +++ b/spec/epp/contact_spec.rb @@ -170,12 +170,26 @@ describe 'EPP Contact', epp: true do Contact.last.code.should == 'FIRST0:ABC:ABC:12345' end + it 'should add registrar prefix for code when missing' do + response = create_request({ id: { value: 'abc:ABC:12345' } }) + response[:msg].should == 'Command completed successfully' + response[:result_code].should == '1000' + + Contact.last.code.should == 'FIRST0:ABC:ABC:12345' + end + it 'should not allow spaces in custom code' do response = create_request({ id: { value: 'abc 123' } }) response[:msg].should == 'is invalid [code]' response[:result_code].should == '2005' end + fit 'should not allow spaces in custom code' do + response = create_request({ id: { value: '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' } }) + response[:msg].should == 'is invalid [code]' + response[:result_code].should == '2005' + end + it 'should not saves ident type with wrong country code' do extension = { ident: { @@ -189,6 +203,31 @@ describe 'EPP Contact', epp: true do response[:result_code].should == '2005' end + it 'should return country missing' do + extension = { + ident: { + value: '1990-22-12', + attrs: { type: 'birthday' } + } + } + response = create_request({}, extension, validate_input: false) + response[:msg].should == + 'Required ident attribute missing: cc' + response[:result_code].should == '2003' + end + + it 'should return country missing' do + extension = { + ident: { + value: '1990-22-12' + } + } + response = create_request({}, extension, validate_input: false) + response[:msg].should == + 'Required ident attribute missing: type' + response[:result_code].should == '2003' + end + it 'should add registrar prefix for code when legacy prefix present' do response = create_request({ id: { value: 'CID:FIRST0:abc:ABC:NEW:12345' } }) response[:msg].should == 'Command completed successfully'