class Vines::Stanza::Iq::PrivateStorage

Implements the Private Storage feature defined in XEP-0049. Clients are allowed to save arbitrary XML documents on the server, identified by element name and namespace.

Constants

NS

Public Instance Methods

process() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 14
def process
  validate_to_address
  validate_storage_enabled
  validate_children_size
  validate_namespaces
  get? ? retrieve_fragment : update_fragment
end

Private Instance Methods

retrieve_fragment() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 24
def retrieve_fragment
  found = storage.find_fragment(stream.user.jid, elements.first.elements.first)
  raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless found

  result = to_result do |node|
    node << node.document.create_element('query') do |query|
      query.default_namespace = NS
      query << found
    end
  end
  stream.write(result)
end
to_result() { |node| ... } click to toggle source
Calls superclass method
# File lib/vines/stanza/iq/private_storage.rb, line 46
def to_result
  super.tap do |node|
    node['from'] = stream.user.jid.to_s
    yield node if block_given?
  end
end
update_fragment() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 37
def update_fragment
  elements.first.elements.each do |node|
    storage.save_fragment(stream.user.jid, node)
  end
  stream.write(to_result)
end
validate_children_size() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 53
def validate_children_size
  size = elements.first.elements.size
  if (get? && size != 1) || (set? && size == 0)
    raise StanzaErrors::NotAcceptable.new(self, 'modify')
  end
end
validate_namespaces() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 73
def validate_namespaces
  elements.first.elements.each do |node|
    if node.namespace.nil? || NAMESPACES.values.include?(node.namespace.href)
      raise StanzaErrors::NotAcceptable.new(self, 'modify')
    end
  end
end
validate_storage_enabled() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 67
def validate_storage_enabled
  unless stream.config.private_storage?(stream.domain)
    raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
  end
end
validate_to_address() click to toggle source
# File lib/vines/stanza/iq/private_storage.rb, line 60
def validate_to_address
  to = validate_to
  unless to.nil? || to == stream.user.jid.bare
    raise StanzaErrors::Forbidden.new(self, 'cancel')
  end
end