aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-08-17 00:24:11 +0200
committerKim Alvefur <zash@zash.se>2020-08-17 00:24:11 +0200
commitfb6c098ed661d4bd14f1a0515e4ae6b110c76b19 (patch)
tree92e5de69f956e12aff378954598998ada84eabd4
parent5bc6130e57fe2af3108ec538b83768100bdc177c (diff)
downloadprosody-fb6c098ed661d4bd14f1a0515e4ae6b110c76b19.tar.gz
prosody-fb6c098ed661d4bd14f1a0515e4ae6b110c76b19.zip
mod_external_services: Validate services added via events
While writing developer documentation it became obvious that i was silly to have one item format for config and items API, and another format for the event API. Then there's the stanza format, but that's a common pattern. This change reduces the possible input formats to two and allows other modules the benefit of the processing and validation performed on items from the config.
-rw-r--r--plugins/mod_external_services.lua14
1 files changed, 14 insertions, 0 deletions
diff --git a/plugins/mod_external_services.lua b/plugins/mod_external_services.lua
index 7c18e326..e18e7c3e 100644
--- a/plugins/mod_external_services.lua
+++ b/plugins/mod_external_services.lua
@@ -4,6 +4,7 @@ local base64 = require "util.encodings".base64;
local hashes = require "util.hashes";
local st = require "util.stanza";
local jid = require "util.jid";
+local array = require "util.array";
local default_host = module:get_option_string("external_service_host", module.host);
local default_port = module:get_option_number("external_service_port");
@@ -105,6 +106,14 @@ function module.load()
end
end
+-- Ensure only valid items are added in events
+local services_mt = {
+ __index = getmetatable(array()).__index;
+ __newindex = function (self, i, v)
+ rawset(self, i, assert(prepare(v), "Invalid service entry added"));
+ end;
+}
+
local function handle_services(event)
local origin, stanza = event.origin, event.stanza;
local action = stanza.tags[1];
@@ -127,6 +136,8 @@ local function handle_services(event)
end);
end
+ setmetatable(services, services_mt);
+
module:fire_event("external_service/services", {
origin = origin;
stanza = stanza;
@@ -177,6 +188,9 @@ local function handle_credentials(event)
});
end
+ setmetatable(services, services_mt);
+ setmetatable(requested_credentials, services_mt);
+
module:fire_event("external_service/credentials", {
origin = origin;
stanza = stanza;