Mercurial > prosody-modules
comparison mod_pubsub_hub/mod_pubsub_hub.lua @ 1325:b21236b6b8d8
Backed out changeset 853a382c9bd6
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 28 Feb 2014 15:37:55 +0100 |
parents | 853a382c9bd6 |
children | e9d164e694e7 |
comparison
equal
deleted
inserted
replaced
1324:853a382c9bd6 | 1325:b21236b6b8d8 |
---|---|
1 -- Copyright (C) 2011 - 2012 Kim Alvefur | 1 -- Copyright (C) 2011 - 2012 Kim Alvefur |
2 -- | 2 -- |
3 -- This file is MIT/X11 licensed. | 3 -- This file is MIT/X11 licensed. |
4 | 4 |
5 local http_request, formdecode, formencode = import("net.http", "request", "formdecode", "formencode"); | 5 local http = require "net.http"; |
6 local formdecode = http.formdecode; | |
7 local formencode = http.formencode; | |
6 local uuid = require "util.uuid".generate; | 8 local uuid = require "util.uuid".generate; |
7 local hmac_sha1 = require "util.hmac".sha1; | 9 local hmac_sha1 = require "util.hmac".sha1; |
8 local json_encode = require "util.json".encode; | 10 local json_encode = require "util.json".encode; |
9 local time = os.time; | 11 local time = os.time; |
10 local m_min, m_max = math.min, math.max; | 12 local m_min, m_max = math.min, math.max; |
11 local tostring = tostring; | 13 local tostring = tostring; |
12 | |
13 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; | 14 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
14 local xmlns_pubsub_event = xmlns_pubsub .. "#event"; | 15 local xmlns_pubsub_event = xmlns_pubsub .. "#event"; |
15 local subs_by_topic = module:shared"subscriptions"; | 16 local subs_by_topic = module:shared"subscriptions"; |
16 | 17 |
17 local max_lease, min_lease, default_lease = 86400, 600, 3600; | 18 local max_lease, min_lease, default_lease = 86400, 600, 3600; |
88 ["hub.verify_token"] = verify_token, | 89 ["hub.verify_token"] = verify_token, |
89 } | 90 } |
90 module:log("debug", require"util.serialization".serialize(verify_modes)); | 91 module:log("debug", require"util.serialization".serialize(verify_modes)); |
91 if verify_modes["async"] then | 92 if verify_modes["async"] then |
92 module:log("debug", "Sending async verification request to %s for %s", tostring(callback_url), tostring(subscription)); | 93 module:log("debug", "Sending async verification request to %s for %s", tostring(callback_url), tostring(subscription)); |
93 http_request(callback_url, nil, function(body, code) | 94 http.request(callback_url, nil, function(body, code) |
94 if body == challenge and code > 199 and code < 300 then | 95 if body == challenge and code > 199 and code < 300 then |
95 if not subscription.want_state then | 96 if not subscription.want_state then |
96 module:log("warn", "Verification of already verified request, probably"); | 97 module:log("warn", "Verification of already verified request, probably"); |
97 return; | 98 return; |
98 end | 99 end |
106 subs_by_topic[topic][callback] = subscription; | 107 subs_by_topic[topic][callback] = subscription; |
107 end | 108 end |
108 end) | 109 end) |
109 return 202; | 110 return 202; |
110 elseif verify_modes["sync"] then | 111 elseif verify_modes["sync"] then |
111 http_request(callback_url, nil, function(body, code) | 112 http.request(callback_url, nil, function(body, code) |
112 if body == challenge and code > 199 and code < 300 then | 113 if body == challenge and code > 199 and code < 300 then |
113 if not subscription.want_state then | 114 if not subscription.want_state then |
114 module:log("warn", "Verification of already verified request, probably"); | 115 module:log("warn", "Verification of already verified request, probably"); |
115 return; | 116 return; |
116 end | 117 end |
158 ["hub.topic"] = topic, | 159 ["hub.topic"] = topic, |
159 ["hub.challenge"] = challenge, | 160 ["hub.challenge"] = challenge, |
160 ["hub.lease_seconds"] = subscription.lease_seconds, | 161 ["hub.lease_seconds"] = subscription.lease_seconds, |
161 ["hub.verify_token"] = subscription.verify_token, | 162 ["hub.verify_token"] = subscription.verify_token, |
162 } | 163 } |
163 http_request(callback_url, nil, function(body, code) | 164 http.request(callback_url, nil, function(body, code) |
164 if body == challenge and code > 199 and code < 300 then | 165 if body == challenge and code > 199 and code < 300 then |
165 subscription.expires = now + subscription.lease_seconds; | 166 subscription.expires = now + subscription.lease_seconds; |
166 end | 167 end |
167 end); | 168 end); |
168 else | 169 else |
198 ["Content-Type"] = "application/xml", | 199 ["Content-Type"] = "application/xml", |
199 }; | 200 }; |
200 if subscription.secret then | 201 if subscription.secret then |
201 headers["X-Hub-Signature"] = "sha1="..hmac_sha1(subscription.secret, body, true); | 202 headers["X-Hub-Signature"] = "sha1="..hmac_sha1(subscription.secret, body, true); |
202 end | 203 end |
203 http_request(subscription.callback, { method = "POST", body = body, headers = headers }, function(body, code) | 204 http.request(subscription.callback, { method = "POST", body = body, headers = headers }, function(body, code) |
204 if code >= 200 and code <= 299 then | 205 if code >= 200 and code <= 299 then |
205 module:log("debug", "Delivered"); | 206 module:log("debug", "Delivered"); |
206 else | 207 else |
207 module:log("warn", "Got status code %d on delivery to %s", tonumber(code) or -1, tostring(subscription.callback)); | 208 module:log("warn", "Got status code %d on delivery to %s", tonumber(code) or -1, tostring(subscription.callback)); |
208 -- TODO Retry | 209 -- TODO Retry |