Sunday, April 26, 2020
grimoire@muc.metronome.im
April
Mon Tue Wed Thu Fri Sat Sun
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21
22
23
24 25
26
27
28 29
30
     
             
Metronome IM "cook" book room | Support and Dev talk about the Metronome XMPP server.

Latest stable version build is: 4.0.3

For more information you can visit: https://metronome.im

Room logs can be found here: https://muc.metronome.im/logs/grimoire/

* Links *
<==========================================================>
- Building & Installation:
https://metronome.im/building
- Documentation:
https://metronome.im/documentation
- Issues Tracker:
https://github.com/maranda/metronome/issues
<==========================================================>

[14:49:30] <onetha> Why do I have an issue setting the room avatar?
[15:17:59] <Curator> onetha, I dunno where do you have issues setting an avatar?
[15:20:06] <onetha> Do you mean the client?
[15:20:35] <Maranda> Room avatar means the room icon to me.
[15:20:58] <Maranda> .
[15:21:29] <onetha> A room I have an owner role.
[15:21:49] <Maranda> okay and do you get any error?
[15:23:40] <Maranda> onetha, also please make sure mod_muc_vcard is loaded on the muc component
[15:25:00] <onetha> It is loaded.
[15:26:18] <onetha> I'm using Conversations on an android phone now. When I get to my computer I'll be able to see the exact error reported on the from the Gajim client console window.
[15:28:20] <Curator> onetha, without logs from Metronome or an error it's hard for me to say that code is unchanged from a while, I just tested on my server from Gajim and it works.
[15:29:48] <onetha> I can't even see any logs on metronome with respect to the error. So I don't even know how to troubleshoot the error.
[15:30:11] <Maranda> onetha, do you have debug logs enabled?
[15:30:19] <Maranda> also is it YunoHost?
[15:32:21] <onetha> Yeah. I do have debug logs enabled. It's not Yunohost
[15:33:12] <onetha> It is Debian 10 however.
[15:33:59] <Maranda> Okay mind pasting here the Metronome log snippet of the time interval you did set the avatar into conversations?
[15:34:01] <onetha> Does the setting of the room avatar register in your logs?
[15:34:09] <Maranda> yes
[15:34:56] <onetha> Okay. Let me look at the logs again.
[15:47:00] <onetha> I couldn't see anything pointing to an error in the debug logs.
[16:07:10] <Maranda> onetha, you should see an IQ stanza of type "set" directed to the room jid in correspondence of the action of uploading the room avatar
[16:07:33] <Maranda> but are you 100% sure mod_muc_vcard is loaded?
[16:07:39] <onetha> I see that. But I don't see the error response. Shouldn't the debug log have the error?
[16:07:50] <Maranda> did you check in module:list() into the telnet console?
[16:07:50] <onetha> Yeah. 100% sure.
[16:08:17] <Maranda> onetha, if there's an error yeah
[16:08:51] <Maranda> or rather you should see the stanza header with the error
[16:10:45] <Maranda> onetha, other check you can do is navigating to /var/lib/metronome/<muchost>/room_icons/
[16:12:00] <Maranda> if using flat files an entry called <room-node>.dat should be created there where <room-node> is the first portion before @ of the room address
[16:16:37] <Maranda> onetha but I can't help more without access to the muc component or a proper log to see.
[16:22:01] <Maranda> the other recommendation I can give is to check if Metronome has writing access to the datastore depending on the storage backend used.
[16:24:29] <onetha> I'll look at all you've pointed out and get back to you.
[16:26:04] <Maranda> also it could be a problem on conversations end, it's possible you didn't get an error at all on Metronome side
[16:26:33] <onetha> The error was reproduced with Gajim
[16:27:11] <Maranda> what do you get into the Gajim console?
[16:29:45] <onetha> I can see the error on the Gajim console now.
[16:30:36] <Maranda> ...Yes but if you don't paste it here
[16:30:39] <onetha> Error type auth and <forbidden/>as content.
[16:31:11] <Maranda> That's not related to mod_muc_vcard
[16:32:28] <Maranda> so you're not seeing the correct error mod_muc_vcard only outputs <not-authorized /> at most
[16:34:11] <onetha> So how do I get around it?
[16:34:33] <Maranda> <!-- Outgoing 26/04/2020 18:34:01 (imadmin@lightwitch.org) -->
<iq xmlns="jabber:client" to="test@conference.lightwitch.org" type="set" id="cd1a75eb-b2d0-49b1-83a1-fc2dff1a1ad2">
<vCard xmlns="vcard-temp">
<PHOTO>
<TYPE>image/png</TYPE>
<BINVAL>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</BINVAL>
</PHOTO>
</vCard>
</iq>


<!-- Outgoing 26/04/2020 18:34:01 (imadmin@lightwitch.org) -->
<r xmlns="urn:xmpp:sm:3" />


<!-- Incoming 26/04/2020 18:34:01 (imadmin@lightwitch.org) -->
<iq xmlns="jabber:client" from="test@conference.lightwitch.org" type="result" id="cd1a75eb-b2d0-49b1-83a1-fc2dff1a1ad2" to="imadmin@lightwitch.org/gajim.NSA461QE" />
[16:34:54] <Maranda> This is the flow you should be getting when submitting an avatar to a room
[16:37:57] <Maranda> > So how do I get around it?
Honestly I have no idea you're not providing logs, neither the correct informations required for me to help you troubleshooting. I'm just blind-trying atm.
[16:38:39] <onetha> This is what I saw on the vcard_temp specification
> If a user attempts to perform an IQ set on another user's vCard (i.e., by setting a 'to' address to a JID other than the sending user's bare JID), the server MUST return a stanza error, which SHOULD be <forbidden/> or <not-allowed/>.

[16:39:23] <onetha> When I run the module:list() I can see it muc_vcard loaded on the room component
[16:39:27] <Maranda> I'm still on the idea, there's a configuration mistake on your side and the module is not loaded on the component
[16:39:46] <Maranda> onetha is /var/lib/metronome writable?
[16:40:14] <onetha> It is and owned by metronome
[16:40:20] <Maranda> and can you see anything into the <muc component host>/room_icons ?
[16:41:12] <onetha> That's empty
[16:42:16] <Maranda> are you certain gajim sent the stanza? And what is your log configuration from /etc/metronome/metronome.cfg.lua
[16:43:38] <onetha> Yeah. I am certain Gajim sent the stanza as I can see it in the debug log on the server.
[16:44:40] <Maranda> onetha, copy & paste the exact response stanza from Metronome please
[16:45:56] <onetha> the log config > log = {
> debug = "/var/log/metronome/metronome.dbg",
> info = "/var/log/metronome/metronome.log",
> error = "/var/log/metronome/metronome.err",
> };

[16:48:47] <Maranda> could you please paste the response of metronome to the IQ stanza to set the avatar from the console? just search for the correspondent id attribute e.g. if you look at the snippet I pasted both have cd1a75eb-b2d0-49b1-83a1-fc2dff1a1ad2
[16:49:06] <Maranda> also check the error log
[16:55:41] <Maranda> with your log settings if Metronome tracebacks, the traces will go in /var/log/metronome/metronome.err
[17:19:45] <Echo1> maranda committed --
mod_muc_log_http: advertise room logs url only if configured.
-> https://github.com/maranda/metronome/commit/462736c10c435dcb0991802b917c8906d2700bd9
[17:34:16] *** Maranda changed the title to "Metronome IM "cook" book room | Support and Dev talk about the Metronome XMPP server.

Latest stable version build is: 3.13.5

For more information you can visit: https://metronome.im

Room logs can be found here: https://muc.metronome.im/logs/grimoire/

* Links *
<==========================================================>
- Building & Installation:
https://metronome.im/building
- Documentation:
https://metronome.im/documentation
- Issues Tracker:
https://github.com/maranda/metronome/issues
<==========================================================>"

[18:04:45] <Echo1> maranda committed --
mod_muc: don't return unique names if element is not "unique".
-> https://github.com/maranda/metronome/commit/89d67e3639b21da79d74782800f8549e7f3e4340
[18:07:00] <Curator> @xep 307
[18:07:00] <Echo1> Curator: XEP-0307: Unique Room Names for Multi-User Chat is Standards Track (Deferred, Initial published version.) See: https://xmpp.org/extensions/xep-0307.html
[18:19:45] <Echo1> maranda committed --
mod_muc: do the same for disco info queries.
-> https://github.com/maranda/metronome/commit/baa04b550544d9ea40d22d427fef49d6524528c3
[19:40:18] <Maranda> @version metronome.im
[19:40:18] <Echo1> Maranda: metronome.im is running Metronome version 3.13.6 on a Neural Network
[19:55:46] <onetha>
[21:35:46] <onetha> > -- * Metronome IM *
> --
> -- This file is part of the Metronome XMPP server and is released under the
> -- ISC License, please see the LICENSE file in this source package for more
> -- information about copyright and licensing.
>
> if module:get_host_session().anonymous_host then
> module:log("error", "vCards won't be available on anonymous hosts as storage is explicitly disabled");
> require "core.modulemanager".unload(module.host, module.name);
> return;
> end
>
> local ipairs, pairs, tostring = ipairs, pairs, tostring;
>
> local st = require "util.stanza";
> local datamanager = require "util.datamanager";
> local storagemanager = require "core.storagemanager";
> local jid_split = require "util.jid".split;
> local sha1 = require "util.hashes".sha1;
> local b64_decode = require "util.encodings".base64.decode;
> local t_remove = table.remove;
> local metronome = metronome;
>
> local vcard_store = storagemanager.open(module.host, "vcard");
> local hash_store = storagemanager.open(module.host, "vcard_hash");
>
> local data_xmlns, metadata_xmlns = "urn:xmpp:avatar:data", "urn:xmpp:avatar:metadata";
>
> local vcard_max = module:get_option_number("vcard_max_size");
>
> module:add_feature("vcard-temp");
>
> local function handle_synchronize(event)
> local node, host = event.node, event.host;
> if host ~= module.host then return; end
>
> local vCard = st.deserialize(datamanager.load(node, host, "vcard"));
>
> if vCard then
> return vCard;
> else
> return false;
> end
> end
>
> local function handle_vcard(event)
> local session, stanza = event.origin, event.stanza;
> local to = stanza.attr.to;
> if stanza.attr.type == "get" then
> local vCard;
> if to then
> local node, host = jid_split(to);
> vCard = st.deserialize(vcard_store:get(node)); -- load vCard for user or server
> else
> vCard = st.deserialize(vcard_store:get(session.username)); -- load user's own vCard
> end
> if vCard then
> session.send(st.reply(stanza):add_child(vCard));
> else
> session.send(st.error_reply(stanza, "cancel", "item-not-found"));
> end
> else
> if not to then
> local vCard = stanza.tags[1];
>
> if vcard_max and tostring(vCard):len() > vcard_max then
> return session.send(st.error_reply(stanza, "modify", "policy-violation", "The vCard data exceeded the max allowed size!"));
> end
>
> local count = 0;
> for _, data_element in ipairs(vCard) do
> if data_element.name == "PHOTO" then count = count + 1; end
> end
> if count > 1 then
> return session.send(st.error_reply(stanza, "modify", "policy-violation", "vCards with multiple PHOTO elements are not supported"));
> end
>
> local ok, err = vcard_store:set(session.username, st.preserialize(vCard));
> if ok then
> session.send(st.reply(stanza));
> metronome.events.fire_event("vcard-updated", { node = session.username, host = session.host, vcard = vCard });
>
> local photo = vCard:child_with_name("PHOTO");
> if not photo then return true; end
>
> local from = stanza.attr.from or origin.full_jid;
> local pep_service = module:fire_event("pep-get-service", session.username, true, from);
> if pep_service then -- sync avatar
> local data, type = photo:child_with_name("BINVAL"), photo:child_with_name("TYPE");
> if data and type then
> module:log("debug", "Converting vCard-based Avatar to User Avatar...");
> data, type = data:get_text(), type:get_text();
> local bytes, id = data:len(), sha1(b64_decode(data), true);
>
> module:get_bare_session(session.username).avatar_hash = id;
> ok, err = hash_store:set(session.username, { hash = id });
> if not ok then
> module:log("warn", "Failed to save %s's avatar hash: %s", session.username.."@"..session.host, err);
> end
>
> local data_item = st.stanza("item", { id = id })
> :tag("data", { xmlns = data_xmlns }):text(data):up():up();
>
> local metadata_item = st.stanza("item", { id = id })
> :tag("metadata", { xmlns = metadata_xmlns })
> :tag("info", { bytes = bytes, id = id, type = type }):up():up():up();
>
> if not pep_service.nodes[data_xmlns] then
> pep_service:create(data_xmlns, from, { max_items = 1 });
> module:fire_event("pep-autosubscribe-recipients", pep_service, data_xmlns);
> end
> if not pep_service.nodes[metadata_xmlns] then
> pep_service:create(metadata_xmlns, from, { max_items = 1 });
> module:fire_event("pep-autosubscribe-recipients", pep_service, data_xmlns);
> end
>
> pep_service:publish(data_xmlns, from, id, data_item);
> pep_service:publish(metadata_xmlns, from, id, metadata_item);
> else
> module:log("warn", "Failed to perform avatar conversion, PHOTO element is not valid");
> end
> end
> else
> session.send(st.error_reply(stanza, "wait", "internal-server-error", err));
> end
> else
> session.send(st.error_reply(stanza, "auth", "forbidden"));
> end
> end
> return true;
> end
>
> local waiting_metadata = setmetatable({}, { __mode = "v" });
>
> local function handle_user_avatar(event)
> local node,
>
> item, from = event.node, event.item, event.from or event.origin.full_jid;
>
> if node == metadata_xmlns then
> local meta = item:get_child("metadata", node);
> local info = meta and meta:child_with_name("info");
>
> if info then
> local data = waiting_metadata[info.attr.id];
> if not data then return; end
> waiting_metadata[info.attr.id] = nil;
>
> local type = info.attr.type;
> local user, host = jid_split(from);
> local vCard = st.deserialize(datamanager.load(user, host, "vcard"));
> if vCard then
> for n, tag in ipairs(vCard.tags) do
> if tag.name == "PHOTO" then t_remove(vCard.tags, n); t_remove(vCard, n); end
> end
>
> vCard:tag("PHOTO")
> :tag("TYPE"):text(type):up()
> :tag("BINVAL"):text(data):up():up();
> else
> vCard = st.stanza("vCard", { xmlns = "vcard-temp" })
> :tag("PHOTO")
> :tag("TYPE"):text(type):up()
> :tag("BINVAL"):text(data):up():up();
> end
>
> module:log("debug", "Converting User Avatar to vCard-based Avatar...");
> local ok, err = vcard_store:set(user, st.preserialize(vCard));
> if not ok then module:log("warn", "Failed to save %s's vCard: %s", user.."@"..host, err); end
> module:get_bare_session(event.origin.username).avatar_hash = info.attr.id;
> ok, err = hash_store:set(user, { hash = info.attr.id });
> if not ok then module:log("warn", "Failed to save %s's avatar hash: %s", user.."@"..host, err); end
> end
> elseif node == data_xmlns then
> local data = item:get_child_text("data", node);
> if data then waiting_metadata[sha1(b64_decode(data), true)] = data; end
> end
> end
>
> local function handle_presence_inject(event)
> local session, stanza = event.origin, event.stanza;
> if session.type == "c2s" and not stanza.attr.type then
> local has_avatar = module:get_bare_session(session.username).avatar_hash;
> if has_avatar == nil then
> module:log("debug", "Caching Avatar hash of %s@%s...", session.username, session.host);
> local vc = hash_store:get(session.username);
> if vc then
> module:get_bare_session(session.username).avatar_hash = vc.hash;
> has_avatar = vc.hash;
> else
> module:get_bare_session(session.username).avatar_hash = false;
> return;
> end
> elseif has_avatar == false then
> return;
> end
>
> local vcard_update = stanza:get_child("x", "vcard-temp:x:update");
> local photo = vcard_update and vcard_update:child_with_name("photo");
> if photo and photo:get_text() ~= "" then
> photo[1] = nil;
> photo:text(has_avatar);
> elseif not photo or not vcard_update then
> if not vcard_update then
> stanza:tag("x", { xmlns = "vcard-temp:x:update" })
> :tag("photo"):text(has_avatar):up():up();
> elseif not photo then
> vcard_update:tag("photo"):text(has_avatar):up();
> end
> end
> end
> end
>
> module:hook("account-disco-info", function(event)
> event.stanza:tag("feature", { var = "urn:xmpp:pep-vcard-conversion:0" }):up();
> end, 45);
>
> module:hook_global("vcard-synchronize", handle_synchronize);
> module:hook("iq/bare/vcard-temp:vCard", handle_vcard);
> module:hook("iq/host/vcard-temp:vCard", handle_vcard);
> module:hook("pre-presence/bare", handle_presence_inject, 50);
> module:hook("pre-presence/full", handle_presence_inject, 50);
> module:hook("pre-presence/host", handle_presence_inject, 50);
> module:hook("pep-node-publish", handle_user_avatar);
>
> module.unload = function(reload)
> if not reload then
> for jid, session in module:get_bare_sessions() do session.avatar_hash = nil; end
> end
> end
>

[21:36:12] <onetha> I found what was causing the error. But I have no idea how my mod_vcard.lua file got that bug. Above is a copy of that file.
[21:37:15] <onetha> Line 63 was the culprit.
[21:45:38] <onetha> Interestingly I no longer get the error but I don't see the avatar uploaded either. But now I have a vcard directory in the /var/lib/metronome/$muc_host directory, and the folder contains a $room_owner.dat file
[21:45:42] <Maranda> onetha, wait
[21:46:06] <Maranda> are you trying to set a room icon correct?
[21:46:22] <Maranda> mod_vcard has nothing to do with it
[21:46:50] <onetha> A room icon yes
[21:48:43] <Maranda> as I said for the room icon you need *mod_muc_vcard* not the other one
[21:49:20] <Maranda> is mod_vcard loaded on the muc component? I mean this is starting to be quite confused
[21:50:48] <onetha> Yeah. Both the vcard and muc_vcard modules are loaded.
[21:51:57] <onetha> Can I see your mod_vcard file?
[21:52:43] <Maranda> onetha, run module:list() in the telnet console and make sure "vcard" doesn't appear into the list of modules loaded on the MUC component
[21:52:58] <Maranda> onetha, it's exactly the same
[21:53:47] <Maranda> but mod_vcard has nothing to do with this, I wonder if there's some miscomprehension of sort
[21:54:04] <Maranda> *mod_vcard shouldn't be loaded on the muc component*
[21:54:16] <Maranda> ONLY *mod_muc_vcard*
[21:54:21] <onetha> It has vcard loaded in the muc component.
[21:54:23] <Maranda> it's two separated modules
[21:55:20] <Maranda> onetha, in the console run module:unload("muc.chat.proservcustomersolutions.com","vcard")
[21:55:59] <onetha> Okay. I have
[21:56:57] <Maranda> also remove "vcard" from the modules_enabled = {} section in the config
[21:58:10] <Maranda> if you run module:list() does "muc_vcard" appear on your MUC component?
[22:00:31] <Maranda> if not, run in the console:
module:load("muc.chat.proservcustomersolutions.com","muc_vcard")
[22:01:01] <Maranda> and add it in the component modules_enabled = {} section then retry to upload a room avatar
[22:01:48] <Maranda> the problem was that you had the wrong module loaded on the component
[22:10:50] <onetha> Maranda, thanks. The problem was I had two of them load on the muc component and vcard was overriding muc_vcard.
[22:11:38] <onetha> Thanks for all the help.
[22:15:41] <Maranda> Np