Mercurial > prosody-modules
view mod_muc_media_metadata/mod_muc_media_metadata.lua @ 4409:44f6537f6427
mod_invites_adhoc: Fail contact invite if user is not on current host
Only the username was being used, and the host of the requester ignored.
Luckily this only affects admins of the host. If they want to create an
account they can use the other command. If they want to create a contact
they should request from their account on this host.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 28 Jan 2021 07:04:11 +0000 |
parents | d4537f045a78 |
children |
line wrap: on
line source
local async = require "util.async"; local promise = require "util.promise"; local http = require "net.http"; local st = require "util.stanza"; local xmlns_metadata = "xmpp:prosody.im/protocol/media-metadata#0" local fetch_headers = { bytes = "content-length"; type = "content-type"; etag = "etag"; blurhash = "blurhash"; }; local function fetch_media_metadata(url) return promise.new(function (resolve) http.request(url, { method = "HEAD" }, function (body, code, response) --luacheck: ignore 212/body if code == 200 then local metadata = {}; for metadata_name, header_name in pairs(fetch_headers) do metadata[metadata_name] = response.headers[header_name]; end resolve(metadata); else resolve(nil); end end); end); end local function metadata_to_tag(metadata) if not metadata then return; end local metadata_tag = st.stanza("metadata", { xmlns = xmlns_metadata }); for k, v in pairs(metadata) do metadata_tag:text_tag(k, v) end return metadata_tag; end module:hook("muc-occupant-groupchat", function (event) local stanza = event.stanza; local promises; for oob in stanza:childtags("x", "jabber:x:oob") do if not promises then promises = {}; end local url = oob:get_child_text("url"); local p = fetch_media_metadata(url) :next(metadata_to_tag) :next(function (metadata_tag) oob:add_child(metadata_tag); end); table.insert(promises, p); end if not promises then return; end async.wait(promise.all(promises)); end);