Mercurial > prosody-hg
view plugins/mod_server_info.lua @ 14217:7eb0e47418ab 13.0
util.human.io: Add simple version comparison
This is a small helper function that compares version string (it can be passed
to table.sort() as a comparator).
Full version sorts (e.g. semver, and natural/alphanumeric sort in general) are
more complex, and I would like to eventually support those. But this is a
stable branch and we don't need it for anything just yet.
Regarding justification for the stable branch:
The function is being committed with extensive tests, and isn't currently used
anywhere. The plan is to use it in an upcoming update of how TLS profiles are
configured, but the inputs in that case will be fixed (meaning that the risk
of breakage is lower than if we were running it against arbitrary data).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 12 Jun 2026 11:38:39 +0100 |
| parents | 1ce18cb3e6cc |
| children |
line wrap: on
line source
local dataforms = require "prosody.util.dataforms"; local server_info_config = module:get_option("server_info", {}); local server_info_custom_fields = module:get_option_array("server_info_extensions"); -- Source: http://xmpp.org/registrar/formtypes.html#http:--jabber.org-network-serverinfo local form_layout = dataforms.new({ { var = "FORM_TYPE"; type = "hidden"; value = "http://jabber.org/network/serverinfo" }; }); if server_info_custom_fields then for _, field in ipairs(server_info_custom_fields) do table.insert(form_layout, field); end end local generated_form; function update_form() local new_form = form_layout:form(server_info_config, "result"); if generated_form then module:remove_item("extension", generated_form); end generated_form = new_form; module:add_item("extension", generated_form); end function add_fields(event) local fields = event.item; for _, field in ipairs(fields) do table.insert(form_layout, field); end update_form(); end function remove_fields(event) local removed_fields = event.item; for _, removed_field in ipairs(removed_fields) do local removed_var = removed_field.var or removed_field.name; for i, field in ipairs(form_layout) do local var = field.var or field.name if var == removed_var then table.remove(form_layout, i); break; end end end update_form(); end module:handle_items("server-info-fields", add_fields, remove_fields); function module.load() update_form(); end
