Merge lp:~ricardokirkner/rnr-server/flags-n-macaroons into lp:rnr-server

Proposed by Ricardo Kirkner
Status: Merged
Approved by: Ricardo Kirkner
Approved revision: 335
Merged at revision: 319
Proposed branch: lp:~ricardokirkner/rnr-server/flags-n-macaroons
Merge into: lp:rnr-server
Prerequisite: lp:~ricardokirkner/rnr-server/review-crud-api-with-macaroons
Diff against target: 148 lines (+60/-13)
2 files modified
src/clickreviews/api/urls.py (+2/-2)
src/clickreviews/tests/test_handlers.py (+58/-11)
To merge this branch: bzr merge lp:~ricardokirkner/rnr-server/flags-n-macaroons
Reviewer Review Type Date Requested Status
Fabián Ezequiel Gallina (community) Approve
Review via email: mp+294956@code.launchpad.net

Commit message

added macaroons support to packages and reviews flags apis

To post a comment you must log in.
Revision history for this message
Fabián Ezequiel Gallina (fgallina) wrote :

Looking good, added comments.

333. By Ricardo Kirkner

Merged review-crud-api-with-macaroons into flags-n-macaroons.

Revision history for this message
Ricardo Kirkner (ricardokirkner) :
334. By Ricardo Kirkner

assert right package/review have been flagged

335. By Ricardo Kirkner

Merged review-crud-api-with-macaroons into flags-n-macaroons.

Revision history for this message
Fabián Ezequiel Gallina (fgallina) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/clickreviews/api/urls.py'
2--- src/clickreviews/api/urls.py 2016-05-20 14:00:39 +0000
3+++ src/clickreviews/api/urls.py 2016-05-20 14:00:39 +0000
4@@ -44,13 +44,13 @@
5
6 click_package_flag_resource = CSRFExemptResource(
7 handler=ClickPackageFlagHandler,
8- authentication=auth)
9+ authentication=(macaroons_auth, auth))
10 click_package_flag_resource.__name__ = "Resource"
11 click_package_flag_resource = never_cache(click_package_flag_resource)
12
13 click_package_review_flag_resource = CSRFExemptResource(
14 handler=ClickPackageReviewFlagHandler,
15- authentication=auth)
16+ authentication=(macaroons_auth, auth))
17 click_package_review_flag_resource.__name__ = "Resource"
18 click_package_review_flag_resource = never_cache(
19 click_package_review_flag_resource)
20
21=== modified file 'src/clickreviews/tests/test_handlers.py'
22--- src/clickreviews/tests/test_handlers.py 2016-05-20 14:00:39 +0000
23+++ src/clickreviews/tests/test_handlers.py 2016-05-20 14:00:39 +0000
24@@ -44,6 +44,14 @@
25 p.start()
26 self.addCleanup(p.stop)
27
28+ def make_account_data(self, user):
29+ return {
30+ 'verified': True,
31+ 'openid': user.useropenid_set.first().claimed_id.split('/')[-1],
32+ 'email': user.email,
33+ 'displayname': user.username,
34+ }
35+
36
37 class ClickReviewsHandlerTestCase(MacaroonsAuthenticatedTestCase):
38
39@@ -327,14 +335,6 @@
40 response = self.update_review(review, data)
41 self.assert_review_updated(response, data)
42
43- def make_account_data(self, user):
44- return {
45- 'verified': True,
46- 'openid': user.useropenid_set.first().claimed_id.split('/')[-1],
47- 'email': user.email,
48- 'displayname': user.username,
49- }
50-
51 def test_update_review_using_macaroon_auth(self):
52 user = self.factory.makeUser()
53 account = self.make_account_data(user)
54@@ -570,7 +570,7 @@
55 self.assertEqual('Accept, Accept-Encoding', vary)
56
57
58-class BaseClickPackageFlagHandlerTestCase(TestCaseWithFactory):
59+class BaseClickPackageFlagHandlerTestCase(MacaroonsAuthenticatedTestCase):
60
61 url_name = None
62
63@@ -583,7 +583,6 @@
64 self.mock_is_authenticated.return_value = True
65 self.addCleanup(p.stop)
66 self.user = self.factory.makeUser()
67- self.client.login(username=self.user.username, password='test')
68 click_verify_fn = ('clickreviews.forms.'
69 'verify_click_package_published')
70 patcher = mock.patch(click_verify_fn)
71@@ -597,7 +596,7 @@
72 'description': description}
73
74 def do_request(
75- self, data=None, headers=None, user=None, **kwargs):
76+ self, data=None, headers=None, user=None, auth='oauth', **kwargs):
77 url = reverse(self.url_name, kwargs=kwargs)
78 if data is None:
79 data = {}
80@@ -605,6 +604,12 @@
81 headers = {}
82 if user is None:
83 user = self.factory.makeUser()
84+ if auth == 'macaroon':
85+ authorization = 'Macaroon root="%s", discharge="%s"' % (
86+ 'root-macaroon-data', 'discharge-macaroon-data')
87+ headers['HTTP_AUTHORIZATION'] = authorization
88+ else:
89+ self.client.login(username=self.user.username, password='test')
90 return self.client.post(url, data, **headers)
91
92
93@@ -682,6 +687,27 @@
94 self.assertIn(error, response_data['errors']['package_name'])
95 self.assertEqual(ClickPackageFlag.objects.count(), 1)
96
97+ def test_support_macaroon_authentication(self):
98+ user = self.factory.makeUser()
99+ account = self.make_account_data(user)
100+ self.sca_double.set_verify_acl_response(account=account)
101+
102+ package = self.factory.makeClickPackage(package_name='some_package')
103+ assert not ClickPackageFlag.objects.exists()
104+ data = self.make_data()
105+ response = self.do_request(
106+ package_name=package.package_name, data=data,
107+ user=user, auth='macaroon')
108+ self.assertEqual(response.status_code, httplib.OK)
109+ data = json.loads(response.content)
110+ self.assert_package_flagged(package, data)
111+
112+ def assert_package_flagged(self, package, data):
113+ flag = ClickPackageFlag.objects.get(id=data['id'])
114+ self.assertEqual(flag.description, data['description'])
115+ self.assertEqual(flag.summary, data['summary'])
116+ self.assertEqual(flag.moderation.package, package)
117+
118
119 class ClickPackageReviewFlagHandlerTestCase(
120 BaseClickPackageFlagHandlerTestCase):
121@@ -746,6 +772,27 @@
122 self.assertIn(error, response_data['errors']['review'])
123 self.assertEqual(ClickPackageReviewFlag.objects.count(), 1)
124
125+ def test_support_macaroon_authentication(self):
126+ user = self.factory.makeUser()
127+ account = self.make_account_data(user)
128+ self.sca_double.set_verify_acl_response(account=account)
129+
130+ self.client.logout()
131+ review = self.factory.makeClickPackageReview()
132+ assert not ClickPackageReviewFlag.objects.exists()
133+ data = self.make_data()
134+ response = self.do_request(
135+ review_id=review.pk, data=data, user=user, auth='macaroon')
136+ self.assertEqual(response.status_code, httplib.OK)
137+ data = json.loads(response.content)
138+ self.assert_review_flagged(review, data)
139+
140+ def assert_review_flagged(self, review, data):
141+ flag = ClickPackageReviewFlag.objects.get(id=data['id'])
142+ self.assertEqual(flag.description, data['description'])
143+ self.assertEqual(flag.summary, data['summary'])
144+ self.assertEqual(flag.moderation.review, review)
145+
146
147 class BaseClickPackageModerationHandlerTestCase(
148 SSOTestCaseMixin, TestCaseWithFactory):

Subscribers

People subscribed via source and target branches