require 'savon' module IdentityLinker class Linker extend Savon::Model endpoint "https://signin.ccci.org/ws-identity-linking/idlinking" namespace "http://webservice.linking.idm.ccci.org/" attr_reader :server_id, :server_secret def initialize(server_id = nil, server_secret = nil) @server_id = server_id || IdentityLinker.config.server_id @server_secret = server_secret || IdentityLinker.config.server_secret end def find_linked_identity(id_type, id_value, target) response = client.request(:wsdl, :find_linked_identity) do xml = <<-END #{server_id} #{server_secret} #{id_type} #{id_value} #{target} END soap.body = xml end if response.success? return response.to_hash[:find_linked_identity_response][:linked_identity] end nil end def self.find_linked_identity(id_type, id_value, target) new.find_linked_identity(id_type, id_value, target) end def find_linked_identity_with_details(id_type, id_value, target) response = client.request(:wsdl, :find_linked_identity_with_details) do xml = <<-END #{server_id} #{server_secret} #{id_type} #{id_value} #{target} END soap.body = xml end if response.success? return response.to_hash[:find_linked_identity_with_details_response][:linked_identity] end nil end def self.find_linked_identity_with_details(id_type, id_value, target) new.find_linked_identity_with_details(id_type, id_value, target) end def find_all_linked_identities(id_type, id_value) response = client.request(:wsdl, :find_all_linked_identities) do xml = <<-END #{server_id} #{server_secret} #{id_type} #{id_value} END soap.body = xml end if response.success? return response.to_hash[:find_all_linked_identities_response][:linked_identity] end nil end def self.find_all_linked_identities(id_type, id_value) new.find_all_linked_identities(id_type, id_value) end def find_all_linked_identities_with_details(id_type, id_value) response = client.request(:wsdl, :find_all_linked_identities_with_details) do xml = <<-END #{server_id} #{server_secret} #{id_type} #{id_value} END soap.body = xml end if response.success? return response.to_hash[:find_all_linked_identities_with_details_response][:linked_identity] end nil end def self.find_all_linked_identities_with_details(id_type, id_value) new.find_all_linked_identities_with_details(id_type, id_value) end def find_linked_identities_of_type(id_type, id_value, target) response = client.request(:wsdl, :find_linked_identities_of_type) do xml = <<-END #{server_id} #{server_secret} #{id_type} #{id_value} #{target} END soap.body = xml end if response.success? return [response.to_hash[:find_linked_identities_of_type_response][:linked_identity]].flatten.compact end nil end def self.find_linked_identities_of_type(id_type, id_value, target) new.find_linked_identities_of_type(id_type, id_value, target) end end end