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 |