class Vines::Stanza::PubSub::Subscribe

Constants

NS

Public Instance Methods

process() click to toggle source
# File lib/vines/stanza/pubsub/subscribe.rb, line 11
def process
  return if route_iq || !allowed?
  validate_to_address

  node = self.xpath('ns:pubsub/ns:subscribe', 'ns' => NS)
  raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
  node = node.first
  id, jid = node['node'], JID.new(node['jid'])

  raise StanzaErrors::BadRequest.new(self, 'modify') unless stream.user.jid.bare == jid.bare
  raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)
  raise StanzaErrors::PolicyViolation.new(self, 'wait') if pubsub.subscribed?(id, jid)

  pubsub.subscribe(id, jid)
  send_result_iq(id, jid)
end

Private Instance Methods

send_result_iq(id, jid) click to toggle source
# File lib/vines/stanza/pubsub/subscribe.rb, line 30
def send_result_iq(id, jid)
  result = to_result
  result << result.document.create_element('pubsub') do |node|
    node.default_namespace = NS
    node << result.document.create_element('subscription',
      'node' => id,
      'jid' => jid.to_s,
      'subscription' => 'subscribed')
  end
  stream.write(result)
end