Annotate

plugins/mod_server_info.lua @ 13562:f77c247258cc

mod_admin_shell: Report when a module is already loaded Hopefully less confusing than "Module loaded onto 0 hosts"
author Kim Alvefur <zash@zash.se>
date Fri, 15 Nov 2024 15:52:37 +0100
parent 13436:1ce18cb3e6cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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