Mercurial > prosody-modules
view mod_map/mod_map.lua @ 5255:001c8fdc91a4
mod_http_oauth2: Add support for the "openid" scope
This "openid" scope is there to signal access to the userinfo endpoint,
which is needed for OIDC support.
We don't actually check this later because the userinfo endpoint only
returns info embedded in the token itself, but in the future we may want
to check this more carefully.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 16 Mar 2023 17:06:35 +0100 |
parents | d0c2f001735f |
children |
line wrap: on
line source
local st = require "util.stanza"; local jid_bare = require "util.jid".bare; local rsm = require "util.rsm"; local dataform = require "util.dataforms".new; local datetime = require "util.datetime".datetime; local archive = module:open_store("archive", "archive"); local query_form = dataform { { name = "with"; type = "jid-single"; }; { name = "start"; type = "text-single" }; { name = "end"; type = "text-single"; }; }; if not archive.summary then module:log("error", "The archive:summary() API is not supported by %s", archive._provided_by); return end module:hook("iq-get/self/xmpp:prosody.im/mod_map:summary", function(event) local origin, stanza = event.origin, event.stanza; local query = stanza.tags[1]; -- Search query parameters local qwith, qstart, qend; local form = query:get_child("x", "jabber:x:data"); if form then local err; form, err = query_form:data(form); if err then origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); return true; end qwith, qstart, qend = form["with"], form["start"], form["end"]; qwith = qwith and jid_bare(qwith); -- dataforms does jidprep end local qset = rsm.get(query); local qmax = qset and qset.max; local before, after = qset and qset.before, qset and qset.after; if type(before) ~= "string" then before = nil; end local summary = archive:summary(origin.username, { start = qstart; ["end"] = qend; -- Time range with = qwith; limit = qmax; before = before; after = after; }); if not summary then module:send(st.error_reply(stanza, "wait", "internal-server-error")); return true; end local reply = st.reply(stanza); reply:tag("summary", { xmlns = "xmpp:prosody.im/mod_map" }); for jid, count in pairs(summary.counts) do reply:tag("item", { jid = jid }); if type(count) == "number" then reply:text_tag("count", ("%d"):format(count)); end if summary.earliest and summary.earliest[jid] then reply:text_tag("start", datetime(summary.earliest[jid])); end if summary.latest and summary.latest[jid] then reply:text_tag("end", datetime(summary.latest[jid])); end if summary.body and summary.body[jid] then reply:text_tag("body", summary.body[jid]); end reply:up(); end module:send(reply); return true; end);