Software /
code /
prosody-modules
File
mod_muc_media_metadata/mod_muc_media_metadata.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 |
parent | 3688:d4537f045a78 |
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);