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