Mercurial > prosody-modules
comparison mod_pubsub_feed/mod_pubsub_feed.lua @ 401:c85397063eca
mod_pubsub_feed: Try harder to figure out ones callback URL.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 24 Aug 2011 15:03:38 +0200 |
parents | f42fe4229f8a |
children | c92a37a72b25 |
comparison
equal
deleted
inserted
replaced
400:f42fe4229f8a | 401:c85397063eca |
---|---|
52 planet_jabber = "http://planet.jabber.org/atom.xml"; | 52 planet_jabber = "http://planet.jabber.org/atom.xml"; |
53 prosody_blog = "http://blog.prosody.im/feed/atom.xml"; | 53 prosody_blog = "http://blog.prosody.im/feed/atom.xml"; |
54 }; | 54 }; |
55 local refresh_interval = module:get_option_number("feed_pull_interval", 15) * 60; | 55 local refresh_interval = module:get_option_number("feed_pull_interval", 15) * 60; |
56 local use_pubsubhubub = module:get_option_boolean("use_pubsubhubub", true); -- HTTP by default or not? | 56 local use_pubsubhubub = module:get_option_boolean("use_pubsubhubub", true); -- HTTP by default or not? |
57 local http_hostname = module:get_option_string("pubsubhubub_httphost", module.host); | |
57 local feed_list = { } | 58 local feed_list = { } |
58 for node, url in pairs(config) do | 59 for node, url in pairs(config) do |
59 feed_list[node] = { url = url; node = node; last_update = 0 }; | 60 feed_list[node] = { url = url; node = node; last_update = 0 }; |
61 end | |
62 | |
63 local ports = module:get_option("feeds_ports") or { 5280 }; | |
64 if not next(ports) then | |
65 ports = { 5280 }; | |
66 end | |
67 local port_number, base_name, secure; | |
68 for _, opts in ipairs(ports) do | |
69 if type(opts) == "number" then | |
70 port_number, base_name = opts, "callback"; | |
71 elseif type(opts) == "table" then | |
72 port_number, base_name, secure = opts.port or 5280, opts.path or "callback", opts.ssl or nil; | |
73 elseif type(opts) == "string" then | |
74 base_name, port_number = opts, 5280; | |
75 end | |
60 end | 76 end |
61 | 77 |
62 local response_codes = { | 78 local response_codes = { |
63 ["200"] = "OK"; | 79 ["200"] = "OK"; |
64 ["202"] = "Accepted"; | 80 ["202"] = "Accepted"; |
163 end | 179 end |
164 end | 180 end |
165 return refresh_interval; | 181 return refresh_interval; |
166 end | 182 end |
167 | 183 |
184 local function format_url(secure, host, port, path, node) | |
185 return ("%s://%s:%d/%s?node=%s"):format(secure and "https" or "http", host, port, path, urlencode(node)); | |
186 end | |
187 | |
168 function subscribe(feed) | 188 function subscribe(feed) |
169 feed.token = uuid(); | 189 feed.token = uuid(); |
170 feed.secret = uuid(); | 190 feed.secret = uuid(); |
171 local _body, body = { | 191 local _body, body = { |
172 ["hub.callback"] = "http://"..module.host..":5280/callback?node=" .. urlencode(feed.node); --FIXME figure out your own hostname reliably? | 192 ["hub.callback"] = format_url(secure, http_hostname, port_number, base_name, feed.node); |
173 ["hub.mode"] = "subscribe"; --TODO unsubscribe | 193 ["hub.mode"] = "subscribe"; --TODO unsubscribe |
174 ["hub.topic"] = feed.url; | 194 ["hub.topic"] = feed.url; |
175 ["hub.verify"] = "async"; | 195 ["hub.verify"] = "async"; |
176 ["hub.verify_token"] = feed.token; | 196 ["hub.verify_token"] = feed.token; |
177 ["hub.secret"] = feed.secret; | 197 ["hub.secret"] = feed.secret; |
249 end | 269 end |
250 | 270 |
251 function init() | 271 function init() |
252 module:log("debug", "initiating", module.name); | 272 module:log("debug", "initiating", module.name); |
253 if use_pubsubhubub then | 273 if use_pubsubhubub then |
254 httpserver.new{ port = 5280, base = "callback", handler = handle_http_request } | 274 httpserver.new{ port = port_number, base = base_name, handler = handle_http_request } |
255 end | 275 end |
256 add_task(0, refresh_feeds); | 276 add_task(0, refresh_feeds); |
257 end | 277 end |
258 | 278 |
259 if prosody.start_time then -- already started | 279 if prosody.start_time then -- already started |