plugins/mod_server_info.lua
author Matthew Wild <mwild1@gmail.com>
Sun, 17 Mar 2024 10:10:24 +0000
changeset 13464 a688947fab1e
parent 13440 1ce18cb3e6cc
permissions -rw-r--r--
mod_bosh: Set base_type on session This fixes a traceback with mod_saslauth. Ideally we move this to util.session at some point, though.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13440
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