Mercurial > prosody-modules
comparison mod_http_upload/mod_http_upload.lua @ 3376:972832108c78
mod_http_upload: Add CORS headers for web clients (untested)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 18 Nov 2018 12:06:13 +0000 |
| parents | fca95f1b8870 |
| children | 683365d370d8 |
comparison
equal
deleted
inserted
replaced
| 3375:6317a5d8ce2d | 3376:972832108c78 |
|---|---|
| 282 t[k] = v; | 282 t[k] = v; |
| 283 return v; | 283 return v; |
| 284 end | 284 end |
| 285 }); | 285 }); |
| 286 | 286 |
| 287 local function set_cross_domain_headers(response) | |
| 288 local headers = response.headers; | |
| 289 headers.access_control_allow_methods = "GET, PUT, POST, OPTIONS"; | |
| 290 headers.access_control_allow_headers = "Content-Type"; | |
| 291 headers.access_control_max_age = "7200"; | |
| 292 headers.access_control_allow_origin = response.request.headers.origin or "*"; | |
| 293 return response; | |
| 294 end | |
| 295 | |
| 287 local function send_response_sans_body(response, body) | 296 local function send_response_sans_body(response, body) |
| 288 if response.finished then return; end | 297 if response.finished then return; end |
| 289 response.finished = true; | 298 response.finished = true; |
| 290 response.conn._http_open_response = nil; | 299 response.conn._http_open_response = nil; |
| 291 | 300 |
| 318 end | 327 end |
| 319 | 328 |
| 320 local serve_uploaded_files = http_files.serve(storage_path); | 329 local serve_uploaded_files = http_files.serve(storage_path); |
| 321 | 330 |
| 322 local function serve_head(event, path) | 331 local function serve_head(event, path) |
| 332 set_cross_domain_headers(event.response); | |
| 323 event.response.send = send_response_sans_body; | 333 event.response.send = send_response_sans_body; |
| 324 event.response.send_file = send_response_sans_body; | 334 event.response.send_file = send_response_sans_body; |
| 325 return serve_uploaded_files(event, path); | 335 return serve_uploaded_files(event, path); |
| 326 end | 336 end |
| 327 | 337 |
| 335 ["GET"] = serve_hello; | 345 ["GET"] = serve_hello; |
| 336 ["GET /"] = serve_hello; | 346 ["GET /"] = serve_hello; |
| 337 ["GET /*"] = serve_uploaded_files; | 347 ["GET /*"] = serve_uploaded_files; |
| 338 ["HEAD /*"] = serve_head; | 348 ["HEAD /*"] = serve_head; |
| 339 ["PUT /*"] = upload_data; | 349 ["PUT /*"] = upload_data; |
| 350 | |
| 351 ["OPTIONS /*"] = function (event) | |
| 352 if event.request.headers.origin then | |
| 353 set_cross_domain_headers(event.response); | |
| 354 end | |
| 355 return ""; | |
| 356 end; | |
| 340 }; | 357 }; |
| 341 }); | 358 }); |
| 342 | 359 |
| 343 module:log("info", "URL: <%s>; Storage path: %s", module:http_url(), storage_path); | 360 module:log("info", "URL: <%s>; Storage path: %s", module:http_url(), storage_path); |
| 344 | 361 |
