Mercurial > prosody-modules
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 |
| 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); |
