Contact statuses and update_contact modified

This commit is contained in:
Andres Keskküla 2014-12-18 13:53:01 +02:00
parent c089544eae
commit 9c4f0a63a0
6 changed files with 107 additions and 3 deletions

View file

@ -10,7 +10,8 @@ module Epp::ContactsHelper
# FIXME: Update returns 2303 update multiple times # FIXME: Update returns 2303 update multiple times
code = params_hash['epp']['command']['update']['update'][:id] code = params_hash['epp']['command']['update']['update'][:id]
@contact = Contact.where(code: code).first @contact = Contact.where(code: code).first
if update_rights? && stamp(@contact) && @contact.update_attributes(contact_and_address_attributes(:update)) #if update_rights? && stamp(@contact) && @contact.update_attributes(contact_and_address_attributes(:update))
if owner? && stamp(@contact) && @contact.update_attributes(contact_and_address_attributes(:update))
render 'epp/contacts/update' render 'epp/contacts/update'
else else
contact_exists?(code) contact_exists?(code)
@ -67,7 +68,8 @@ module Epp::ContactsHelper
def validate_contact_update_request def validate_contact_update_request
@ph = params_hash['epp']['command']['update']['update'] @ph = params_hash['epp']['command']['update']['update']
update_attrs_present? update_attrs_present?
xml_attrs_present?(@ph, [['id'], %w(authInfo pw)]) #xml_attrs_present?(@ph, [['id'], %w(authInfo pw)])
xml_attrs_present?(@ph, [['id']])
end end
def contact_exists?(code) def contact_exists?(code)

View file

@ -9,6 +9,7 @@ class Contact < ActiveRecord::Base
has_many :domain_contacts has_many :domain_contacts
has_many :domains, through: :domain_contacts has_many :domains, through: :domain_contacts
has_many :statuses, class_name: 'ContactStatus'
# TODO: remove the x_by # TODO: remove the x_by
belongs_to :created_by, class_name: 'EppUser', foreign_key: :created_by_id belongs_to :created_by, class_name: 'EppUser', foreign_key: :created_by_id

View file

@ -0,0 +1,78 @@
class ContactStatus < ActiveRecord::Base
include EppErrors
belongs_to :contact
CLIENT_DELETE_PROHIBITED = 'clientDeleteProhibited'
SERVER_DELETE_PROHIBITED = 'serverDeleteProhibited'
CLIENT_HOLD = 'clientHold'
SERVER_HOLD = 'serverHold'
CLIENT_RENEW_PROHIBITED = 'clientRenewProhibited'
SERVER_RENEW_PROHIBITED = 'serverRenewProhibited'
CLIENT_TRANSFER_PROHIBITED = 'clientTransferProhibited'
SERVER_TRANSFER_PROHIBITED = 'serverTransferProhibited'
CLIENT_UPDATE_PROHIBITED = 'clientUpdateProhibited'
SERVER_UPDATE_PROHIBITED = 'serverUpdateProhibited'
INACTIVE = 'inactive'
OK = 'ok'
PENDING_CREATE = 'pendingCreate'
PENDING_DELETE = 'pendingDelete'
PENDING_RENEW = 'pendingRenew'
PENDING_TRANSFER = 'pendingTransfer'
PENDING_UPDATE = 'pendingUpdate'
SERVER_MANUAL_INZONE = 'serverManualInzone'
SERVER_REGISTRANT_CHANGE_PROHIBITED = 'serverRegistrantChangeProhibited'
SERVER_ADMIN_CHANGE_PROHIBITED = 'serverAdminChangeProhibited'
SERVER_TECH_CHANGE_PROHIBITED = 'serverTechChangeProhibited'
FORCE_DELETE = 'forceDelete'
DELETE_CANDIDATE = 'deleteCandidate'
EXPIRED = 'expired'
STATUSES = [
CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD,
CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED,
SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED,
INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_RENEW, PENDING_TRANSFER,
PENDING_UPDATE, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED,
SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE,
DELETE_CANDIDATE, EXPIRED
]
CLIENT_STATUSES = [
CLIENT_DELETE_PROHIBITED, CLIENT_HOLD, CLIENT_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED,
CLIENT_UPDATE_PROHIBITED
]
SERVER_STATUSES = [
SERVER_DELETE_PROHIBITED, SERVER_HOLD, SERVER_RENEW_PROHIBITED, SERVER_TRANSFER_PROHIBITED,
SERVER_UPDATE_PROHIBITED, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED,
SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED
]
def epp_code_map
{
'2302' => [ # Object exists
[:value, :taken, { value: { obj: 'status', val: value } }]
]
}
end
def server_status?
SERVER_STATUSES.include?(value)
end
def client_status?
CLIENT_STATUSES.include?(value)
end
class << self
def statuses_for_client
CLIENT_STATUSES.map { |x| x.sub('client', '') }
end
def statuses_for_admin
SERVER_STATUSES.map { |x| x.sub('server', '') }
end
end
end

View file

@ -16,12 +16,17 @@ xml.epp_head do
xml.tag!('contact:crDate', @contact.created_at) xml.tag!('contact:crDate', @contact.created_at)
xml.tag!('contact:upID', @contact.up_id) if @contact.up_id xml.tag!('contact:upID', @contact.up_id) if @contact.up_id
xml.tag!('contact:upDate', @contact.updated_at) unless @contact.updated_at == @contact.created_at xml.tag!('contact:upDate', @contact.updated_at) unless @contact.updated_at == @contact.created_at
xml.tag!('contact:ident', @contact.ident, type: @contact.ident_type)
xml.tag!('contact:trDate', '123') if false xml.tag!('contact:trDate', '123') if false
if @owner if @owner
xml.tag!('contact:authInfo') do xml.tag!('contact:authInfo') do
xml.tag!('contact:pw', @contact.auth_info) # Doc says we have to return this but is it necessary? xml.tag!('contact:pw', @contact.auth_info) # Doc says we have to return this but is it necessary?
end end
end end
# statuses
@contact.statuses.each do |cs|
xml.tag!('contact:status', s: cs.value)
end
xml << render('/epp/contacts/disclosure_policy') xml << render('/epp/contacts/disclosure_policy')
end end
end end

View file

@ -0,0 +1,10 @@
class CreateContactStatuses < ActiveRecord::Migration
def change
create_table :contact_statuses do |t|
t.string :value
t.string :description
t.belongs_to :contact
t.timestamps
end
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20141203090115) do ActiveRecord::Schema.define(version: 20141216075056) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -59,6 +59,14 @@ ActiveRecord::Schema.define(version: 20141203090115) do
t.boolean "address" t.boolean "address"
end end
create_table "contact_statuses", force: true do |t|
t.string "value"
t.string "description"
t.integer "contact_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "contact_versions", force: true do |t| create_table "contact_versions", force: true do |t|
t.string "item_type", null: false t.string "item_type", null: false
t.integer "item_id", null: false t.integer "item_id", null: false