Mercurial > prosody-hg
comparison plugins/mod_bosh.lua @ 9794:4b5c24f13d4a
mod_bosh: Drop CORS code in favor of than in mod_http
This deprecates the cross_domain_bosh setting. As a compat measure, if
it is set, mod_http_crossdomain is loaded.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 04 Oct 2018 12:23:06 +0200 |
| parents | 2e07d2f71599 |
| children | 7259a61bacc8 |
comparison
equal
deleted
inserted
replaced
| 9793:9993fd021d19 | 9794:4b5c24f13d4a |
|---|---|
| 42 -- The maximum amount of time that the server will hold onto a request before replying | 42 -- The maximum amount of time that the server will hold onto a request before replying |
| 43 -- (the client can set this to a lower value when it connects, if it chooses) | 43 -- (the client can set this to a lower value when it connects, if it chooses) |
| 44 local bosh_max_wait = module:get_option_number("bosh_max_wait", 120); | 44 local bosh_max_wait = module:get_option_number("bosh_max_wait", 120); |
| 45 | 45 |
| 46 local consider_bosh_secure = module:get_option_boolean("consider_bosh_secure"); | 46 local consider_bosh_secure = module:get_option_boolean("consider_bosh_secure"); |
| 47 local cross_domain = module:get_option("cross_domain_bosh", false); | 47 local cross_domain = module:get_option("cross_domain_bosh"); |
| 48 | 48 |
| 49 if cross_domain == true then cross_domain = "*"; end | 49 if cross_domain ~= nil then |
| 50 if type(cross_domain) == "table" then cross_domain = table.concat(cross_domain, ", "); end | 50 module:log("info", "The 'cross_domain_bosh' option has been deprecated"); |
| 51 module:depends("http_crossdomain"); | |
| 52 end | |
| 51 | 53 |
| 52 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; | 54 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; |
| 53 | 55 |
| 54 -- All sessions, and sessions that have no requests open | 56 -- All sessions, and sessions that have no requests open |
| 55 local sessions = module:shared("sessions"); | 57 local sessions = module:shared("sessions"); |
| 89 sessions[context.sid] = nil; | 91 sessions[context.sid] = nil; |
| 90 sm_destroy_session(session, reason); | 92 sm_destroy_session(session, reason); |
| 91 end | 93 end |
| 92 end | 94 end |
| 93 | 95 |
| 94 local function set_cross_domain_headers(response) | |
| 95 local headers = response.headers; | |
| 96 headers.access_control_allow_methods = "GET, POST, OPTIONS"; | |
| 97 headers.access_control_allow_headers = "Content-Type"; | |
| 98 headers.access_control_max_age = "7200"; | |
| 99 headers.access_control_allow_origin = cross_domain; | |
| 100 return response; | |
| 101 end | |
| 102 | |
| 103 function handle_OPTIONS(event) | |
| 104 if cross_domain and event.request.headers.origin then | |
| 105 set_cross_domain_headers(event.response); | |
| 106 end | |
| 107 return ""; | |
| 108 end | |
| 109 | |
| 110 function handle_POST(event) | 96 function handle_POST(event) |
| 111 log("debug", "Handling new request %s: %s\n----------", tostring(event.request), tostring(event.request.body)); | 97 log("debug", "Handling new request %s: %s\n----------", tostring(event.request), tostring(event.request.body)); |
| 112 | 98 |
| 113 local request, response = event.request, event.response; | 99 local request, response = event.request, event.response; |
| 114 response.on_destroy = on_destroy_request; | 100 response.on_destroy = on_destroy_request; |
| 118 local stream = new_xmpp_stream(context, stream_callbacks); | 104 local stream = new_xmpp_stream(context, stream_callbacks); |
| 119 response.context = context; | 105 response.context = context; |
| 120 | 106 |
| 121 local headers = response.headers; | 107 local headers = response.headers; |
| 122 headers.content_type = "text/xml; charset=utf-8"; | 108 headers.content_type = "text/xml; charset=utf-8"; |
| 123 | |
| 124 if cross_domain and request.headers.origin then | |
| 125 set_cross_domain_headers(response); | |
| 126 end | |
| 127 | 109 |
| 128 -- stream:feed() calls the stream_callbacks, so all stanzas in | 110 -- stream:feed() calls the stream_callbacks, so all stanzas in |
| 129 -- the body are processed in this next line before it returns. | 111 -- the body are processed in this next line before it returns. |
| 130 -- In particular, the streamopened() stream callback is where | 112 -- In particular, the streamopened() stream callback is where |
| 131 -- much of the session logic happens, because it's where we first | 113 -- much of the session logic happens, because it's where we first |
| 509 module:provides("http", { | 491 module:provides("http", { |
| 510 default_path = "/http-bind"; | 492 default_path = "/http-bind"; |
| 511 route = { | 493 route = { |
| 512 ["GET"] = GET_response; | 494 ["GET"] = GET_response; |
| 513 ["GET /"] = GET_response; | 495 ["GET /"] = GET_response; |
| 514 ["OPTIONS"] = handle_OPTIONS; | |
| 515 ["OPTIONS /"] = handle_OPTIONS; | |
| 516 ["POST"] = handle_POST; | 496 ["POST"] = handle_POST; |
| 517 ["POST /"] = handle_POST; | 497 ["POST /"] = handle_POST; |
| 518 }; | 498 }; |
| 519 }); | 499 }); |
