Software /
code /
prosody-modules
Diff
mod_pubsub_feeds/mod_pubsub_feeds.lua @ 718:a37e4149ccd1
mod_pubsub_feeds: Prepare for making it possible to unsubscribe, and some other minor changes.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 20 Jun 2012 16:08:47 +0200 |
parent | 717:e79147fb39f9 |
child | 762:0a06cf46c263 |
line wrap: on
line diff
--- a/mod_pubsub_feeds/mod_pubsub_feeds.lua Wed Jun 20 15:59:45 2012 +0200 +++ b/mod_pubsub_feeds/mod_pubsub_feeds.lua Wed Jun 20 16:08:47 2012 +0200 @@ -5,7 +5,7 @@ -- Config: -- Component "pubsub.example.com" "pubsub" -- modules_enabled = { --- "pubsub_feed"; +-- "pubsub_feeds"; -- } -- feeds = { -- node -> url -- prosody_blog = "http://blog.prosody.im/feed/atom.xml"; @@ -160,12 +160,13 @@ return module:http_url(nil, "/callback") .. "?node=" .. urlencode(node); end -function subscribe(feed) +function subscribe(feed, want) + want = want or "subscribe"; feed.token = uuid(); - feed.secret = uuid(); + feed.secret = feed.secret or uuid(); local body = formencode{ ["hub.callback"] = format_url(feed.node); - ["hub.mode"] = "subscribe"; --TODO unsubscribe + ["hub.mode"] = want; ["hub.topic"] = feed.url; ["hub.verify"] = "async"; ["hub.verify_token"] = feed.token; @@ -176,7 +177,7 @@ --module:log("debug", "subscription request, body: %s", body); --FIXME The subscription states and related stuff - feed.subscription = "subscribe"; + feed.subscription = want; http.request(feed.hub, { body = body }, function(data, code, req) module:log("debug", "subscription to %s submitted, status %s", feed.node, tostring(code)); if code >= 400 then @@ -200,8 +201,12 @@ --module:log("debug", "Headers: %s", dump(request.headers)); local feed = feed_list[query.node]; + if not feed then + return 404; + end + if method == "GET" then - if query.node and feed then + if query.node then if query["hub.topic"] ~= feed.url then module:log("debug", "Invalid topic: %s", tostring(query["hub.topic"])) return 404 @@ -216,15 +221,14 @@ end if query["hub.verify_token"] ~= feed.token then module:log("debug", "Invalid verify_token: %s", tostring(query["hub.verify_token"])) - return 401 + return 401; end module:log("debug", "Confirming %s request to %s", feed.subscription, feed.url) return query["hub.challenge"]; end return 400; elseif method == "POST" then - local body = request.body; - if #body > 0 and feed then + if #body > 0 then module:log("debug", "got %d bytes PuSHed for %s", #body, query.node); local signature = request.headers.x_hub_signature; if feed.secret then