Mercurial > prosody-hg
annotate plugins/mod_http.lua @ 8706:e2919978673e
net.http: Fix parameter order to http request callbacks
Commit e3b9dc9dd940 changed the parameter order in 2013, but did not update the names of the parameters in the callback function. Due to this inconsistency, 12df41a5a4b1 accidentally reversed the order when fixing the variable names without fixing where they are used.
Additionally the documentation was incorrect (since 2013), and this has also now been fixed.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 04 Apr 2018 18:27:44 +0100 |
| parents | 194f540e13e2 |
| children | 11fcdef5022f 09e7b0048ebe |
| rev | line source |
|---|---|
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
2 -- Copyright (C) 2008-2012 Matthew Wild |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
3 -- Copyright (C) 2008-2012 Waqas Hussain |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5427
diff
changeset
|
4 -- |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 -- |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 module:set_global(); |
|
4774
b2ed4e1bcb6e
mod_http: Depend on mod_http_errors
Matthew Wild <mwild1@gmail.com>
parents:
4736
diff
changeset
|
10 module:depends("http_errors"); |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 |
| 5374 | 12 local portmanager = require "core.portmanager"; |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
13 local moduleapi = require "core.moduleapi"; |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
14 local url_parse = require "socket.url".parse; |
|
5093
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
15 local url_build = require "socket.url".build; |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
16 |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
17 local server = require "net.http.server"; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
18 |
|
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
19 server.set_default_host(module:get_option_string("http_default_host")); |
|
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
20 |
|
7580
588ed6451984
mod_http: Allow configuring http parser size limits
Kim Alvefur <zash@zash.se>
parents:
6598
diff
changeset
|
21 server.set_option("body_size_limit", module:get_option_number("http_max_content_size")); |
|
588ed6451984
mod_http: Allow configuring http parser size limits
Kim Alvefur <zash@zash.se>
parents:
6598
diff
changeset
|
22 server.set_option("buffer_size_limit", module:get_option_number("http_max_buffer_size")); |
|
588ed6451984
mod_http: Allow configuring http parser size limits
Kim Alvefur <zash@zash.se>
parents:
6598
diff
changeset
|
23 |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
24 local function normalize_path(path) |
|
4911
4c8575b09ff6
mod_http: Fix normalize_path('/') to not return an empty string, fixes module:http_url()
Kim Alvefur <zash@zash.se>
parents:
4892
diff
changeset
|
25 if path:sub(-1,-1) == "/" then path = path:sub(1, -2); end |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
26 if path:sub(1,1) ~= "/" then path = "/"..path; end |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
27 return path; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
28 end |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 |
|
4667
d0cfc49f3f2b
mod_http: Support for default_path in apps
Matthew Wild <mwild1@gmail.com>
parents:
4664
diff
changeset
|
30 local function get_http_event(host, app_path, key) |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
31 local method, path = key:match("^(%S+)%s+(.+)$"); |
|
4721
1c6c4c53f08a
mod_http: Routes now require a method to be specified, but the path has become optional (defaults to the base path with no trailing '/'
Matthew Wild <mwild1@gmail.com>
parents:
4720
diff
changeset
|
32 if not method then -- No path specified, default to "" (base path) |
|
1c6c4c53f08a
mod_http: Routes now require a method to be specified, but the path has become optional (defaults to the base path with no trailing '/'
Matthew Wild <mwild1@gmail.com>
parents:
4720
diff
changeset
|
33 method, path = key, ""; |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
34 end |
|
4721
1c6c4c53f08a
mod_http: Routes now require a method to be specified, but the path has become optional (defaults to the base path with no trailing '/'
Matthew Wild <mwild1@gmail.com>
parents:
4720
diff
changeset
|
35 if method:sub(1,1) == "/" then |
|
1c6c4c53f08a
mod_http: Routes now require a method to be specified, but the path has become optional (defaults to the base path with no trailing '/'
Matthew Wild <mwild1@gmail.com>
parents:
4720
diff
changeset
|
36 return nil; |
|
1c6c4c53f08a
mod_http: Routes now require a method to be specified, but the path has become optional (defaults to the base path with no trailing '/'
Matthew Wild <mwild1@gmail.com>
parents:
4720
diff
changeset
|
37 end |
|
5092
a89f8f2f2943
mod_http: Don't produce paths with double / if a module is set to serve /
Kim Alvefur <zash@zash.se>
parents:
4915
diff
changeset
|
38 if app_path == "/" and path:sub(1,1) == "/" then |
|
a89f8f2f2943
mod_http: Don't produce paths with double / if a module is set to serve /
Kim Alvefur <zash@zash.se>
parents:
4915
diff
changeset
|
39 app_path = ""; |
|
a89f8f2f2943
mod_http: Don't produce paths with double / if a module is set to serve /
Kim Alvefur <zash@zash.se>
parents:
4915
diff
changeset
|
40 end |
|
4667
d0cfc49f3f2b
mod_http: Support for default_path in apps
Matthew Wild <mwild1@gmail.com>
parents:
4664
diff
changeset
|
41 return method:upper().." "..host..app_path..path; |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
42 end |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 |
|
4702
5a85e541de1a
mod_http: Switch to single option for specifying HTTP app bases, http_paths. Keys are app/module names, values are base paths.
Matthew Wild <mwild1@gmail.com>
parents:
4696
diff
changeset
|
44 local function get_base_path(host_module, app_name, default_app_path) |
|
5332
5b73ac268a9e
mod_http: Expand $host in http_paths
Kim Alvefur <zash@zash.se>
parents:
5230
diff
changeset
|
45 return (normalize_path(host_module:get_option("http_paths", {})[app_name] -- Host |
|
4702
5a85e541de1a
mod_http: Switch to single option for specifying HTTP app bases, http_paths. Keys are app/module names, values are base paths.
Matthew Wild <mwild1@gmail.com>
parents:
4696
diff
changeset
|
46 or module:get_option("http_paths", {})[app_name] -- Global |
|
5332
5b73ac268a9e
mod_http: Expand $host in http_paths
Kim Alvefur <zash@zash.se>
parents:
5230
diff
changeset
|
47 or default_app_path)) -- Default |
|
6025
583e5c1365fe
mod_http: Use hostname from the correct context (thanks gryffus)
Kim Alvefur <zash@zash.se>
parents:
5427
diff
changeset
|
48 :gsub("%$(%w+)", { host = host_module.host }); |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
49 end |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
50 |
|
6504
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
51 local function redir_handler(event) |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
52 event.response.headers.location = event.request.path.."/"; |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
53 return 301; |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
54 end |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
55 |
|
5093
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
56 local ports_by_scheme = { http = 80, https = 443, }; |
|
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
57 |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
58 -- Helper to deduce a module's external URL |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
59 function moduleapi.http_url(module, app_name, default_path) |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
60 app_name = app_name or (module.name:gsub("^http_", "")); |
|
5183
8461e8ed7c09
mod_http: Rename variable for clarity
Matthew Wild <mwild1@gmail.com>
parents:
5180
diff
changeset
|
61 local external_url = url_parse(module:get_option_string("http_external_url")) or {}; |
|
6026
8a8be471ec72
mod_http: Fix http_external_url setting without an explicit port
Kim Alvefur <zash@zash.se>
parents:
6025
diff
changeset
|
62 if external_url.scheme and external_url.port == nil then |
|
8a8be471ec72
mod_http: Fix http_external_url setting without an explicit port
Kim Alvefur <zash@zash.se>
parents:
6025
diff
changeset
|
63 external_url.port = ports_by_scheme[external_url.scheme]; |
|
8a8be471ec72
mod_http: Fix http_external_url setting without an explicit port
Kim Alvefur <zash@zash.se>
parents:
6025
diff
changeset
|
64 end |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
65 local services = portmanager.get_active_services(); |
|
4915
3fbc01d1fc5a
mod_http: Fix traceback when no HTTP services succeed in binding
Matthew Wild <mwild1@gmail.com>
parents:
4911
diff
changeset
|
66 local http_services = services:get("https") or services:get("http") or {}; |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
67 for interface, ports in pairs(http_services) do |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
68 for port, services in pairs(ports) do |
|
5093
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
69 local url = { |
|
5183
8461e8ed7c09
mod_http: Rename variable for clarity
Matthew Wild <mwild1@gmail.com>
parents:
5180
diff
changeset
|
70 scheme = (external_url.scheme or services[1].service.name); |
|
5190
76c73bd3d483
mod_http: Make module:http_url() aware of http_host
Kim Alvefur <zash@zash.se>
parents:
5183
diff
changeset
|
71 host = (external_url.host or module:get_option_string("http_host", module.host)); |
|
5183
8461e8ed7c09
mod_http: Rename variable for clarity
Matthew Wild <mwild1@gmail.com>
parents:
5180
diff
changeset
|
72 port = tonumber(external_url.port) or port or 80; |
|
8461e8ed7c09
mod_http: Rename variable for clarity
Matthew Wild <mwild1@gmail.com>
parents:
5180
diff
changeset
|
73 path = normalize_path(external_url.path or "/").. |
|
5093
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
74 (get_base_path(module, app_name, default_path or "/"..app_name):sub(2)); |
|
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
75 } |
|
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
76 if ports_by_scheme[url.scheme] == url.port then url.port = nil end |
|
1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
Kim Alvefur <zash@zash.se>
parents:
5092
diff
changeset
|
77 return url_build(url); |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
78 end |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
79 end |
|
6598
4b4852c4f96a
mod_http: Return a static string from module:http_url() when no ports are enabled and log a warning
Kim Alvefur <zash@zash.se>
parents:
6597
diff
changeset
|
80 module:log("warn", "No http ports enabled, can't generate an external URL"); |
|
4b4852c4f96a
mod_http: Return a static string from module:http_url() when no ports are enabled and log a warning
Kim Alvefur <zash@zash.se>
parents:
6597
diff
changeset
|
81 return "http://disabled.invalid/"; |
|
4702
5a85e541de1a
mod_http: Switch to single option for specifying HTTP app bases, http_paths. Keys are app/module names, values are base paths.
Matthew Wild <mwild1@gmail.com>
parents:
4696
diff
changeset
|
82 end |
|
5a85e541de1a
mod_http: Switch to single option for specifying HTTP app bases, http_paths. Keys are app/module names, values are base paths.
Matthew Wild <mwild1@gmail.com>
parents:
4696
diff
changeset
|
83 |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
84 function module.add_host(module) |
|
5180
4ef69555a879
mod_http: Add 'http_host' option to change the HTTP virtual host that this host is accessible at (e.g. allows mapping a host to '127.0.0.1')
Matthew Wild <mwild1@gmail.com>
parents:
5120
diff
changeset
|
85 local host = module:get_option_string("http_host", module.host); |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
86 local apps = {}; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
87 module.environment.apps = apps; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
88 local function http_app_added(event) |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
89 local app_name = event.item.name; |
|
4667
d0cfc49f3f2b
mod_http: Support for default_path in apps
Matthew Wild <mwild1@gmail.com>
parents:
4664
diff
changeset
|
90 local default_app_path = event.item.default_path or "/"..app_name; |
|
4892
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
91 local app_path = get_base_path(module, app_name, default_app_path); |
|
6c8074f47ca4
mod_http: Add module:http_url([app_name,][default_path]) for a module to get a guess at its external URL
Matthew Wild <mwild1@gmail.com>
parents:
4774
diff
changeset
|
92 if not app_name then |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
93 -- TODO: Link to docs |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
94 module:log("error", "HTTP app has no 'name', add one or use module:provides('http', app)"); |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
95 return; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
96 end |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
97 apps[app_name] = apps[app_name] or {}; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
98 local app_handlers = apps[app_name]; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
99 for key, handler in pairs(event.item.route or {}) do |
|
4667
d0cfc49f3f2b
mod_http: Support for default_path in apps
Matthew Wild <mwild1@gmail.com>
parents:
4664
diff
changeset
|
100 local event_name = get_http_event(host, app_path, key); |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
101 if event_name then |
|
4724
a8c234332258
mod_http: Allow a route value to be static data rather than a handler function
Matthew Wild <mwild1@gmail.com>
parents:
4721
diff
changeset
|
102 if type(handler) ~= "function" then |
|
a8c234332258
mod_http: Allow a route value to be static data rather than a handler function
Matthew Wild <mwild1@gmail.com>
parents:
4721
diff
changeset
|
103 local data = handler; |
|
a8c234332258
mod_http: Allow a route value to be static data rather than a handler function
Matthew Wild <mwild1@gmail.com>
parents:
4721
diff
changeset
|
104 handler = function () return data; end |
|
a8c234332258
mod_http: Allow a route value to be static data rather than a handler function
Matthew Wild <mwild1@gmail.com>
parents:
4721
diff
changeset
|
105 elseif event_name:sub(-2, -1) == "/*" then |
|
5230
6f5640375358
mod_http: Fix path length pattern
Kim Alvefur <zash@zash.se>
parents:
5204
diff
changeset
|
106 local base_path_len = #event_name:match("/.+$"); |
|
4669
0e0a72679f77
mod_http: Pass portion of path that matched wildcard to wildcard handlers, as a second parameter
Matthew Wild <mwild1@gmail.com>
parents:
4667
diff
changeset
|
107 local _handler = handler; |
|
0e0a72679f77
mod_http: Pass portion of path that matched wildcard to wildcard handlers, as a second parameter
Matthew Wild <mwild1@gmail.com>
parents:
4667
diff
changeset
|
108 handler = function (event) |
|
5204
0b4f680ea116
mod_http: Fix pattern and slightly improve efficiency and memory usage of wildcard HTTP handlers
Matthew Wild <mwild1@gmail.com>
parents:
5190
diff
changeset
|
109 local path = event.request.path:sub(base_path_len); |
|
4669
0e0a72679f77
mod_http: Pass portion of path that matched wildcard to wildcard handlers, as a second parameter
Matthew Wild <mwild1@gmail.com>
parents:
4667
diff
changeset
|
110 return _handler(event, path); |
|
0e0a72679f77
mod_http: Pass portion of path that matched wildcard to wildcard handlers, as a second parameter
Matthew Wild <mwild1@gmail.com>
parents:
4667
diff
changeset
|
111 end; |
|
6504
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
112 module:hook_object_event(server, event_name:sub(1, -3), redir_handler, -1); |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
113 elseif event_name:sub(-1, -1) == "/" then |
|
e1659f32852e
mod_http: For URLs that end with / or wildcard handlers, add a low-priority redirect from without to with slash
Kim Alvefur <zash@zash.se>
parents:
6086
diff
changeset
|
114 module:hook_object_event(server, event_name:sub(1, -2), redir_handler, -1); |
|
4669
0e0a72679f77
mod_http: Pass portion of path that matched wildcard to wildcard handlers, as a second parameter
Matthew Wild <mwild1@gmail.com>
parents:
4667
diff
changeset
|
115 end |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
116 if not app_handlers[event_name] then |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
117 app_handlers[event_name] = handler; |
|
4696
4700e318add1
mod_http: Use module:hook/unhook_event_object() so that handlers get unregistered if mod_http is unloaded
Matthew Wild <mwild1@gmail.com>
parents:
4678
diff
changeset
|
118 module:hook_object_event(server, event_name, handler); |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
119 else |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
120 module:log("warn", "App %s added handler twice for '%s', ignoring", app_name, event_name); |
|
4636
41983ec223f0
mod_http: Include handlers of non-global modules.
Waqas Hussain <waqas20@gmail.com>
parents:
4635
diff
changeset
|
121 end |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
122 else |
|
4720
fddc2797a96a
mod_http: Link to docs on routes in error message
Matthew Wild <mwild1@gmail.com>
parents:
4717
diff
changeset
|
123 module:log("error", "Invalid route in %s, %q. See http://prosody.im/doc/developers/http#routes", app_name, key); |
|
4636
41983ec223f0
mod_http: Include handlers of non-global modules.
Waqas Hussain <waqas20@gmail.com>
parents:
4635
diff
changeset
|
124 end |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 end |
|
6597
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
126 local services = portmanager.get_active_services(); |
|
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
127 if services:get("https") or services:get("http") then |
|
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
128 module:log("debug", "Serving '%s' at %s", app_name, module:http_url(app_name, app_path)); |
|
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
129 else |
|
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
130 module:log("warn", "Not listening on any ports, '%s' will be unreachable", app_name); |
|
321321f566fb
mod_http: Log a debug message when adding new http apps and warn if no http ports are enabled
Kim Alvefur <zash@zash.se>
parents:
6596
diff
changeset
|
131 end |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5427
diff
changeset
|
133 |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
134 local function http_app_removed(event) |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
135 local app_handlers = apps[event.item.name]; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
136 apps[event.item.name] = nil; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
137 for event, handler in pairs(app_handlers) do |
|
4696
4700e318add1
mod_http: Use module:hook/unhook_event_object() so that handlers get unregistered if mod_http is unloaded
Matthew Wild <mwild1@gmail.com>
parents:
4678
diff
changeset
|
138 module:unhook_object_event(server, event, handler); |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
139 end |
|
4636
41983ec223f0
mod_http: Include handlers of non-global modules.
Waqas Hussain <waqas20@gmail.com>
parents:
4635
diff
changeset
|
140 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5427
diff
changeset
|
141 |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
142 module:handle_items("http-provider", http_app_added, http_app_removed); |
|
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
143 |
|
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
144 server.add_host(host); |
|
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
145 function module.unload() |
|
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
146 server.remove_host(host); |
|
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4724
diff
changeset
|
147 end |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 end |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 |
|
5120
bcabea740c00
mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents:
5093
diff
changeset
|
150 module:provides("net", { |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 name = "http"; |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
152 listener = server.listener; |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 default_port = 5280; |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 multiplex = { |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 pattern = "^[A-Z]"; |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 }; |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 }); |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 |
|
5120
bcabea740c00
mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents:
5093
diff
changeset
|
159 module:provides("net", { |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 name = "https"; |
|
4664
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
161 listener = server.listener; |
|
7438b3c68576
mod_http: Revamp module for new API and config
Matthew Wild <mwild1@gmail.com>
parents:
4636
diff
changeset
|
162 default_port = 5281; |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
163 encryption = "ssl"; |
|
6086
3b4fde51fa25
mod_http: Update to disable peer verification with the new certmanager
Kim Alvefur <zash@zash.se>
parents:
6027
diff
changeset
|
164 ssl_config = { |
|
7867
194f540e13e2
util.sslconfig: Remvoe flag merging for 'verify' as this is more of a tri-state field than a set of options
Kim Alvefur <zash@zash.se>
parents:
7581
diff
changeset
|
165 verify = "none"; |
|
6086
3b4fde51fa25
mod_http: Update to disable peer verification with the new certmanager
Kim Alvefur <zash@zash.se>
parents:
6027
diff
changeset
|
166 }; |
|
4635
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
167 multiplex = { |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
168 pattern = "^[A-Z]"; |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
169 }; |
|
ea5215bd2783
mod_http: Provide HTTP service.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
170 }); |
