Mercurial > prosody-modules
view mod_map/mod_map.lua @ 5407:149634647b48
mod_http_oauth2: Don't issue client_secret when not using authentication
This is pretty much only for implicit flow, which is considered insecure
anyway, so this is of limited value. If we delete all the implicit flow
code, this could be reverted.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 02 May 2023 16:39:32 +0200 |
| 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);
