comparison plugins/mod_pubsub/pubsub.lib.lua @ 13532:9970d333a63f

mod_pubsub: Use error registry This is what util.error was made for! This replaces the custom error stanza builder with common code in util.stanza that knows enough about util.error and namespaced errors. Some awkwardness remains in the way util.pubsub returns conflicting form fields.
author Kim Alvefur <zash@zash.se>
date Sun, 27 Oct 2024 15:18:24 +0100
parents fdd1438d9ef7
children c885594f7f9a
comparison
equal deleted inserted replaced
13531:3a75472a3b9d 13532:9970d333a63f
1 local t_unpack = table.unpack;
2 local time_now = os.time; 1 local time_now = os.time;
3 2
4 local jid_prep = require "prosody.util.jid".prep; 3 local jid_prep = require "prosody.util.jid".prep;
5 local set = require "prosody.util.set"; 4 local set = require "prosody.util.set";
6 local st = require "prosody.util.stanza"; 5 local st = require "prosody.util.stanza";
16 local _M = {}; 15 local _M = {};
17 16
18 local handlers = {}; 17 local handlers = {};
19 _M.handlers = handlers; 18 _M.handlers = handlers;
20 19
21 local pubsub_errors = { 20 local pubsub_errors = errors.init("pubsub", xmlns_pubsub_errors, {
22 ["conflict"] = { "cancel", "conflict" }; 21 ["conflict"] = { "cancel", "conflict" };
23 ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" }; 22 ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" };
24 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; 23 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" };
25 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" }; 24 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" };
26 ["item-not-found"] = { "cancel", "item-not-found" }; 25 ["item-not-found"] = { "cancel", "item-not-found" };
31 ["not-acceptable"] = { "modify", "not-acceptable" }; 30 ["not-acceptable"] = { "modify", "not-acceptable" };
32 ["internal-server-error"] = { "wait", "internal-server-error" }; 31 ["internal-server-error"] = { "wait", "internal-server-error" };
33 ["precondition-not-met"] = { "cancel", "conflict", nil, "precondition-not-met" }; 32 ["precondition-not-met"] = { "cancel", "conflict", nil, "precondition-not-met" };
34 ["invalid-item"] = { "modify", "bad-request", "invalid item" }; 33 ["invalid-item"] = { "modify", "bad-request", "invalid item" };
35 ["persistent-items-unsupported"] = { "cancel", "feature-not-implemented", nil, "persistent-items" }; 34 ["persistent-items-unsupported"] = { "cancel", "feature-not-implemented", nil, "persistent-items" };
36 }; 35 });
37 local function pubsub_error_reply(stanza, error) 36 local function pubsub_error_reply(stanza, error)
38 local e = pubsub_errors[error]; 37 if type(error) == "table" and type(error.pubsub_condition) == "string" then
39 if not e and errors.is_err(error) then 38 error.extra = { namespace = xmlns_pubsub_errors; condition = error.pubsub_condition }
40 e = { error.type, error.condition, error.text, error.pubsub_condition }; 39 end
41 end 40 local reply = st.error_reply(stanza, pubsub_errors.wrap(error));
42 local reply = st.error_reply(stanza, t_unpack(e, 1, 3));
43 if e[4] then
44 reply:tag(e[4], { xmlns = xmlns_pubsub_errors }):up();
45 end
46 return reply; 41 return reply;
47 end 42 end
48 _M.pubsub_error_reply = pubsub_error_reply; 43 _M.pubsub_error_reply = pubsub_error_reply;
49 44
50 local function dataform_error_message(err) -- ({ string : string }) -> string? 45 local function dataform_error_message(err) -- ({ string : string }) -> string?