Lm separation, privacy
* Library parts moved to lm.*
* mc_* renamed to plain names
* Privacy lists suppart (not tested)
-- USER AVATAR (XEP-0084)
-- library
local sha1 = require 'sha1'
local base64 = require 'base64'
local lm = require 'lm'
local pep = require 'lm.pep'
local pubsub = require 'lm.pubsub'
--
local F = { }
-- TODO 'temporary disabling'
-- however I cannot see a method to enable it back without republishing avatar :(
-- this requires client to know, what is published on the server now
-- maybe we can do that by requesting item without payload from server
-- pubsub metadata notification handler
function F.publish ( conn, data, success, fail, height, width )
local id = sha1.digest ( data )
pep.publish ( conn, 'urn:xmpp:avatar:data',
{ id = id,
data = { xmlns = 'urn:xmpp:avatar:data',
base64.encode ( data ),
},
},
function ()
pep.publish ( conn, 'urn:xmpp:avatar:metadata',
{ id = id,
info = { bytes = data:len (), id = id, type = 'image/png', height = height, width = width },
}, success, fail )
end, fail )
end
function F.publish_url ( conn, url, iid, size, id, mtype, success, fail, height, width )
pep.publish ( conn, 'urn:xmpp:avatar:metadata',
{ id = iid,
info = { bytes = size, id = id, type = mtype, url = url, height = height, width = width },
}, success, fail )
end
function F.get ( conn, from, id, success, fail )
pubsub.retrieve ( conn, from, 'urn:xmpp:avatar:data',
function ( from, node, item )
local data = item:child ( 'data' )
if data then
success ( data:value () )
else
-- XXX
end
end, fail, nil, { id } )
end
return F
-- vim: se ts=4: --