--- a/examples/iq_register.lua Sat Mar 28 19:43:12 2009 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-
--- IN-BAND REGISTRATION (XEP-0077)
-
--- library
-
-local iq = require 'iq'
-local x_data = require 'x_data'
-local form_field = require 'form_field'
-
---
-
-local F = { }
-local M = { }
-M.__index = M
-
-function F.new ( args )
- local form = {
- xmlns = 'jabber:iq:register',
- ftype = args.type or 'form',
- registered = args.registered,
- -- XXX title
- instructions = args.instructions,
- x_data = args.x_data,
- f = { },
- }
- setmetatable ( form, M )
- return form
-end
-
-function F.parse ( query )
- local instructions = query:child ( 'instructions' )
- if instructions then
- instructions = instructions:value ()
- end
-
- local registered
- if query:child ( 'registered' ) then
- registered = true
- end
-
- local x = query:child ( 'x' )
- if x and x:attribute ( 'xmlns' ) == 'jabber:x:data' then
- return F.new { type = 'form', registered = registered, instructions = instructions, x_data = x_data.parse ( x ) }
- end
-
- local form = F.new { type = 'form', registered = registered, instructions = instructions }
-
- local field = query:child ()
- while field do
- local name = field:name ()
- if name ~= 'instructions' and name ~= 'registered' then
- form:add ( name, { type = 'text-single', value = field:value () or '' } )
- end
- field = field:next ()
- end
-
- return form
-end
-
-function M.type ( form )
- return form.ftype
-end
-
-function M.desc ( form )
- if form.x_data then
- return form.x_data:desc ()
- else
- return form.title, form.instructions
- end
-end
-
-function M.format ( form, root, format_as )
- local ft = format_as or form:type ()
-
- if form.x_data then
- root.query = form.x_data:format ( { xmlns = 'jabber:iq:register' }, ft )
- else
- root.query = { xmlns = 'jabber:iq:register' }
- for index, field in form:fields () do
- root.query[field:name ()] = field:value ()
- end
- end
-
- if ft == 'form' then
- local title, instructions = form:desc ()
- if instructions then
- root.query.instructions = { instructions }
- end
- if form.registered then
- root.query.registered = { }
- end
- end
-
- return root
-end
-
-function M.fields ( form )
- if form.x_data then
- return form.x_data:fields ()
- else
- return ipairs ( form.f )
- end
-end
-
-function M.add ( form, name, fld )
- if form.x_data then
- return form.x_data:add ( name, fld )
- else
- fld.var = name
- fld.index = #form.f + 1
- local obj = form_field.new ( fld )
- table.insert ( form.f, obj )
- form.f[name] = obj
- return obj
- end
-end
-
-function M.field ( form, name )
- if form.x_data then
- return form.x_data:field ( name )
- else
- return form.f[name]
- end
-end
-
-function F.register ( conn, to, success, fail )
- iq.send ( conn, to, 'get',
- {
- query = { xmlns = 'jabber:iq:register' },
- },
- function ( mess )
- local query = mess:child ( 'query' )
- if query and query:attribute ( 'xmlns' ) == 'jabber:iq:register' then
- success ( F.parse ( query ),
- function ( form, success, fail )
- iq.send ( conn, to, 'set', form:format ( form, { }, 'submit' ), success , fail )
- end,
- function ( form, success, fail )
- success ()
- end )
- end
- end, fail )
-end
-
-function F.unregister ( conn, to, success, fail )
- iq.send ( conn, to, 'set',
- {
- query = { xmlns = 'jabber:iq:register',
- remove = { },
- },
- },
- function ( mess )
- success ()
- end,
- function ( mesg, mess )
- local query = mess:child ( 'query' )
- if query and query:attribute ( 'xmlns' ) == 'jabber:iq:register' then
- success ( F.parse ( query ),
- function ( form, success, fail )
- iq.send ( conn, to, 'set', form:format ( form, { }, 'submit' ), success, fail )
- end,
- function ( form, success, fail )
- success ()
- end )
- else
- fail ( mesg )
- end
- end )
-end
-
-return F
-
--- vim: se ts=4: --