local lm = require 'lm'
local iq = require 'lm.iq'
local F = { }
local O = {
handler =
function ( name )
end,
}
function F.handler ( handler )
O.handler = handler
end
function F.lists ( conn, success, fail )
iq.send ( conn, nil, 'get',
{
query = { xmlns = 'jabber:iq:privacy' },
},
function ( mess )
local ret = { }
local item = mess:child( 'query' ):child ()
while item do
local tag = item:name ()
local name = item:attribute ( 'name' )
if tag == 'list' then
table.insert ( ret, name )
elseif tag == 'active' or tag == 'default' then
ret[tag] = name
end
item = item:next ()
end
success ( ret )
end, fail )
end
function F.list ( conn, name, success, fail )
iq.send ( conn, nil, 'get',
{
query = { xmlns = 'jabber:iq:privacy',
list = { name = name },
},
},
function ( mess )
local ret = { }
local item = mess:path( 'query', 'list' ):child ()
while item do
local q = {
type = item:attribute ( 'type' ),
value = item:attribute ( 'value' ),
action = item:attribute ( 'action' ),
order = item:attribute ( 'order' ),
}
local stanza = item:child ()
if stanza then
q.stanzas = { }
while stanza do
table.insert ( q.stanzas, stanza:name () )
stanza = stanza:next ()
end
end
item = item:next ()
end
success ( ret )
end, fail )
end
-- name may be nil
function F.active ( conn, name, success, fail )
iq.send ( conn, nil, 'set',
{
query = { xmlns = 'jabber:iq:privacy',
active = { name = name },
},
}, success, fail )
end
-- name may be nil
function F.default ( conn, name, success, fail )
iq.send ( conn, nil, 'set',
{
query = { xmlns = 'jabber:iq:privacy',
default = { name = name },
},
}, success, fail )
end
function F.set ( conn, name, list, success, fail )
local items = { }
local order = 1
for i, item in ipairs ( list ) do
if list.order then
order = list.order
else
order = order + 1
end
local q = {
type = list.type,
value = list.value,
action = list.action,
order = order,
}
if list.stanzas then
for j, stanza in ipairs ( list.stanzas ) do
q[stanza] = { }
end
end
table.insert ( items, q )
end
iq.send ( conn, nil, 'set',
{
query = { xmlns = 'jabber:iq:privacy',
list = { name = name,
item = items,
},
},
}, success, fail )
end
function F.iq_handler ( conn, mess )
local query = mess:child ( 'query' )
if query and query:attribute ( 'xmlns' ) == 'jabber:iq:privacy' then
conn:send ( lm.message.create { mtype = 'iq-result', id = mess:attribute ( 'id' ) } )
O.handler ( query:child( 'list' ):attribute ( 'name' ) )
return true
end
return false
end
return F
-- vim: se ts=4: --