Software /
code /
prosody-modules
Comparison
mod_ogp/mod_ogp.lua @ 4459:dbfda7f5522d
mod_ogp: Make sure OGP fasten messages get archived
- By adding a type of "groupchat"
- By adding a hook for `muc-message-is-historic`
author | JC Brand <jc@opkode.com> |
---|---|
date | Mon, 22 Feb 2021 17:37:50 +0100 |
parent | 4255:38da10e4b593 |
child | 4482:21698b960bd6 |
comparison
equal
deleted
inserted
replaced
4458:5234d0c8883d | 4459:dbfda7f5522d |
---|---|
1 local mod_muc = module:depends("muc") | 1 local mod_muc = module:depends("muc") |
2 local http = require "net.http" | 2 local http = require "net.http" |
3 local st = require "util.stanza" | 3 local st = require "util.stanza" |
4 | |
5 local ogp_pattern = [[<meta property=["']?(og:.-)["']? content=%s*["']?(.-)["']?%s-/?>]] | |
6 local ogp_pattern2 = [[<meta content=%s*["']?(.-)["']? property=["']?(og:.-)["']?%s-/?>]] | |
7 local url_pattern = [[https?://%S+]] | 4 local url_pattern = [[https?://%S+]] |
5 local xmlns_fasten = "urn:xmpp:fasten:0"; | |
6 local xmlns_xhtml = "http://www.w3.org/1999/xhtml"; | |
8 | 7 |
9 local function ogp_handler(event) | 8 local function ogp_handler(event) |
10 local room, stanza = event.room, st.clone(event.stanza) | 9 local room, stanza = event.room, st.clone(event.stanza) |
11 local body = stanza:get_child_text("body") | 10 local body = stanza:get_child_text("body") |
12 if not body then return; end | 11 if not body then return; end |
25 return | 24 return |
26 end | 25 end |
27 | 26 |
28 local to = room.jid | 27 local to = room.jid |
29 local from = room and room.jid or module.host | 28 local from = room and room.jid or module.host |
30 local fastening = st.message({to = to, from = from}):tag("apply-to", {xmlns = "urn:xmpp:fasten:0", id = origin_id}) | 29 local fastening = st.message({to = to, from = from, type = 'groupchat'}):tag("apply-to", {xmlns = xmlns_fasten, id = origin_id}) |
31 local found_metadata = false | 30 local found_metadata = false |
32 local message_body = "" | 31 local message_body = "" |
33 | 32 |
34 local meta_pattern = [[<meta (.-)/?>]] | 33 local meta_pattern = [[<meta (.-)/?>]] |
35 for match in response_body:gmatch(meta_pattern) do | 34 for match in response_body:gmatch(meta_pattern) do |
52 if property and content then | 51 if property and content then |
53 module:log("info", property .. "\t" .. content) | 52 module:log("info", property .. "\t" .. content) |
54 fastening:tag( | 53 fastening:tag( |
55 "meta", | 54 "meta", |
56 { | 55 { |
57 xmlns = "http://www.w3.org/1999/xhtml", | 56 xmlns = xmlns_xhtml, |
58 property = property, | 57 property = property, |
59 content = content | 58 content = content |
60 } | 59 } |
61 ):up() | 60 ):up() |
62 found_metadata = true | 61 found_metadata = true |
63 message_body = message_body .. property .. "\t" .. content .. "\n" | 62 message_body = message_body .. property .. "\t" .. content .. "\n" |
64 end | 63 end |
65 end | 64 end |
66 | |
67 | 65 |
68 if found_metadata then | 66 if found_metadata then |
69 mod_muc.get_room_from_jid(room.jid):broadcast_message(fastening) | 67 mod_muc.get_room_from_jid(room.jid):broadcast_message(fastening) |
70 end | 68 end |
71 module:log("info", tostring(fastening)) | 69 module:log("info", tostring(fastening)) |
72 end | 70 end |
73 ) | 71 ) |
74 end | 72 end |
75 | 73 |
76 module:hook("muc-occupant-groupchat", ogp_handler) | 74 module:hook("muc-occupant-groupchat", ogp_handler) |
75 | |
76 | |
77 module:hook("muc-message-is-historic", function (event) | |
78 local fastening = event.stanza:get_child('apply-to', xmlns_fasten) | |
79 if fastening and fastening:get_child('meta', xmlns_xhtml) then | |
80 return true | |
81 end | |
82 end); |