mirror of https://github.com/bjc/prosody
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.4 KiB
55 lines
1.4 KiB
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
|
|
|