Merge branch 'master' of github.com:domify/registry

This commit is contained in:
Martin Lensment 2015-03-11 12:47:30 +02:00
commit 5cb4b35e0f
6 changed files with 47 additions and 17 deletions

View file

@ -16,15 +16,17 @@ class Ability
can :show, :dashboard can :show, :dashboard
end end
# rubocop: disable Metrics/CyclomaticComplexity
def epp def epp
# Epp::Contact # Epp::Contact
can(:info, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id || c.auth_info == pw } can(:info, Epp::Contact)
can(:view_full_info, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id || c.auth_info == pw }
can(:check, Epp::Contact) can(:check, Epp::Contact)
can(:create, Epp::Contact) can(:create, Epp::Contact)
can(:update, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id && c.auth_info == pw } can(:update, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id && c.auth_info == pw }
can(:delete, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id && c.auth_info == pw } can(:delete, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id && c.auth_info == pw }
can(:renew, Epp::Contact) can(:renew, Epp::Contact)
can(:view_password, Epp::Contact) { |c| c.registrar_id == @user.registrar_id } can(:view_password, Epp::Contact) { |c, pw| c.registrar_id == @user.registrar_id || c.auth_info == pw }
# Epp::Domain # Epp::Domain
can(:info, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw } can(:info, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw }
@ -34,6 +36,7 @@ class Ability
can(:update, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw } can(:update, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw }
can(:transfer, Epp::Domain) { |d, pw| d.auth_info == pw } can(:transfer, Epp::Domain) { |d, pw| d.auth_info == pw }
end end
# rubocop: enabled Metrics/CyclomaticComplexity
def user def user
can :show, :dashboard can :show, :dashboard

View file

@ -40,6 +40,14 @@ class Contact < ActiveRecord::Base
before_create :generate_code before_create :generate_code
before_create :generate_auth_info before_create :generate_auth_info
after_create :ensure_disclosure after_create :ensure_disclosure
after_save :manage_automatic_statuses
def manage_automatic_statuses
if statuses.empty? && valid?
statuses.create(value: ContactStatus::OK)
elsif statuses.length > 1 || !valid?
statuses.find_by(value: ContactStatus::OK).try(:destroy)
end
end
scope :current_registrars, ->(id) { where(registrar_id: id) } scope :current_registrars, ->(id) { where(registrar_id: id) }

View file

@ -7,19 +7,23 @@ xml.epp_head do
xml.resData do xml.resData do
xml.tag!('contact:infData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do xml.tag!('contact:infData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do
xml.tag!('contact:id', @contact.code) xml.tag!('contact:id', @contact.code)
xml.tag!('contact:voice', @contact.phone) if can? :view_full_info, @contact, @password
xml.tag!('contact:email', @contact.email) xml.tag!('contact:voice', @contact.phone)
xml.tag!('contact:fax', @contact.fax) if @contact.fax.present? xml.tag!('contact:email', @contact.email)
xml.tag!('contact:fax', @contact.fax) if @contact.fax.present?
end
xml.tag!('contact:postalInfo', type: 'int') do xml.tag!('contact:postalInfo', type: 'int') do
xml.tag!('contact:name', @contact.name) xml.tag!('contact:name', @contact.name)
xml.tag!('contact:org', @contact.org_name) if @contact.org_name.present? if can? :view_full_info, @contact, @password
xml.tag!('contact:addr') do xml.tag!('contact:org', @contact.org_name) if @contact.org_name.present?
xml.tag!('contact:street', @contact.street) xml.tag!('contact:addr') do
xml.tag!('contact:city', @contact.city) xml.tag!('contact:street', @contact.street)
xml.tag!('contact:pc', @contact.zip) xml.tag!('contact:city', @contact.city)
xml.tag!('contact:sp', @contact.state) xml.tag!('contact:pc', @contact.zip)
xml.tag!('contact:cc', @contact.country_code) xml.tag!('contact:sp', @contact.state)
xml.tag!('contact:cc', @contact.country_code)
end
end end
end end
@ -32,7 +36,7 @@ xml.epp_head do
end end
xml.tag!('contact:ident', @contact.ident, type: @contact.ident_type, cc: @contact.ident_country_code) xml.tag!('contact:ident', @contact.ident, type: @contact.ident_type, cc: @contact.ident_country_code)
# xml.tag!('contact:trDate', '123') if false # xml.tag!('contact:trDate', '123') if false
if can? :view_password, @contact if can? :view_password, @contact, @password
xml.tag!('contact:authInfo') do xml.tag!('contact:authInfo') do
xml.tag!('contact:pw', @contact.auth_info) xml.tag!('contact:pw', @contact.auth_info)
end end

View file

@ -114,4 +114,4 @@ Contact Mapping protocol short version:
<contact:pw> 1 Contact password. Attribute: roid="String" <contact:pw> 1 Contact password. Attribute: roid="String"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-info-command-discloses-items-to-owner) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-info-command-return-info-about-contact)

View file

@ -444,15 +444,25 @@ describe 'EPP Contact', epp: true do
response[:msg].should == 'Command completed successfully' response[:msg].should == 'Command completed successfully'
response[:result_code].should == '1000' response[:result_code].should == '1000'
response[:results].count.should == 1 response[:results].count.should == 1
contact = response[:parsed].css('resData infData')
contact.css('postalInfo addr city').first.try(:text).present?.should == true
contact.css('email').first.try(:text).present?.should == true
contact.css('voice').first.try(:text).should == '+372.12345678'
end end
end end
it 'returns authorization error for wrong user and wrong pw' do it 'returns no authorization error for wrong user and wrong pw' do
login_as :registrar2 do login_as :registrar2 do
response = info_request({ authInfo: { pw: { value: 'wrong-pw' } } }) response = info_request({ authInfo: { pw: { value: 'wrong-pw' } } })
response[:msg].should == 'Authorization error' response[:msg].should == 'Command completed successfully'
response[:result_code].should == '2201' response[:result_code].should == '1000'
response[:results].count.should == 1 response[:results].count.should == 1
contact = response[:parsed].css('resData infData')
contact.css('postalInfo addr city').first.try(:text).should == nil
contact.css('email').first.try(:text).should == nil
contact.css('voice').first.try(:text).should == nil
end end
end end
end end

View file

@ -147,6 +147,11 @@ describe Contact do
@contact.auth_info.should == 'password' @contact.auth_info.should == 'password'
end end
it 'should have ok status by default' do
@contact.statuses.size.should == 1
@contact.statuses.first.value.should == 'ok'
end
context 'as birthday' do context 'as birthday' do
before :all do before :all do
@contact.ident_type = 'birthday' @contact.ident_type = 'birthday'