Mercurial > prosody-modules
comparison mod_pubsub_feeds/mod_pubsub_feeds.lua @ 1454:480c6f0576b1
mod_pubsub_feeds: Update to 0.4 version of PubSubHubbub
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 26 Jun 2014 18:29:01 +0200 |
| parents | 7b53cfc6ba8d |
| children | 13e359c48b5b |
comparison
equal
deleted
inserted
replaced
| 1453:7b53cfc6ba8d | 1454:480c6f0576b1 |
|---|---|
| 11 -- prosody_blog = "http://blog.prosody.im/feed/atom.xml"; | 11 -- prosody_blog = "http://blog.prosody.im/feed/atom.xml"; |
| 12 -- } | 12 -- } |
| 13 -- feed_pull_interval = 20 -- minutes | 13 -- feed_pull_interval = 20 -- minutes |
| 14 -- | 14 -- |
| 15 -- Reference | 15 -- Reference |
| 16 -- http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html | 16 -- http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.4.html |
| 17 | 17 |
| 18 local pubsub = module:depends"pubsub"; | 18 local pubsub = module:depends"pubsub"; |
| 19 | 19 |
| 20 local date, time = os.date, os.time; | 20 local date, time = os.date, os.time; |
| 21 local dt_parse, dt_datetime = require "util.datetime".parse, require "util.datetime".datetime; | 21 local dt_parse, dt_datetime = require "util.datetime".parse, require "util.datetime".datetime; |
| 141 end | 141 end |
| 142 | 142 |
| 143 function refresh_feeds(now) | 143 function refresh_feeds(now) |
| 144 --module:log("debug", "Refreshing feeds"); | 144 --module:log("debug", "Refreshing feeds"); |
| 145 for node, item in pairs(feed_list) do | 145 for node, item in pairs(feed_list) do |
| 146 --FIXME Don't fetch feeds which have a subscription | |
| 147 -- Otoho, what if the subscription expires or breaks? | |
| 148 if item.subscription ~= "subscribe" and item.last_update + refresh_interval < now then | 146 if item.subscription ~= "subscribe" and item.last_update + refresh_interval < now then |
| 149 --module:log("debug", "checking %s", item.node); | 147 --module:log("debug", "checking %s", item.node); |
| 150 fetch(item, update_entry); | 148 fetch(item, update_entry); |
| 151 end | 149 end |
| 152 end | 150 end |
| 157 return module:http_url(nil, "/callback") .. "?node=" .. urlencode(node); | 155 return module:http_url(nil, "/callback") .. "?node=" .. urlencode(node); |
| 158 end | 156 end |
| 159 | 157 |
| 160 function subscribe(feed, want) | 158 function subscribe(feed, want) |
| 161 want = want or "subscribe"; | 159 want = want or "subscribe"; |
| 162 feed.token = uuid(); | |
| 163 feed.secret = feed.secret or uuid(); | 160 feed.secret = feed.secret or uuid(); |
| 164 local body = formencode{ | 161 local body = formencode{ |
| 165 ["hub.callback"] = format_url(feed.node); | 162 ["hub.callback"] = format_url(feed.node); |
| 166 ["hub.mode"] = want; | 163 ["hub.mode"] = want; |
| 167 ["hub.topic"] = feed.url; | 164 ["hub.topic"] = feed.url; |
| 168 ["hub.verify"] = "async"; | 165 ["hub.verify"] = "async"; -- COMPAT this is REQUIRED in the 0.3 draft but removed in 0.4 |
| 169 ["hub.verify_token"] = feed.token; | |
| 170 ["hub.secret"] = feed.secret; | 166 ["hub.secret"] = feed.secret; |
| 171 --["hub.lease_seconds"] = ""; | 167 --["hub.lease_seconds"] = ""; |
| 172 }; | 168 }; |
| 173 | 169 |
| 174 --module:log("debug", "subscription request, body: %s", body); | 170 --module:log("debug", "subscription request, body: %s", body); |
| 214 -- Would this work for unsubscribe? | 210 -- Would this work for unsubscribe? |
| 215 -- Also, if feed.subscription is changed here, | 211 -- Also, if feed.subscription is changed here, |
| 216 -- it would probably invalidate the subscription | 212 -- it would probably invalidate the subscription |
| 217 -- when/if the hub asks if it should be renewed | 213 -- when/if the hub asks if it should be renewed |
| 218 end | 214 end |
| 219 if query["hub.verify_token"] ~= feed.token then | 215 local lease_seconds = tonumber(query["hub.lease_seconds"]); |
| 220 module:log("debug", "Invalid verify_token: %s", tostring(query["hub.verify_token"])) | 216 if lease_seconds then |
| 221 return 401; | 217 feed.lease_expires = time() + lease_seconds - refresh_interval * 2; |
| 222 end | 218 end |
| 223 module:log("debug", "Confirming %s request to %s", feed.subscription, feed.url) | |
| 224 return query["hub.challenge"]; | 219 return query["hub.challenge"]; |
| 225 end | 220 end |
| 226 return 400; | 221 return 400; |
| 227 elseif method == "POST" then | 222 elseif method == "POST" then |
| 228 if #body > 0 then | 223 if #body > 0 then |
