annotate plugins/mod_external_services.lua @ 13946:f5e8ab42c708

mod_http_file_share: Check that files are still there with correct size Failed uploads can leave behind unused slots. Files shouldn't change size after they have been successfully uploaded, but might as well double check it.
author Kim Alvefur <zash@zash.se>
date Sat, 04 Dec 2021 18:56:51 +0100
parents 79ae4821c05e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
2 local dt = require "prosody.util.datetime";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
3 local base64 = require "prosody.util.encodings".base64;
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
4 local hashes = require "prosody.util.hashes";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
5 local st = require "prosody.util.stanza";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
6 local jid = require "prosody.util.jid";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
7 local array = require "prosody.util.array";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12685
diff changeset
8 local set = require "prosody.util.set";
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local default_host = module:get_option_string("external_service_host", module.host);
13213
50324f66ca2a plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents: 13209
diff changeset
11 local default_port = module:get_option_integer("external_service_port", nil, 1, 65535);
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local default_secret = module:get_option_string("external_service_secret");
13209
c8d949cf6b09 plugins: Switch to :get_option_period() for time range options
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
13 local default_ttl = module:get_option_period("external_service_ttl", "1 day");
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local configured_services = module:get_option_array("external_services", {});
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local access = module:get_option_set("external_service_access", {});
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18
12685
4d75663d1552 mod_external_services: Update tools.ietf.org URL
Kim Alvefur <zash@zash.se>
parents: 12431
diff changeset
19 -- https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00
11038
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
20 local function behave_turn_rest_credentials(srv, item, secret)
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
21 local ttl = default_ttl;
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
22 if type(item.ttl) == "number" then
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
23 ttl = item.ttl;
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
24 end
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
25 local expires = srv.expires or os.time() + ttl;
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
26 local username;
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
27 if type(item.username) == "string" then
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
28 username = string.format("%d:%s", expires, item.username);
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
29 else
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
30 username = string.format("%d", expires);
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
31 end
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
32 srv.username = username;
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
33 srv.password = base64.encode(hashes.hmac_sha1(secret, srv.username));
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
34 end
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
35
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
36 local algorithms = {
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
37 turn = behave_turn_rest_credentials;
13756
18f560dcc9e3 mod_external_services: Also use TURN REST credential algo for 'turns' (thanks moreroid)
Matthew Wild <mwild1@gmail.com>
parents: 13213
diff changeset
38 turns = behave_turn_rest_credentials;
11038
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
39 }
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
40
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 -- filter config into well-defined service records
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 local function prepare(item)
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 if type(item) ~= "table" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 module:log("error", "Service definition is not a table: %q", item);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 return nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 local srv = {
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 type = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 transport = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 host = default_host;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 port = default_port;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 username = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 password = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 restricted = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 expires = nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 };
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 if type(item.type) == "string" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 srv.type = item.type;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 else
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 module:log("error", "Service missing mandatory 'type' field: %q", item);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 return nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 if type(item.transport) == "string" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 srv.transport = item.transport;
11933
f752427a5214 mod_external_services: Warn about missing recommended fields
Kim Alvefur <zash@zash.se>
parents: 11756
diff changeset
67 else
f752427a5214 mod_external_services: Warn about missing recommended fields
Kim Alvefur <zash@zash.se>
parents: 11756
diff changeset
68 module:log("warn", "Service missing recommended 'transport' field: %q", item);
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 if type(item.host) == "string" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 srv.host = item.host;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 if type(item.port) == "number" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 srv.port = item.port;
11933
f752427a5214 mod_external_services: Warn about missing recommended fields
Kim Alvefur <zash@zash.se>
parents: 11756
diff changeset
75 elseif not srv.port then
f752427a5214 mod_external_services: Warn about missing recommended fields
Kim Alvefur <zash@zash.se>
parents: 11756
diff changeset
76 module:log("warn", "Service missing recommended 'port' field: %q", item);
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 if type(item.username) == "string" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 srv.username = item.username;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 if type(item.password) == "string" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 srv.password = item.password;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 srv.restricted = true;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 if item.restricted == true then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 srv.restricted = true;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 if type(item.expires) == "number" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 srv.expires = item.expires;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 elseif type(item.ttl) == "number" then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 srv.expires = os.time() + item.ttl;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 if (item.secret == true and default_secret) or type(item.secret) == "string" then
11039
ec6919401790 mod_external_services: Allow specifying a credential generation callback
Kim Alvefur <zash@zash.se>
parents: 11038
diff changeset
94 local secret_cb = item.credentials_cb or algorithms[item.algorithm] or algorithms[srv.type];
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 local secret = item.secret;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96 if secret == true then
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 secret = default_secret;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 end
11038
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
99 if secret_cb then
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
100 secret_cb(srv, item, secret);
efefdf71373b mod_external_services: Prepare to allow more credential algorithms
Kim Alvefur <zash@zash.se>
parents: 11037
diff changeset
101 srv.restricted = true;
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 end
13911
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
104 if item.extra and st.is_stanza(item.extra) then
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
105 srv.extra = item.extra;
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
106 end
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 return srv;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 function module.load()
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 -- Trigger errors on startup
11626
ef62d29c8fdc mod_external_services: Also validate services added by other modules
Kim Alvefur <zash@zash.se>
parents: 11040
diff changeset
112 local extras = module:get_host_items("external_service");
ef62d29c8fdc mod_external_services: Also validate services added by other modules
Kim Alvefur <zash@zash.se>
parents: 11040
diff changeset
113 local services = ( configured_services + extras ) / prepare;
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 if #services == 0 then
11628
0807e835d3b5 mod_external_services: Report overall status as a module status
Kim Alvefur <zash@zash.se>
parents: 11627
diff changeset
115 module:set_status("warn", "No services configured or all had errors");
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118
11627
3a5212fd7e8e mod_external_services: Validate items as they are added
Kim Alvefur <zash@zash.se>
parents: 11626
diff changeset
119 module:handle_items("external_service", function(added)
11628
0807e835d3b5 mod_external_services: Report overall status as a module status
Kim Alvefur <zash@zash.se>
parents: 11627
diff changeset
120 if prepare(added.item) then
0807e835d3b5 mod_external_services: Report overall status as a module status
Kim Alvefur <zash@zash.se>
parents: 11627
diff changeset
121 module:set_status("core", "OK");
0807e835d3b5 mod_external_services: Report overall status as a module status
Kim Alvefur <zash@zash.se>
parents: 11627
diff changeset
122 end
11627
3a5212fd7e8e mod_external_services: Validate items as they are added
Kim Alvefur <zash@zash.se>
parents: 11626
diff changeset
123 end, module.load);
3a5212fd7e8e mod_external_services: Validate items as they are added
Kim Alvefur <zash@zash.se>
parents: 11626
diff changeset
124
11040
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
125 -- Ensure only valid items are added in events
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
126 local services_mt = {
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
127 __index = getmetatable(array()).__index;
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
128 __newindex = function (self, i, v)
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
129 rawset(self, i, assert(prepare(v), "Invalid service entry added"));
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
130 end;
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
131 }
c560531d9a6e mod_external_services: Validate services added via events
Kim Alvefur <zash@zash.se>
parents: 11039
diff changeset
132
11755
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
133 function get_services()
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
134 local extras = module:get_host_items("external_service");
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
135 local services = ( configured_services + extras ) / prepare;
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
136
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
137 setmetatable(services, services_mt);
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
138
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
139 return services;
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
140 end
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
141
11756
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
142 function services_xml(services, name, namespace)
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
143 local reply = st.stanza(name or "services", { xmlns = namespace or "urn:xmpp:extdisco:2" });
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 for _, srv in ipairs(services) do
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 reply:tag("service", {
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 type = srv.type;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 transport = srv.transport;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 host = srv.host;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 port = srv.port and string.format("%d", srv.port) or nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 username = srv.username;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 password = srv.password;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 expires = srv.expires and dt.datetime(srv.expires) or nil;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 restricted = srv.restricted and "1" or nil;
13911
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
155 });
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
156 if srv.extra then
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
157 reply:add_child(srv.extra);
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
158 end
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
159 reply:up();
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161
11756
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
162 return reply;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
163 end
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
164
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
165 local function handle_services(event)
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
166 local origin, stanza = event.origin, event.stanza;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
167 local action = stanza.tags[1];
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
168
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
169 local user_bare = jid.bare(stanza.attr.from);
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
170 local user_host = jid.host(user_bare);
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
171 if not ((access:empty() and origin.type == "c2s") or access:contains(user_bare) or access:contains(user_host)) then
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
172 origin.send(st.error_reply(stanza, "auth", "forbidden"));
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
173 return true;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
174 end
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
175
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
176 local services = get_services();
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
177
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
178 local requested_type = action.attr.type;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
179 if requested_type then
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
180 services:filter(function(item)
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
181 return item.type == requested_type;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
182 end);
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
183 end
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
184
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
185 module:fire_event("external_service/services", {
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
186 origin = origin;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
187 stanza = stanza;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
188 requested_type = requested_type;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
189 services = services;
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
190 });
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
191
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
192 local reply = st.reply(stanza):add_child(services_xml(services, action.name, action.attr.xmlns));
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
193
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
194 origin.send(reply);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
195 return true;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
196 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
197
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
198 local function handle_credentials(event)
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
199 local origin, stanza = event.origin, event.stanza;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
200 local action = stanza.tags[1];
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
201
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
202 if origin.type ~= "c2s" then
12431
95f33a006c03 mod_external_services: Move error message to correct place (fix #1725)
Kim Alvefur <zash@zash.se>
parents: 11933
diff changeset
203 origin.send(st.error_reply(stanza, "auth", "forbidden"));
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
204 return true;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
205 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
206
11755
ae565e49289a mod_external_services: Factor out public function returning current services
Kim Alvefur <zash@zash.se>
parents: 11754
diff changeset
207 local services = get_services();
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
208 services:filter(function (item)
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
209 return item.restricted;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
210 end)
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
211
11754
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
212 local requested_credentials = set.new();
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
213 for service in action:childtags("service") do
11753
c4599a7c534c mod_external_services: Validate required attributes on credentials requests
Kim Alvefur <zash@zash.se>
parents: 11628
diff changeset
214 if not service.attr.type or not service.attr.host then
12431
95f33a006c03 mod_external_services: Move error message to correct place (fix #1725)
Kim Alvefur <zash@zash.se>
parents: 11933
diff changeset
215 origin.send(st.error_reply(stanza, "modify", "bad-request", "The 'port' and 'type' attributes are required."));
11753
c4599a7c534c mod_external_services: Validate required attributes on credentials requests
Kim Alvefur <zash@zash.se>
parents: 11628
diff changeset
216 return true;
c4599a7c534c mod_external_services: Validate required attributes on credentials requests
Kim Alvefur <zash@zash.se>
parents: 11628
diff changeset
217 end
c4599a7c534c mod_external_services: Validate required attributes on credentials requests
Kim Alvefur <zash@zash.se>
parents: 11628
diff changeset
218
11754
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
219 requested_credentials:add(string.format("%s:%s:%d", service.attr.type, service.attr.host,
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
220 tonumber(service.attr.port) or 0));
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
221 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
222
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
223 module:fire_event("external_service/credentials", {
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
224 origin = origin;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
225 stanza = stanza;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
226 requested_credentials = requested_credentials;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
227 services = services;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
228 });
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
229
11754
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
230 services:filter(function (srv)
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
231 local port_key = string.format("%s:%s:%d", srv.type, srv.host, srv.port or 0);
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
232 local portless_key = string.format("%s:%s:%d", srv.type, srv.host, 0);
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
233 return requested_credentials:contains(port_key) or requested_credentials:contains(portless_key);
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
234 end);
21a9b3f2a728 mod_external_services: Filter services by requested credentials using a Set
Kim Alvefur <zash@zash.se>
parents: 11753
diff changeset
235
11756
a0e17b7c8b05 mod_external_services: Factor out public function for converting to XML
Kim Alvefur <zash@zash.se>
parents: 11755
diff changeset
236 local reply = st.reply(stanza):add_child(services_xml(services, action.name, action.attr.xmlns));
11036
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
237
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
238 origin.send(reply);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
239 return true;
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
240 end
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
241
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
242 -- XEP-0215 v0.7
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
243 module:add_feature("urn:xmpp:extdisco:2");
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
244 module:hook("iq-get/host/urn:xmpp:extdisco:2:services", handle_services);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
245 module:hook("iq-get/host/urn:xmpp:extdisco:2:credentials", handle_credentials);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
246
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
247 -- COMPAT XEP-0215 v0.6
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
248 -- Those still on the old version gets to deal with undefined attributes until they upgrade.
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
249 module:add_feature("urn:xmpp:extdisco:1");
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
250 module:hook("iq-get/host/urn:xmpp:extdisco:1:services", handle_services);
79e410cd7f6e mod_external_services: XEP-0215: External Service Discovery
Kim Alvefur <zash@zash.se>
parents:
diff changeset
251 module:hook("iq-get/host/urn:xmpp:extdisco:1:credentials", handle_credentials);
13902
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
252
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
253
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
254 module:add_item("shell-command", {
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
255 section = "services";
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
256 section_desc = "Inspect external services";
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
257 name = "list";
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
258 desc = "List all external services for a host";
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
259 args = {
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
260 { name = "host", type = "string" };
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
261 { name = "service", type = "string" };
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
262 };
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
263 host_selector = "host";
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
264 handler = function (shell, host, service_type) --luacheck: ignore 212/host
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
265 local c = 0;
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
266 local print = shell.session.print;
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
267 local services = get_services();
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
268 for _, srv in ipairs(services) do
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
269 if not service_type or service_type:lower() == srv.type:lower() then
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
270 c = c + 1;
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
271 print(srv.type.." ("..srv.transport..")", srv.host..(srv.port and (":"..srv.port) or ""));
13911
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
272 print(" auth:", srv.restricted and "required" or "none");
13902
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
273 for _, prop in ipairs({ "username", "password", "expires" }) do
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
274 local val = srv[prop];
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
275 if val then
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
276 if prop == "expires" then
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
277 val = dt.datetime(val);
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
278 end
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
279 print(" "..prop..":", val);
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
280 end
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
281 end
13911
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
282 if srv.extra then
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
283 print(" extra:");
79ae4821c05e mod_external_services: Allow custom XML content in service items
Matthew Wild <mwild1@gmail.com>
parents: 13902
diff changeset
284 print(" "..tostring(srv.extra:indent(3, " ")));
13902
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
285 end
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
286 print("");
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
287 end
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
288 end
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
289 return true, ("%d services"):format(c);
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
290 end;
7e6deed12e03 mod_external_services: Add shell command to list external services on a host
Matthew Wild <mwild1@gmail.com>
parents: 13756
diff changeset
291 });