Software / code / prosody
Comparison
plugins/mod_http.lua @ 5093:1ce9e8068dda
mod_http: Rework how module:http_url() builds the url.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 21 Aug 2012 21:10:54 +0200 |
| parent | 5092:a89f8f2f2943 |
| child | 5120:bcabea740c00 |
comparison
equal
deleted
inserted
replaced
| 5092:a89f8f2f2943 | 5093:1ce9e8068dda |
|---|---|
| 9 module:set_global(); | 9 module:set_global(); |
| 10 module:depends("http_errors"); | 10 module:depends("http_errors"); |
| 11 | 11 |
| 12 local moduleapi = require "core.moduleapi"; | 12 local moduleapi = require "core.moduleapi"; |
| 13 local url_parse = require "socket.url".parse; | 13 local url_parse = require "socket.url".parse; |
| 14 local url_build = require "socket.url".build; | |
| 14 | 15 |
| 15 local server = require "net.http.server"; | 16 local server = require "net.http.server"; |
| 16 | 17 |
| 17 server.set_default_host(module:get_option_string("http_default_host")); | 18 server.set_default_host(module:get_option_string("http_default_host")); |
| 18 | 19 |
| 40 return normalize_path(host_module:get_option("http_paths", {})[app_name] -- Host | 41 return normalize_path(host_module:get_option("http_paths", {})[app_name] -- Host |
| 41 or module:get_option("http_paths", {})[app_name] -- Global | 42 or module:get_option("http_paths", {})[app_name] -- Global |
| 42 or default_app_path); -- Default | 43 or default_app_path); -- Default |
| 43 end | 44 end |
| 44 | 45 |
| 46 local ports_by_scheme = { http = 80, https = 443, }; | |
| 47 | |
| 45 -- Helper to deduce a module's external URL | 48 -- Helper to deduce a module's external URL |
| 46 function moduleapi.http_url(module, app_name, default_path) | 49 function moduleapi.http_url(module, app_name, default_path) |
| 47 app_name = app_name or (module.name:gsub("^http_", "")); | 50 app_name = app_name or (module.name:gsub("^http_", "")); |
| 48 local ext = url_parse(module:get_option_string("http_external_url")) or {}; | 51 local ext = url_parse(module:get_option_string("http_external_url")) or {}; |
| 49 local services = portmanager.get_active_services(); | 52 local services = portmanager.get_active_services(); |
| 50 local http_services = services:get("https") or services:get("http") or {}; | 53 local http_services = services:get("https") or services:get("http") or {}; |
| 51 for interface, ports in pairs(http_services) do | 54 for interface, ports in pairs(http_services) do |
| 52 for port, services in pairs(ports) do | 55 for port, services in pairs(ports) do |
| 53 local path = get_base_path(module, app_name, default_path or "/"..app_name); | 56 local url = { |
| 54 port = tonumber(ext.port) or port or 80; | 57 scheme = (ext.scheme or services[1].service.name); |
| 55 if port == 80 then port = ""; else port = ":"..port; end | 58 host = (ext.host or module.host); |
| 56 return (ext.scheme or services[1].service.name).."://" | 59 port = tonumber(ext.port) or port or 80; |
| 57 ..(ext.host or module.host)..port | 60 path = normalize_path(ext.path or "/").. |
| 58 ..normalize_path(ext.path or "/")..(path:sub(2)); | 61 (get_base_path(module, app_name, default_path or "/"..app_name):sub(2)); |
| 62 } | |
| 63 if ports_by_scheme[url.scheme] == url.port then url.port = nil end | |
| 64 return url_build(url); | |
| 59 end | 65 end |
| 60 end | 66 end |
| 61 end | 67 end |
| 62 | 68 |
| 63 function module.add_host(module) | 69 function module.add_host(module) |