annotate mod_xmllang_check/mod_xmllang_check.lua @ 6549:d2e50b587721

mod_firewall: marks: switch to keyval+ store API
author Matthew Wild <mwild1@gmail.com>
date Sun, 24 May 2026 10:49:09 +0100
parents de3dc4297035
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6401
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1 -- Strip invalid xml:lang values from outgoing s2s stanzas.
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 --
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 -- xmpplang.lib.lua must return a function that validates xml:lang strings.
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 local is_valid_xml_lang = module:require "xmpplang";
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 local function strip_invalid_xml_lang(element)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 local xml_lang = element.attr["xml:lang"];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8 if xml_lang ~= nil and not is_valid_xml_lang(xml_lang, element) then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 element.attr["xml:lang"] = nil;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 for child in element:childtags() do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 strip_invalid_xml_lang(child);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17 module:hook("route/remote", function (event)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 -- FIXME should we clone the stanza vs modifying in place?
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 -- FIXME should we replace recursively vs checking a specific subset of elements?
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 -- FIXME instead of outgoing, should we clean incoming stanzas from everywhere, so invalid xml:lang stanzas are never sent or stored?
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 strip_invalid_xml_lang(event.stanza);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 end, 500);