annotate plugins/mod_server_info.lua @ 14218:926f25af2ffe 13.0

util.tlsref: New util library to encapsulate the Mozilla/TLSRef recommendations Previously we embedded this data directly into core.certmanager. This splits it out, for various benefits: - Removes data from the business logic (the config parsing is complex enough as it is) - Allows easier testing and tracking of the data (this commit adds various consistency checks, so that we can have more confidence in future updates to the data not breaking stuff) This library also supports multiple versions of the recommendations. Previously we picked a single version, and put that into certmanager. But this meant we had to make choices for our users, and one of the choices is between advancing security standards and ensuring we don't break connectivity for people doing minor upgrades (deterring people from performing minor upgrades would have a security impact too). This library supports the concept of a "default" and a "latest" version, so we are now free to add new versions into stable releases, and admins can pick between compatibility and security.
author Matthew Wild <mwild1@gmail.com>
date Fri, 12 Jun 2026 13:01:56 +0100
parents 1ce18cb3e6cc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13436
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local dataforms = require "prosody.util.dataforms";
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local server_info_config = module:get_option("server_info", {});
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local server_info_custom_fields = module:get_option_array("server_info_extensions");
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- Source: http://xmpp.org/registrar/formtypes.html#http:--jabber.org-network-serverinfo
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local form_layout = dataforms.new({
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 { var = "FORM_TYPE"; type = "hidden"; value = "http://jabber.org/network/serverinfo" };
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 });
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 if server_info_custom_fields then
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 for _, field in ipairs(server_info_custom_fields) do
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 table.insert(form_layout, field);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 local generated_form;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 function update_form()
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local new_form = form_layout:form(server_info_config, "result");
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 if generated_form then
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 module:remove_item("extension", generated_form);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 generated_form = new_form;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 module:add_item("extension", generated_form);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 function add_fields(event)
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local fields = event.item;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 for _, field in ipairs(fields) do
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 table.insert(form_layout, field);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 update_form();
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 function remove_fields(event)
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 local removed_fields = event.item;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 for _, removed_field in ipairs(removed_fields) do
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 local removed_var = removed_field.var or removed_field.name;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 for i, field in ipairs(form_layout) do
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 local var = field.var or field.name
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 if var == removed_var then
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 table.remove(form_layout, i);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 break;
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 update_form();
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 end
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 module:handle_items("server-info-fields", add_fields, remove_fields);
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 function module.load()
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 update_form();
1ce18cb3e6cc mod_server_info: New module to manage the serverinfo disco extension form
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 end