REPP: Hide contact internal ID

This commit is contained in:
Karl Erik Õunapuu 2020-11-16 14:46:37 +02:00
parent fc816ad67b
commit 3d0150076c
No known key found for this signature in database
GPG key ID: C9DD647298A34764
3 changed files with 53 additions and 7 deletions

View file

@ -1,3 +1,4 @@
require 'serializers/repp/contact'
module Repp
module V1
class ContactsController < BaseController
@ -14,7 +15,8 @@ module Repp
## GET /repp/v1/contacts/1
def show
render_success(data: @contact.as_json)
serializer = ::Serializers::Repp::Contact.new(@contact, show_address: Contact.address_processing?)
render_success(data: serializer.to_json)
end
## GET /repp/v1/contacts/check/1
@ -76,11 +78,13 @@ module Repp
def showable_contacts(details, limit, offset)
contacts = current_user.registrar.contacts.limit(limit).offset(offset)
unless Contact.address_processing? && params[:details] == 'true'
contacts = contacts.select(Contact.attribute_names - Contact.address_attribute_names)
end
contacts = contacts.pluck(:code) unless details
return contacts.pluck(:code) unless details
contacts = contacts.map do |contact|
serializer = ::Serializers::Repp::Contact.new(contact, show_address: Contact.address_processing?)
serializer.to_json
end
contacts
end
@ -104,7 +108,7 @@ module Repp
def contact_create_params(required: true)
params.require(:contact).require(%i[name email phone]) if required
params.require(:contact).permit(:name, :email, :phone, :code)
params.require(:contact).permit(:name, :email, :phone, :id)
end
def contact_ident_params(required: true)

View file

@ -36,7 +36,7 @@ class Epp::Contact < Contact
attrs = epp ? attrs_from(frame, new_record: true) : frame
super(
attrs.merge(
code: epp ? frame.css('id').text : frame[:code],
code: epp ? frame.css('id').text : frame[:id],
registrar: registrar
)
)

View file

@ -0,0 +1,42 @@
module Serializers
module Repp
class Contact
attr_reader :contact
def initialize(contact, show_address:)
@contact = contact
@show_address = show_address
end
def to_json
json = {
id: contact.code,
name: contact.name,
ident: {
code: contact.ident,
type: contact.ident_type,
country_code: contact.ident_country_code,
},
email: contact.email,
phone: contact.phone,
fax: contact.fax,
auth_info: contact.auth_info,
statuses: contact.statuses,
disclosed_attributes: contact.disclosed_attributes,
}
return json unless @show_address
json[:address] = {
street: contact.street,
zip: contact.zip,
city: contact.city,
state: contact.state,
country_code: contact.country_code,
}
json
end
end
end
end