Added missing files
This commit is contained in:
parent
3ce6edb6c9
commit
711534b909
68
inc/xmppgateway.rb
Normal file
68
inc/xmppgateway.rb
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
module Jabber
|
||||||
|
module Gateway
|
||||||
|
|
||||||
|
NS_GATEWAY = 'jabber:iq:gateway'
|
||||||
|
|
||||||
|
class Responder
|
||||||
|
attr_accessor :description
|
||||||
|
attr_accessor :prompt
|
||||||
|
|
||||||
|
def initialize(stream, &func)
|
||||||
|
@stream = stream
|
||||||
|
@func = func
|
||||||
|
|
||||||
|
@stream.add_iq_callback() do |iq|
|
||||||
|
if iq.query.kind_of?(IqQueryGateway)
|
||||||
|
if iq.type == :get
|
||||||
|
# Client is requesting fields
|
||||||
|
answer = iq.answer(false)
|
||||||
|
answer.type = :result
|
||||||
|
query = answer.add(IqQueryGateway.new)
|
||||||
|
query.desc = @description || ''
|
||||||
|
query.prompt = @prompt || ''
|
||||||
|
@stream.send(answer)
|
||||||
|
elsif iq.type == :set
|
||||||
|
# Client is requesting full JID
|
||||||
|
query = iq.query.prompt
|
||||||
|
jid = @func.call(iq, query)
|
||||||
|
answer = iq.answer(false)
|
||||||
|
answer.type = :result
|
||||||
|
query = answer.add(IqQueryGateway.new)
|
||||||
|
query.jid = jid
|
||||||
|
@stream.send(answer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class IqQueryGateway < IqQuery
|
||||||
|
name_xmlns 'query', Jabber::Gateway::NS_GATEWAY
|
||||||
|
|
||||||
|
def desc
|
||||||
|
first_element_text('desc')
|
||||||
|
end
|
||||||
|
|
||||||
|
def desc=(new_desc)
|
||||||
|
replace_element_text('desc', new_desc)
|
||||||
|
end
|
||||||
|
|
||||||
|
def prompt
|
||||||
|
first_element_text('prompt')
|
||||||
|
end
|
||||||
|
|
||||||
|
def prompt=(new_prompt)
|
||||||
|
replace_element_text('prompt', new_prompt)
|
||||||
|
end
|
||||||
|
|
||||||
|
def jid
|
||||||
|
first_element_text('jid')
|
||||||
|
end
|
||||||
|
|
||||||
|
def jid=(new_prompt)
|
||||||
|
replace_element_text('jid', new_prompt)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
70
inc/xmppregister.rb
Normal file
70
inc/xmppregister.rb
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
module Jabber
|
||||||
|
|
||||||
|
module Register
|
||||||
|
|
||||||
|
NS_REGISTER = 'jabber:iq:register'
|
||||||
|
|
||||||
|
class Responder
|
||||||
|
attr_accessor :instructions
|
||||||
|
|
||||||
|
def initialize(stream)
|
||||||
|
@stream = stream
|
||||||
|
@fields = []
|
||||||
|
@registered_callbacks = []
|
||||||
|
|
||||||
|
@stream.add_iq_callback() do |iq|
|
||||||
|
if iq.query.kind_of?(IqQueryRegister) then
|
||||||
|
if iq.type == :get then # Registration request
|
||||||
|
answer = iq.answer(false)
|
||||||
|
answer.type = :result
|
||||||
|
query = answer.add(IqQueryRegister.new)
|
||||||
|
query.add(Field.new(:instructions, @instructions)) unless instructions.nil?
|
||||||
|
@fields.each do |field| query.add(Field.new(field[0])) end
|
||||||
|
@stream.send(answer)
|
||||||
|
elsif iq.type == :set then # Registration response
|
||||||
|
iq.query.each do |field|
|
||||||
|
validator = @fields.assoc(field.name.to_sym)[2]
|
||||||
|
if !validator.call(iq.from, field.text) then
|
||||||
|
puts "- - n0t acceptable here - -"
|
||||||
|
answer = iq.answer(true)
|
||||||
|
answer.type = :error
|
||||||
|
answer.add(Jabber::ErrorResponse.new('not-acceptable'))
|
||||||
|
@stream.send(answer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# let them know that all looks good!
|
||||||
|
answer = iq.answer(false)
|
||||||
|
answer.type = :result
|
||||||
|
@stream.send(answer)
|
||||||
|
|
||||||
|
# Fire off callbacks
|
||||||
|
@registered_callbacks.each do |cb|
|
||||||
|
cb.call(iq.from)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_field(name, required, &validator)
|
||||||
|
@fields << [ name, required, validator ]
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_registered_callback(&cb)
|
||||||
|
@registered_callbacks << cb
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class IqQueryRegister < IqQuery
|
||||||
|
name_xmlns 'query', Jabber::Register::NS_REGISTER
|
||||||
|
end
|
||||||
|
|
||||||
|
class Field < REXML::Element
|
||||||
|
def initialize(name, value=nil)
|
||||||
|
super(name.to_s)
|
||||||
|
self.text = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Reference in a new issue