Sha256: 8ebc516e5ddbfa4b2e01c52cd56fa64231e5dc6094ea5903560c6416b185c037

Contents?: true

Size: 1.39 KB

Versions: 27

Compression:

Stored size: 1.39 KB

Contents

# encoding: UTF-8

module Vines
  class Stanza
    class Iq
      class Vcard < Iq
        NS = NAMESPACES[:vcard]

        register "/iq[@id and @type='get' or @type='set']/ns:vCard", 'ns' => NS

        def process
          return unless allowed?
          if local?
            get? ? vcard_query : vcard_update
          else
            self['from'] = stream.user.jid.to_s
            route
          end
        end

        private

        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

        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
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 4 rubygems

Version Path
vinesmod-0.4.5 lib/vines/stanza/iq/vcard.rb
vines-0.4.5 lib/vines/stanza/iq/vcard.rb
vines-0.4.4 lib/vines/stanza/iq/vcard.rb
vines-0.4.3 lib/vines/stanza/iq/vcard.rb
vines-0.4.2 lib/vines/stanza/iq/vcard.rb
vines-0.4.1 lib/vines/stanza/iq/vcard.rb
vines-0.4.0 lib/vines/stanza/iq/vcard.rb