comparison mod_ogp/mod_ogp.lua @ 4598:09f0911c735d

mod_ogp: Add the ability to block OGP fetching for certain domains
author JC Brand <jc@opkode.com>
date Tue, 22 Jun 2021 12:25:36 +0200
parents 0136c98f574c
children
comparison
equal deleted inserted replaced
4597:c858c76d0845 4598:09f0911c735d
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 domain_pattern = '^%w+://([^/]+)' 5 local domain_pattern = '^%w+://([^/]+)'
6 local xmlns_fasten = "urn:xmpp:fasten:0" 6 local xmlns_fasten = "urn:xmpp:fasten:0"
7 local xmlns_xhtml = "http://www.w3.org/1999/xhtml" 7 local xmlns_xhtml = "http://www.w3.org/1999/xhtml"
8 local whitelist = module:get_option_set("ogp_domain_whitelist", {}) 8 local allowlist = module:get_option_set("ogp_domain_allowlist", module:get_option_set("ogp_domain_whitelist", {}))
9 local denylist = module:get_option_set("ogp_domain_denylist", {})
9 10
10 11
11 local function is_whitelisted(url) 12 local function is_allowed(domain)
12 if whitelist:empty() then 13 if allowlist:empty() then
13 return true 14 return true
14 end 15 end
15 local domain = url:match(domain_pattern) 16 if allowlist:contains(domain) then
16 if whitelist:contains(domain) then 17 return true
17 return true; 18 end
19 return false
20 end
21
22 local function is_denied(domain)
23 if denylist:empty() then
24 return false
25 end
26 if denylist:contains(domain) then
27 return true
18 end 28 end
19 return false 29 return false
20 end 30 end
21 31
22 32
23 local function fetch_ogp_data(room, url, origin_id) 33 local function fetch_ogp_data(room, url, origin_id)
24 if not url or not is_whitelisted(url) then 34 if not url then
35 return;
36 end
37
38 local domain = url:match(domain_pattern);
39 if is_denied(domain) or not is_allowed(domain) then
25 return; 40 return;
26 end 41 end
27 42
28 http.request( 43 http.request(
29 url, 44 url,