Mercurial > prosody-modules
comparison mod_muc_cache_media/mod_muc_cache_media.lua @ 6419:233691533318
mod_muc_cache_media: use raw strings not patterns
| author | Stephen Paul Weber <singpolyma@singpolyma.net> |
|---|---|
| date | Tue, 24 Feb 2026 15:26:37 -0500 |
| parents | 98e06fc5680f |
| children | 0a9b516e388e |
comparison
equal
deleted
inserted
replaced
| 6418:98e06fc5680f | 6419:233691533318 |
|---|---|
| 69 return lfs.attributes(path,"size") or 0 | 69 return lfs.attributes(path,"size") or 0 |
| 70 end | 70 end |
| 71 | 71 |
| 72 local function filename_from_url(url) | 72 local function filename_from_url(url) |
| 73 return url:match(".*/([^/?]+)$") or "file" | 73 return url:match(".*/([^/?]+)$") or "file" |
| 74 end | |
| 75 | |
| 76 local function pattern_from_string(s) | |
| 77 return s:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end) | |
| 74 end | 78 end |
| 75 | 79 |
| 76 local function secure_download_to_disk(url) | 80 local function secure_download_to_disk(url) |
| 77 local parsed = socket_url.parse(url) | 81 local parsed = socket_url.parse(url) |
| 78 if not parsed or (parsed.scheme~="http" and parsed.scheme~="https") then return promise.reject("invalid scheme") end | 82 if not parsed or (parsed.scheme~="http" and parsed.scheme~="https") then return promise.reject("invalid scheme") end |
| 179 end | 183 end |
| 180 end | 184 end |
| 181 | 185 |
| 182 stanza:maptags(function(el) | 186 stanza:maptags(function(el) |
| 183 if el.name == "body" then | 187 if el.name == "body" then |
| 184 return st.stanza("body"):text(el:get_text():gsub(original_url, data.local_url)) | 188 return st.stanza("body"):text(el:get_text():gsub(pattern_from_string(original_url), data.local_url)) |
| 185 elseif el.name == "fallback" and el.attr.xmlns == "urn:xmpp:fallback:0" and (el.attr["for"] == "jabber:x:oob" or el.attr["for"] == "urn:xmpp:sims:1") then | 189 elseif el.name == "fallback" and el.attr.xmlns == "urn:xmpp:fallback:0" and (el.attr["for"] == "jabber:x:oob" or el.attr["for"] == "urn:xmpp:sims:1") then |
| 186 return el:maptags(function(subel) | 190 return el:maptags(function(subel) |
| 187 local s, e = string.find(original_body, original_url) | 191 local s, e = string.find(original_body, original_url, 1, true) |
| 188 if subel.name == "body" and math.abs(s - tonumber(subel.attr.start)) < 5 then | 192 if s and subel.name == "body" and math.abs(s - tonumber(subel.attr.start)) < 5 then |
| 189 subel.attr["end"] = tostring((tonumber(subel.attr["end"]) - #original_url) + #data.local_url) | 193 subel.attr["end"] = tostring((tonumber(subel.attr["end"]) - #original_url) + #data.local_url) |
| 190 end | 194 end |
| 191 return subel | 195 return subel |
| 192 end) | 196 end) |
| 193 else | 197 else |
