Software /
code /
prosody
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 |
parent | 9777:2e07d2f71599 |
child | 9799: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 }); |