comparison mod_rest/mod_rest.lua @ 3931:2e8b284ac8b3

mod_rest: Add an XML error formatter (fixes #1499)
author Kim Alvefur <zash@zash.se>
date Sat, 07 Mar 2020 17:35:09 +0100
parents d5dafd617cd6
children 93147b89ea67
comparison
equal deleted inserted replaced
3930:d5dafd617cd6 3931:2e8b284ac8b3
392 end 392 end
393 end 393 end
394 394
395 local supported_errors = { 395 local supported_errors = {
396 "text/html", 396 "text/html",
397 "application/xmpp+xml",
397 "application/json", 398 "application/json",
398 }; 399 };
399 400
400 local http_server = require "net.http.server"; 401 local http_server = require "net.http.server";
401 module:hook_object_event(http_server, "http-error", function (event) 402 module:hook_object_event(http_server, "http-error", function (event)
402 local request, response = event.request, event.response; 403 local request, response = event.request, event.response;
403 if decide_type(request and request.headers.accept or "", supported_errors) == "application/json" then 404 local response_as = decide_type(request and request.headers.accept or "", supported_errors);
405 if response_as == "application/xmpp+xml" then
406 if response then
407 response.headers.content_type = "application/xmpp+xml";
408 end
409 local stream_error = st.stanza("error", { xmlns = "http://etherx.jabber.org/streams" });
410 if event.error then
411 stream_error:tag(event.error.condition, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' }):up();
412 if event.error.text then
413 stream_error:text_tag("text", event.error.text, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' });
414 end
415 end
416 return tostring(stream_error);
417 elseif response_as == "application/json" then
404 if response then 418 if response then
405 response.headers.content_type = "application/json"; 419 response.headers.content_type = "application/json";
406 end 420 end
407 return json.encode({ 421 return json.encode({
408 type = "error", 422 type = "error",