Mercurial > prosody-modules
comparison mod_ogp/mod_ogp.lua @ 4482:21698b960bd6
mod_ogp: Add the ability to detect and process multiple URLs in a body
| author | JC Brand <jc@opkode.com> |
|---|---|
| date | Tue, 02 Mar 2021 12:04:14 +0100 |
| parents | dbfda7f5522d |
| children | c4f11a4b5ac7 |
comparison
equal
deleted
inserted
replaced
| 4481:e453eaf1589e | 4482:21698b960bd6 |
|---|---|
| 3 local st = require "util.stanza" | 3 local st = require "util.stanza" |
| 4 local url_pattern = [[https?://%S+]] | 4 local url_pattern = [[https?://%S+]] |
| 5 local xmlns_fasten = "urn:xmpp:fasten:0"; | 5 local xmlns_fasten = "urn:xmpp:fasten:0"; |
| 6 local xmlns_xhtml = "http://www.w3.org/1999/xhtml"; | 6 local xmlns_xhtml = "http://www.w3.org/1999/xhtml"; |
| 7 | 7 |
| 8 local function ogp_handler(event) | |
| 9 local room, stanza = event.room, st.clone(event.stanza) | |
| 10 local body = stanza:get_child_text("body") | |
| 11 if not body then return; end | |
| 12 | 8 |
| 13 local url = body:match(url_pattern) | 9 local function fetch_ogp_data(room, url, origin_id) |
| 14 if not url then return; end | 10 if not url then return; end |
| 15 | |
| 16 local origin_id = stanza:find("{urn:xmpp:sid:0}origin-id@id") | |
| 17 if not origin_id then return; end | |
| 18 | 11 |
| 19 http.request( | 12 http.request( |
| 20 url, | 13 url, |
| 21 nil, | 14 nil, |
| 22 function(response_body, response_code, _) | 15 function(response_body, response_code, _) |
| 69 module:log("info", tostring(fastening)) | 62 module:log("info", tostring(fastening)) |
| 70 end | 63 end |
| 71 ) | 64 ) |
| 72 end | 65 end |
| 73 | 66 |
| 67 local function ogp_handler(event) | |
| 68 local room, stanza = event.room, st.clone(event.stanza) | |
| 69 local body = stanza:get_child_text("body") | |
| 70 | |
| 71 if not body then return; end | |
| 72 | |
| 73 local origin_id = stanza:find("{urn:xmpp:sid:0}origin-id@id") | |
| 74 if not origin_id then return; end | |
| 75 | |
| 76 for url in body:gmatch(url_pattern) do | |
| 77 fetch_ogp_data(room, url, origin_id); | |
| 78 end | |
| 79 end | |
| 80 | |
| 74 module:hook("muc-occupant-groupchat", ogp_handler) | 81 module:hook("muc-occupant-groupchat", ogp_handler) |
| 75 | 82 |
| 76 | 83 |
| 77 module:hook("muc-message-is-historic", function (event) | 84 module:hook("muc-message-is-historic", function (event) |
| 78 local fastening = event.stanza:get_child('apply-to', xmlns_fasten) | 85 local fastening = event.stanza:get_child('apply-to', xmlns_fasten) |
