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