# HG changeset patch # User Kim Alvefur # Date 1314191018 -7200 # Node ID c85397063eca4ee03fa43ea7d259007f7f0be652 # Parent f42fe4229f8aa2eb12564afe4cafd9dbc4330c2c mod_pubsub_feed: Try harder to figure out ones callback URL. diff -r f42fe4229f8a -r c85397063eca mod_pubsub_feed/mod_pubsub_feed.lua --- a/mod_pubsub_feed/mod_pubsub_feed.lua Wed Aug 24 11:29:02 2011 +0200 +++ b/mod_pubsub_feed/mod_pubsub_feed.lua Wed Aug 24 15:03:38 2011 +0200 @@ -54,11 +54,27 @@ }; local refresh_interval = module:get_option_number("feed_pull_interval", 15) * 60; local use_pubsubhubub = module:get_option_boolean("use_pubsubhubub", true); -- HTTP by default or not? +local http_hostname = module:get_option_string("pubsubhubub_httphost", module.host); local feed_list = { } for node, url in pairs(config) do feed_list[node] = { url = url; node = node; last_update = 0 }; end +local ports = module:get_option("feeds_ports") or { 5280 }; +if not next(ports) then + ports = { 5280 }; +end +local port_number, base_name, secure; +for _, opts in ipairs(ports) do + if type(opts) == "number" then + port_number, base_name = opts, "callback"; + elseif type(opts) == "table" then + port_number, base_name, secure = opts.port or 5280, opts.path or "callback", opts.ssl or nil; + elseif type(opts) == "string" then + base_name, port_number = opts, 5280; + end +end + local response_codes = { ["200"] = "OK"; ["202"] = "Accepted"; @@ -165,11 +181,15 @@ return refresh_interval; end +local function format_url(secure, host, port, path, node) + return ("%s://%s:%d/%s?node=%s"):format(secure and "https" or "http", host, port, path, urlencode(node)); +end + function subscribe(feed) feed.token = uuid(); feed.secret = uuid(); local _body, body = { - ["hub.callback"] = "http://"..module.host..":5280/callback?node=" .. urlencode(feed.node); --FIXME figure out your own hostname reliably? + ["hub.callback"] = format_url(secure, http_hostname, port_number, base_name, feed.node); ["hub.mode"] = "subscribe"; --TODO unsubscribe ["hub.topic"] = feed.url; ["hub.verify"] = "async"; @@ -251,7 +271,7 @@ function init() module:log("debug", "initiating", module.name); if use_pubsubhubub then - httpserver.new{ port = 5280, base = "callback", handler = handle_http_request } + httpserver.new{ port = port_number, base = base_name, handler = handle_http_request } end add_task(0, refresh_feeds); end