annotate mod_compliance_2023/mod_compliance_2023.lua @ 6562:5da6fb562df9 default tip

mod_unified_push: Fix push error handling (fixes #2000) Use the error object that send_iq() passes as an argument to it's reject callback instead of attempting and failing to do the parsing in the callback itself.
author kmq
date Mon, 06 Jul 2026 14:23:57 +0200
parents 1a6cd0bbb7ab
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6082
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
1 -- Copyright (c) 2021 Kim Alvefur
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
2 --
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
3 -- This module is MIT licensed.
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
4
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
5 local hostmanager = require "core.hostmanager";
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
6
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
7 local array = require "util.array";
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
8 local set = require "util.set";
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
9
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
10 local modules_enabled = module:get_option_inherited_set("modules_enabled");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
11
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
12 for host in pairs(hostmanager.get_children(module.host)) do
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
13 local component = module:context(host):get_option_string("component_module");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
14 if component then
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
15 modules_enabled:add(component);
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
16 modules_enabled:include(module:context(host):get_option_set("modules_enabled", {}));
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
17 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
18 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
19
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
20 local function check(suggested, alternate, ...)
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
21 if set.intersection(modules_enabled, set.new({suggested; alternate; ...})):empty() then return suggested; end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
22 return false;
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
23 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
24
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
25 local compliance = {
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
26 array {"Server"; check("tls"); check("disco")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
27
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
28 array {"Advanced Server"; check("pep", "pep_simple")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
29
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
30 array {"Web"; check("bosh"); check("websocket")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
31
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
32 -- No Server requirements for Advanced Web
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
33
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
34 array {"IM"; check("vcard_legacy", "vcard"); check("carbons"); check("http_file_share", "http_upload")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
35
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
36 array {
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
37 "Advanced IM";
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
38 check("vcard_legacy", "vcard");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
39 check("blocklist");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
40 check("muc");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
41 check("private");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
42 check("smacks");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
43 check("mam");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
44 check("bookmarks");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
45 };
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
46
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
47 array {"Mobile"; check("smacks"); check("csi_simple", "csi_battery_saver")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
48
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
49 array {"Advanced Mobile"; check("cloud_notify")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
50
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
51 array {"A/V Calling"; check("turn_external", "external_services", "turncredentials", "extdisco")};
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
52
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
53 };
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
54
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
55 function check_compliance()
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
56 local compliant = true;
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
57 for _, suite in ipairs(compliance) do
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
58 local section = suite:pop(1);
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
59 if module:get_option_boolean("compliance_" .. section:lower():gsub("%A", "_"), true) then
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
60 local missing = set.new(suite:filter(function(m) return type(m) == "string" end):map(function(m) return "mod_" .. m end));
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
61 if suite[1] then
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
62 if compliant then
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
63 compliant = false;
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
64 module:log("warn", "Missing some modules for XMPP Compliance 2023");
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
65 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
66 module:log("info", "%s Compliance: %s", section, missing);
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
67 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
68 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
69 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
70
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
71 if compliant then module:log("info", "XMPP Compliance 2023: Compliant ✔️"); end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
72 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
73
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
74 if prosody.start_time then
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
75 check_compliance()
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
76 else
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
77 module:hook_global("server-started", check_compliance);
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
78 end
1a6cd0bbb7ab mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version.
Menel <menel@snikket.de>
parents:
diff changeset
79