Revision: 314
Author: bslatkin
Date: Thu Jan 21 19:50:37 2010
Log: reference hub supports callback querystring params (finally!)
http://code.google.com/p/pubsubhubbub/source/detail?r=314
Modified:
/trunk/hub/main.py
/trunk/hub/main_test.py
=======================================
--- /trunk/hub/main.py Thu Jan 21 19:42:07 2010
+++ /trunk/hub/main.py Thu Jan 21 19:50:37 2010
@@ -1607,7 +1607,13 @@
}
if verify_token:
params['hub.verify_token'] = utf8encoded(verify_token)
- parsed_url[4] = urllib.urlencode(params)
+
+ if parsed_url[4]:
+ # Preserve subscriber-supplied callback parameters.
+ parsed_url[4] = '%s&%s' % (parsed_url[4], urllib.urlencode(params))
+ else:
+ parsed_url[4] = urllib.urlencode(params)
+
adjusted_url = urlparse.urlunparse(parsed_url)
try:
=======================================
--- /trunk/hub/main_test.py Mon Oct 26 13:36:06 2009
+++ /trunk/hub/main_test.py Thu Jan 21 19:50:37 2010
@@ -3105,6 +3105,37 @@
self.verify_task(Subscription.STATE_VERIFIED)
self.verify_record_task(self.topic)
+ sub = Subscription.get_by_key_name(self.sub_key)
+ self.assertEquals(Subscription.STATE_VERIFIED, sub.subscription_state)
+ self.assertEquals(self.verify_token, sub.verify_token)
+ self.assertEquals(self.secret, sub.secret)
+
+ def testSubscribeSuccessfulQueryStringArgs(self):
+ """Tests a subscription callback with querystring args."""
+ self.callback += '?some=query&string=params&to=mess&it=up'
+ self.sub_key = Subscription.create_key_name(self.callback, self.topic)
+ self.assertTrue(db.get(KnownFeed.create_key(self.topic)) is None)
+ self.assertTrue(Subscription.get_by_key_name(self.sub_key) is None)
+ Subscription.request_insert(
+ self.callback, self.topic, self.verify_token, self.secret)
+ self.verify_callback_querystring_template = (
+ self.callback +
+ '&hub.verify_token=the_token'
+ '&hub.challenge=this_is_my_fake_challenge_string'
+ '&hub.topic=http%%3A%%2F%%2Fexample.com%%2Fthe-topic'
+ '&hub.mode=%s'
+ '&hub.lease_seconds=2592000')
+
+ urlfetch_test_stub.instance.expect(
+ 'get', self.verify_callback_querystring_template % 'subscribe',
200,
+ self.challenge)
+ self.handle('post', ('subscription_key_name', self.sub_key),
+ ('verify_token', self.verify_token),
+ ('secret', self.secret),
+ ('next_state', Subscription.STATE_VERIFIED))
+ self.verify_task(Subscription.STATE_VERIFIED)
+ self.verify_record_task(self.topic)
+
sub = Subscription.get_by_key_name(self.sub_key)
self.assertEquals(Subscription.STATE_VERIFIED, sub.subscription_state)
self.assertEquals(self.verify_token, sub.verify_token)