Mercurial > prosody-modules
comparison mod_rest/mod_rest.lua @ 4036:04c11b652aeb
mod_rest: Respond to unknown payload types with HTTP status 415
More semantically correct.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 29 May 2020 12:30:15 +0200 |
| parents | ae5ac41c391d |
| children | 991090cb5d18 |
comparison
equal
deleted
inserted
replaced
| 4035:270cd50852be | 4036:04c11b652aeb |
|---|---|
| 124 to = { code = 422, condition = "improper-addressing", text = "Invalid destination JID", }, | 124 to = { code = 422, condition = "improper-addressing", text = "Invalid destination JID", }, |
| 125 from = { code = 422, condition = "invalid-from", text = "Invalid source JID", }, | 125 from = { code = 422, condition = "invalid-from", text = "Invalid source JID", }, |
| 126 post_auth = { code = 403, condition = "not-authorized", text = "Not authorized to send stanza with requested 'from'", }, | 126 post_auth = { code = 403, condition = "not-authorized", text = "Not authorized to send stanza with requested 'from'", }, |
| 127 iq_type = { code = 422, condition = "invalid-xml", text = "'iq' stanza must be of type 'get' or 'set'", }, | 127 iq_type = { code = 422, condition = "invalid-xml", text = "'iq' stanza must be of type 'get' or 'set'", }, |
| 128 iq_tags = { code = 422, condition = "bad-format", text = "'iq' stanza must have exactly one child tag", }, | 128 iq_tags = { code = 422, condition = "bad-format", text = "'iq' stanza must have exactly one child tag", }, |
| 129 mediatype = { code = 415, condition = "bad-format", text = "Unsupported media type" }, | |
| 129 }; | 130 }; |
| 130 | 131 |
| 131 local function handle_post(event) | 132 local function handle_post(event) |
| 132 local request, response = event.request, event.response; | 133 local request, response = event.request, event.response; |
| 133 local from; | 134 local from; |
| 144 from = jid.join(origin.username, origin.host, origin.resource); | 145 from = jid.join(origin.username, origin.host, origin.resource); |
| 145 end | 146 end |
| 146 local payload, err = parse(request.headers.content_type, request.body); | 147 local payload, err = parse(request.headers.content_type, request.body); |
| 147 if not payload then | 148 if not payload then |
| 148 -- parse fail | 149 -- parse fail |
| 149 return errors.new("parse", { error = err, type = request.headers.content_type, data = request.body, }, post_errors); | 150 local ctx = { error = err, type = request.headers.content_type, data = request.body, }; |
| 151 if err == "unknown-payload-type" then | |
| 152 return errors.new("mediatype", ctx, post_errors); | |
| 153 end | |
| 154 return errors.new("parse", ctx, post_errors); | |
| 150 end | 155 end |
| 151 if payload.attr.xmlns then | 156 if payload.attr.xmlns then |
| 152 return errors.new("xmlns", nil, post_errors); | 157 return errors.new("xmlns", nil, post_errors); |
| 153 elseif payload.name ~= "message" and payload.name ~= "presence" and payload.name ~= "iq" then | 158 elseif payload.name ~= "message" and payload.name ~= "presence" and payload.name ~= "iq" then |
| 154 return errors.new("name", nil, post_errors); | 159 return errors.new("name", nil, post_errors); |
