plugins/mod_server_info.lua
author Kim Alvefur <zash@zash.se>
Wed, 27 Mar 2024 19:33:11 +0100
changeset 13471 c2a476f4712a
parent 13440 1ce18cb3e6cc
permissions -rw-r--r--
util.startup: Fix exiting on pidfile trouble prosody.shutdown() relies on prosody.main_thread, which has not been set yet at this point. Doing a clean shutdown might actually be harmful in case it tears down things set up by the conflicting Prosody, such as the very pidfile we were looking at. Thanks again SigmaTel71 for noticing
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