annotate plugins/muc/hats.lib.lua @ 12694:26a004c96ef8

util.paseto: Implementation of PASETO v4.public tokens PASETO provides an alternative to JWT with the promise of fewer implementation pitfalls. The v4.public algorithm allows asymmetric cryptographically-verified token issuance and validation. In summary, such tokens can be issued by one party and securely verified by any other party independently using the public key of the issuer. This has a number of potential applications in a decentralized network and ecosystem such as XMPP. For example, such tokens could be combined with XEP-0317 to allow hats to be verified even in the context of a third-party MUC service.
author Matthew Wild <mwild1@gmail.com>
date Fri, 24 Jun 2022 17:03:28 +0100
parents 43b43e7156b8
children 74b9e05af71e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10693
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local st = require "util.stanza";
10714
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10693
diff changeset
2 local muc_util = module:require "muc/util";
10693
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local xmlns_hats = "xmpp:prosody.im/protocol/hats:1";
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
10714
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10693
diff changeset
6 -- Strip any hats claimed by the client (to prevent spoofing)
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10693
diff changeset
7 muc_util.add_filtered_namespace(xmlns_hats);
10693
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
11245
43b43e7156b8 MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents: 10714
diff changeset
9
10714
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10693
diff changeset
10 module:hook("muc-build-occupant-presence", function (event)
11245
43b43e7156b8 MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents: 10714
diff changeset
11 local bare_jid = event.occupant and event.occupant.bare_jid or event.bare_jid;
43b43e7156b8 MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents: 10714
diff changeset
12 local aff_data = event.room:get_affiliation_data(bare_jid);
10693
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local hats = aff_data and aff_data.hats;
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 if not hats then return; end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local hats_el;
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 for hat_id, hat_data in pairs(hats) do
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 if hat_data.active then
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 if not hats_el then
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 hats_el = st.stanza("hats", { xmlns = xmlns_hats });
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 hats_el:tag("hat", { uri = hat_id, title = hat_data.title }):up();
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 if not hats_el then return; end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 event.stanza:add_direct_child(hats_el);
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 end);