class Vines::Stanza::Iq::Vcard

Constants

NS

Public Instance Methods

process() click to toggle source
# File lib/vines/stanza/iq/vcard.rb, line 11
def process
  return unless allowed?
  if local?
    get? ? vcard_query : vcard_update
  else
    self['from'] = stream.user.jid.to_s
    route
  end
end

Private Instance Methods

vcard_query() click to toggle source
# File lib/vines/stanza/iq/vcard.rb, line 23
def vcard_query
  to = validate_to
  jid = to ? to.bare : stream.user.jid.bare
  card = storage(jid.domain).find_vcard(jid)

  raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless card

  doc = Document.new
  result = doc.create_element('iq') do |node|
    node['from'] = jid.to_s unless jid == stream.user.jid.bare
    node['id']   = self['id']
    node['to']   = stream.user.jid.to_s
    node['type'] = 'result'
    node << card
  end
  stream.write(result)
end
vcard_update() click to toggle source
# File lib/vines/stanza/iq/vcard.rb, line 41
def vcard_update
  to = validate_to
  unless to.nil? || to == stream.user.jid.bare
    raise StanzaErrors::Forbidden.new(self, 'auth')
  end

  storage.save_vcard(stream.user.jid, elements.first)

  result = to_result
  result.remove_attribute('from')
  stream.write(result)
end