# HG changeset patch # User Kim Alvefur # Date 1730038704 -3600 # Node ID 9970d333a63f170d9915f34ccde7ef2b8f4b39f4 # Parent 3a75472a3b9dae66c6f49ab67c13c85b84ecdd03 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. diff -r 3a75472a3b9d -r 9970d333a63f plugins/mod_pubsub/pubsub.lib.lua --- a/plugins/mod_pubsub/pubsub.lib.lua Sat Oct 26 18:06:49 2024 +0200 +++ b/plugins/mod_pubsub/pubsub.lib.lua Sun Oct 27 15:18:24 2024 +0100 @@ -1,4 +1,3 @@ -local t_unpack = table.unpack; local time_now = os.time; local jid_prep = require "prosody.util.jid".prep; @@ -18,7 +17,7 @@ local handlers = {}; _M.handlers = handlers; -local pubsub_errors = { +local pubsub_errors = errors.init("pubsub", xmlns_pubsub_errors, { ["conflict"] = { "cancel", "conflict" }; ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" }; ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; @@ -33,16 +32,12 @@ ["precondition-not-met"] = { "cancel", "conflict", nil, "precondition-not-met" }; ["invalid-item"] = { "modify", "bad-request", "invalid item" }; ["persistent-items-unsupported"] = { "cancel", "feature-not-implemented", nil, "persistent-items" }; -}; +}); local function pubsub_error_reply(stanza, error) - local e = pubsub_errors[error]; - if not e and errors.is_err(error) then - e = { error.type, error.condition, error.text, error.pubsub_condition }; + if type(error) == "table" and type(error.pubsub_condition) == "string" then + error.extra = { namespace = xmlns_pubsub_errors; condition = error.pubsub_condition } end - local reply = st.error_reply(stanza, t_unpack(e, 1, 3)); - if e[4] then - reply:tag(e[4], { xmlns = xmlns_pubsub_errors }):up(); - end + local reply = st.error_reply(stanza, pubsub_errors.wrap(error)); return reply; end _M.pubsub_error_reply = pubsub_error_reply;