Mercurial > prosody-hg
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? |
