Mercurial > prosody-hg
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 |
| 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 |
