# HG changeset patch # User Seve Ferrer # Date 1605463654 -3600 # Node ID 1327e1e1c94e467dcb6a0e18c1387a18f9cfcca4 # Parent d33b480befcba11a6d9b78db5971ddffe33857dd mod_ogp: Add module diff -r d33b480befcb -r 1327e1e1c94e mod_ogp/README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_ogp/README.md Sun Nov 15 19:07:34 2020 +0100 @@ -0,0 +1,1 @@ +In development. \ No newline at end of file diff -r d33b480befcb -r 1327e1e1c94e mod_ogp/mod_ogp.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_ogp/mod_ogp.lua Sun Nov 15 19:07:34 2020 +0100 @@ -0,0 +1,68 @@ +local mod_muc = module:depends("muc") +local http = require "net.http" +local st = require "util.stanza" + +local ogp_pattern = [[]] +local ogp_pattern2 = [[]] +local url_pattern = [[https?://%S+]] + +local function ogp_handler(event) + local room, stanza = event.room, st.clone(event.stanza) + local body = stanza:get_child_text("body") + if not body then return; end + + local url = body:match(url_pattern) + if not url then return; end + + local origin_id = stanza:find("{urn:xmpp:sid:0}origin-id@id") + if not origin_id then return; end + + http.request( + url, + nil, + function(response_body, response_code, _) + if response_code ~= 200 then + return + end + + local to = room.jid + local from = room and room.jid or module.host + local fastening = st.message({to = to, from = from}):tag("apply-to", {xmlns = "urn:xmpp:fasten:0", id = origin_id}) + local found_metadata = false + local message_body = "" + for property, content in response_body:gmatch(ogp_pattern) do + module:log("info", property .. "\t" .. content) + fastening:tag( + "meta", + { + xmlns = "http://www.w3.org/1999/xhtml", + property = property, + content = content + } + ):up() + found_metadata = true + message_body = message_body .. property .. "\t" .. content .. "\n" + end + for content, property in response_body:gmatch(ogp_pattern2) do + module:log("info", property .. "\t" .. content) + fastening:tag( + "meta", + { + xmlns = "http://www.w3.org/1999/xhtml", + property = property, + content = content + } + ):up() + found_metadata = true + message_body = message_body .. property .. "\t" .. content .. "\n" + end + + if found_metadata then + mod_muc.get_room_from_jid(room.jid):broadcast_message(fastening) + end + module:log("info", tostring(fastening)) + end + ) +end + +module:hook("muc-occupant-groupchat", ogp_handler)