diff options
author | Kim Alvefur <zash@zash.se> | 2020-08-17 00:24:11 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2020-08-17 00:24:11 +0200 |
commit | 651d90a762573d8f2583d34d261e2ecab3bc7183 (patch) | |
tree | 92e5de69f956e12aff378954598998ada84eabd4 | |
parent | ba1834dd49c1a42e64f1b72a60a3570c8279afad (diff) | |
download | prosody-651d90a762573d8f2583d34d261e2ecab3bc7183.tar.gz prosody-651d90a762573d8f2583d34d261e2ecab3bc7183.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.lua | 14 |
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; |