Mercurial > prosody-modules
view mod_mamsub/mod_mamsub.lua @ 5416:2393dbae51ed
mod_http_oauth2: Add option for specifying TTL of registered clients
Meant to simplify configuration, since TTL vs ignoring expiration is
expected to be the main thing one would want to configure.
Unsure what the implications of having unlimited lifetime of clients
are, given no way to revoke them currently, short of rotating the
signing secret.
On one hand, it would be annoying to have the client expire.
On the other hand, it is trivial to re-register it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 04 May 2023 18:41:33 +0200 |
parents | 0697fbef9134 |
children |
line wrap: on
line source
-- MAM Subscriptions prototype -- Copyright (C) 2015 Kim Alvefur -- -- This file is MIT/X11 licensed. local mt = require"util.multitable"; local st = require"util.stanza"; local xmlns_mamsub = "http://prosody.im/protocol/mamsub"; module:add_feature(xmlns_mamsub); local host_sessions = prosody.hosts[module.host].sessions; local weak = { __mode = "k" }; module:hook("iq-set/self/"..xmlns_mamsub..":subscribe", function (event) local origin, stanza = event.origin, event.stanza; if origin.mamsub ~= nil then origin.send(st.error_reply(stanza, "modify", "conflict")); return true; end origin.mamsub = xmlns_mamsub; local mamsub_sessions = host_sessions[origin.username].mamsub_sessions; if not mamsub_sessions then mamsub_sessions = setmetatable({}, weak); host_sessions[origin.username].mamsub_sessions = mamsub_sessions; end mamsub_sessions[origin] = true; origin.send(st.reply(stanza)); return true; end); module:hook("iq-set/self/"..xmlns_mamsub..":unsubscribe", function (event) local origin, stanza = event.origin, event.stanza; if origin.mamsub ~= xmlns_mamsub then origin.send(st.error_reply(stanza, "modify", "conflict")); return true; end origin.mamsub = nil; local mamsub_sessions = host_sessions[origin.username].mamsub_sessions; if mamsub_sessions then mamsub_sessions[origin] = nil; end origin.send(st.reply(stanza)); return true; end); module:hook("archive-message-added", function (event) local user_session = host_sessions[event.for_user]; local mamsub_sessions = user_session and user_session.mamsub_sessions; if not mamsub_sessions then return end; local for_broadcast = st.message():tag("mamsub", { xmlns = xmlns_mamsub }) :tag("forwarded", { xmlns = "urn:xmpp:forward:0" }) :add_child(event.stanza); for session in pairs(mamsub_sessions) do if session.mamsub == xmlns_mamsub then for_broadcast.attr.to = session.full_jid; session.send(for_broadcast); end end end);