Software /
code /
prosody
Comparison
plugins/mod_http.lua @ 9796:adfb29f44412
mod_http: Set up to handle OPTIONS
Lower priority to allow http modules to handle it themselves, should
they wish to
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 18 Jan 2019 02:03:40 +0100 |
parent | 9793:9993fd021d19 |
child | 9797:071538a567d5 |
comparison
equal
deleted
inserted
replaced
9795:02735bc82126 | 9796:adfb29f44412 |
---|---|
117 local function cors_handler(event_data) | 117 local function cors_handler(event_data) |
118 local request, response = event_data.request, event_data.response; | 118 local request, response = event_data.request, event_data.response; |
119 apply_cors_headers(response, opt_methods, opt_headers, opt_max_age, request.headers.origin); | 119 apply_cors_headers(response, opt_methods, opt_headers, opt_max_age, request.headers.origin); |
120 end | 120 end |
121 | 121 |
122 local function options_handler(event_data) | |
123 cors_handler(event_data); | |
124 return ""; | |
125 end | |
126 | |
122 for key, handler in pairs(event.item.route or {}) do | 127 for key, handler in pairs(event.item.route or {}) do |
123 local event_name = get_http_event(host, app_path, key); | 128 local event_name = get_http_event(host, app_path, key); |
124 if event_name then | 129 if event_name then |
130 local options_event_name = event_name:gsub("^%S+", "OPTIONS"); | |
125 if type(handler) ~= "function" then | 131 if type(handler) ~= "function" then |
126 local data = handler; | 132 local data = handler; |
127 handler = function () return data; end | 133 handler = function () return data; end |
128 elseif event_name:sub(-2, -1) == "/*" then | 134 elseif event_name:sub(-2, -1) == "/*" then |
129 local base_path_len = #event_name:match("/.+$"); | 135 local base_path_len = #event_name:match("/.+$"); |
138 end | 144 end |
139 if not app_handlers[event_name] then | 145 if not app_handlers[event_name] then |
140 app_handlers[event_name] = handler; | 146 app_handlers[event_name] = handler; |
141 module:hook_object_event(server, event_name, handler); | 147 module:hook_object_event(server, event_name, handler); |
142 module:hook_object_event(server, event_name, cors_handler, 1); | 148 module:hook_object_event(server, event_name, cors_handler, 1); |
149 module:hook_object_event(server, options_event_name, options_handler, -1); | |
143 else | 150 else |
144 module:log("warn", "App %s added handler twice for '%s', ignoring", app_name, event_name); | 151 module:log("warn", "App %s added handler twice for '%s', ignoring", app_name, event_name); |
145 end | 152 end |
146 else | 153 else |
147 module:log("error", "Invalid route in %s, %q. See https://prosody.im/doc/developers/http#routes", app_name, key); | 154 module:log("error", "Invalid route in %s, %q. See https://prosody.im/doc/developers/http#routes", app_name, key); |