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)