Skip to content

Commit 728bad8

Browse files
committed
added validation to client.feed and feed.follow
1 parent fd8ff78 commit 728bad8

4 files changed

Lines changed: 57 additions & 5 deletions

File tree

stream/client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import logging
55
import os
66
import requests
7+
from stream.utils import validate_feed_slug, validate_user_id
78

89

910
logger = logging.getLogger(__name__)
@@ -58,8 +59,8 @@ def feed(self, feed_slug, user_id):
5859
:param user_id: the user id
5960
'''
6061
from stream.feed import Feed
61-
user_id = str(user_id)
62-
feed_slug = str(feed_slug)
62+
feed_slug = validate_feed_slug(feed_slug)
63+
user_id = validate_user_id(user_id)
6364

6465
# generate the token
6566
feed_id = '%s%s' % (feed_slug, user_id)

stream/feed.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from stream.utils import validate_feed
1+
from stream.utils import validate_feed_id, validate_user_id, validate_feed_slug
22

33

44
class Feed(object):
@@ -110,6 +110,8 @@ def follow(self, target_feed_slug, target_user_id):
110110
:param target_feed_slug: the slug of the target feed
111111
:param target_user_id: the user id
112112
'''
113+
target_feed_slug = validate_feed_slug(target_feed_slug)
114+
target_user_id = validate_user_id(target_user_id)
113115
target_feed_id = '%s:%s' % (target_feed_slug, target_user_id)
114116
url = self.feed_url + 'follows/'
115117
data = {
@@ -167,7 +169,7 @@ def add_to_signature(self, recipients):
167169
'''
168170
data = []
169171
for recipient in recipients:
170-
validate_feed(recipient)
172+
validate_feed_id(recipient)
171173
feed_slug, user_id = recipient.split(':')
172174
feed = self.client.feed(feed_slug, user_id)
173175
data.append("%s %s" % (recipient, feed.token))

stream/tests.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,23 @@ def test_heroku_overwrite(self):
7070
self.assertEqual(client.api_key, 'a')
7171
self.assertEqual(client.api_secret, 'b')
7272
self.assertEqual(client.app_id, 'c')
73+
74+
def test_invalid_feed_values(self):
75+
def invalid_feed_slug():
76+
client.feed('user:', '1')
77+
self.assertRaises(ValueError, invalid_feed_slug)
78+
79+
def invalid_user_id():
80+
client.feed('user:', '1-a')
81+
self.assertRaises(ValueError, invalid_user_id)
82+
83+
def invalid_follow_feed_slug():
84+
self.user1.follow('user:', '1')
85+
self.assertRaises(ValueError, invalid_follow_feed_slug)
86+
87+
def invalid_follow_user_id():
88+
self.user1.follow('user', '1-:a')
89+
self.assertRaises(ValueError, invalid_follow_user_id)
7390

7491
def test_token_retrieval(self):
7592
self.user1.token

stream/utils.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,45 @@
1+
import re
12

3+
valid_re = re.compile('^\w+$')
24

3-
def validate_feed(feed_id):
5+
6+
def validate_feed_id(feed_id):
47
'''
58
Validates the input is in the format of user:1
69
710
:param feed_id: a feed such as user:1
811
912
Raises ValueError if the format doesnt match
1013
'''
14+
feed_id = str(feed_id)
1115
if len(feed_id.split(':')) != 2:
1216
msg = 'Invalid feed_id spec %s, please specify the feed_id as feed_slug:feed_id'
1317
raise ValueError(msg % feed_id)
18+
19+
feed_slug, user_id = feed_id.split(':')
20+
feed_slug = validate_feed_slug(feed_slug)
21+
user_id = validate_user_id(user_id)
22+
return feed_id
23+
24+
25+
def validate_feed_slug(feed_slug):
26+
'''
27+
Validates the feed slug falls into \w
28+
'''
29+
feed_slug = str(feed_slug)
30+
if not valid_re.match(feed_slug):
31+
msg = 'Invalid feed slug %s, please only use letters, numbers and _'
32+
raise ValueError(msg % feed_slug)
33+
return feed_slug
34+
35+
36+
def validate_user_id(user_id):
37+
'''
38+
Validates the user id falls into \w
39+
'''
40+
user_id = str(user_id)
41+
if not valid_re.match(user_id):
42+
msg = 'Invalid user id %s, please only use letters, numbers and _'
43+
raise ValueError(msg % user_id)
44+
return user_id
45+

0 commit comments

Comments
 (0)