Skip to content

Commit c91f361

Browse files
fix(passwd): raise 400 when password is not a parameter (#850)
1 parent 105c514 commit c91f361

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

rootfs/api/tests/test_auth.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,20 @@ def test_passwd(self):
258258
url = '/v2/auth/register'
259259
response = self.client.post(url, submit)
260260
self.assertEqual(response.status_code, 201, response.data)
261-
# change password
261+
# change password without new password
262262
url = '/v2/auth/passwd'
263263
user = User.objects.get(username=username)
264264
token = Token.objects.get(user=user).key
265+
response = self.client.post(url, {},
266+
HTTP_AUTHORIZATION='token {}'.format(token))
267+
self.assertEqual(response.status_code, 400, response.data)
268+
self.assertEqual(response.data, {'detail': 'new_password is a required field'})
269+
# change password without password field
270+
response = self.client.post(url, {'new_password': 'test'},
271+
HTTP_AUTHORIZATION='token {}'.format(token))
272+
self.assertEqual(response.status_code, 400, response.data)
273+
self.assertEqual(response.data, {'detail': 'password is a required field'})
274+
# change password
265275
submit = {
266276
'password': 'password2',
267277
'new_password': password,

rootfs/api/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ def destroy(self, request, **kwargs):
9393
return Response(status=status.HTTP_204_NO_CONTENT)
9494

9595
def passwd(self, request, **kwargs):
96+
if not request.data.get('new_password'):
97+
raise DeisException("new_password is a required field")
98+
9699
caller_obj = self.get_object()
97100
target_obj = self.get_object()
98101
if request.data.get('username'):
@@ -102,7 +105,9 @@ def passwd(self, request, **kwargs):
102105
else:
103106
raise PermissionDenied()
104107

105-
if request.data.get('password') or not caller_obj.is_superuser:
108+
if not caller_obj.is_superuser:
109+
if not request.data.get('password'):
110+
raise DeisException("password is a required field")
106111
if not target_obj.check_password(request.data['password']):
107112
raise AuthenticationFailed('Current password does not match')
108113

0 commit comments

Comments
 (0)