Mercurial > prosody-modules
comparison mod_rest/mod_rest.lua @ 3805:683b06c0348f
mod_rest: Validate stanza kind earlier
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 01 Jan 2020 07:59:18 +0100 |
| parents | d74509cd35fb |
| children | c0caee8f54bb |
comparison
equal
deleted
inserted
replaced
| 3804:d74509cd35fb | 3805:683b06c0348f |
|---|---|
| 38 -- parse fail | 38 -- parse fail |
| 39 return errors.new({ code = 400, text = err }); | 39 return errors.new({ code = 400, text = err }); |
| 40 end | 40 end |
| 41 if payload.attr.xmlns then | 41 if payload.attr.xmlns then |
| 42 return errors.new({ code = 422, text = "'xmlns' attribute must be empty" }); | 42 return errors.new({ code = 422, text = "'xmlns' attribute must be empty" }); |
| 43 elseif payload.name ~= "message" and payload.name ~= "presence" and payload.name ~= "iq" then | |
| 44 return errors.new({ code = 422, text = "Invalid stanza, must be 'message', 'presence' or 'iq'." }); | |
| 43 end | 45 end |
| 44 local to = jid.prep(payload.attr.to); | 46 local to = jid.prep(payload.attr.to); |
| 45 if not to then | 47 if not to then |
| 46 return errors.new({ code = 422, text = "Invalid destination JID" }); | 48 return errors.new({ code = 422, text = "Invalid destination JID" }); |
| 47 end | 49 end |
| 80 return tostring(error.context.stanza); | 82 return tostring(error.context.stanza); |
| 81 else | 83 else |
| 82 return error; | 84 return error; |
| 83 end | 85 end |
| 84 end); | 86 end); |
| 85 elseif payload.name == "message" or payload.name == "presence" then | 87 else |
| 86 local origin = {}; | 88 local origin = {}; |
| 87 function origin.send(stanza) | 89 function origin.send(stanza) |
| 88 module:log("debug", "Sending[rest]: %s", stanza:top_tag()); | 90 module:log("debug", "Sending[rest]: %s", stanza:top_tag()); |
| 89 response:send(tostring(stanza)); | 91 response:send(tostring(stanza)); |
| 90 return true; | 92 return true; |
| 93 if module:send(payload, origin) then | 95 if module:send(payload, origin) then |
| 94 return 202; | 96 return 202; |
| 95 else | 97 else |
| 96 return 500; | 98 return 500; |
| 97 end | 99 end |
| 98 else | |
| 99 return errors.new({ code = 400, text = "Invalid stanza, must be 'message', 'presence' or 'iq'." }); | |
| 100 end | 100 end |
| 101 end | 101 end |
| 102 | 102 |
| 103 -- Handle stanzas submitted via HTTP | 103 -- Handle stanzas submitted via HTTP |
| 104 module:depends("http"); | 104 module:depends("http"); |
