testdynupdateauthentication.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from rest_framework.reverse import reverse
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from desecapi.tests.utils import utils
  5. import httpretty
  6. import base64
  7. from django.conf import settings
  8. class DynUpdateAuthenticationTests(APITestCase):
  9. def setCredentials(self, username, password):
  10. self.client.credentials(
  11. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((username + ':' + password).encode()).decode())
  12. def setUp(self):
  13. if not hasattr(self, 'owner'):
  14. self.username = utils.generateRandomString(12)
  15. self.password = utils.generateRandomString(12)
  16. self.user = utils.createUser(self.username, self.password)
  17. self.token = utils.createToken(user=self.user)
  18. self.setCredentials(self.username, self.password)
  19. self.url = reverse('v1:dyndns12update')
  20. self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
  21. self.domain = utils.generateDynDomainname()
  22. url = reverse('v1:domain-list')
  23. data = {'name': self.domain}
  24. utils.httpretty_for_pdns_domain_creation(data['name'])
  25. response = self.client.post(url, data)
  26. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  27. httpretty.enable(allow_net_connect=False)
  28. httpretty.register_uri(httpretty.POST, settings.NSLORD_PDNS_API + '/zones')
  29. httpretty.register_uri(httpretty.GET,
  30. settings.NSLORD_PDNS_API + '/zones/' + self.domain + '.',
  31. body='{"rrsets": []}',
  32. content_type="application/json")
  33. httpretty.register_uri(httpretty.PATCH, settings.NSLORD_PDNS_API + '/zones/' + self.domain + '.')
  34. httpretty.register_uri(httpretty.PUT, settings.NSLORD_PDNS_API + '/zones/' + self.domain + './notify')
  35. def tearDown(self):
  36. httpretty.reset()
  37. httpretty.disable()
  38. def testSuccessfulAuthentication(self):
  39. response = self.client.get(self.url)
  40. self.assertEqual(response.status_code, status.HTTP_200_OK)
  41. self.assertEqual(response.data, 'good')
  42. def testWrongUsername(self):
  43. self.setCredentials('wrong', self.password)
  44. response = self.client.get(self.url)
  45. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  46. def testWrongPassword(self):
  47. self.setCredentials(self.username, 'wrong')
  48. response = self.client.get(self.url)
  49. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  50. def testDoubleColonInAuthentication(self):
  51. self.client.credentials(
  52. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password + ':bullshit').encode()).decode())
  53. response = self.client.get(self.url)
  54. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  55. def testlNoColonInAuthentication(self):
  56. self.client.credentials(
  57. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + '' + self.password).encode()).decode())
  58. response = self.client.get(self.url)
  59. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  60. def testNoValidEncoding(self):
  61. self.client.credentials(HTTP_AUTHORIZATION='Basic bull[%]shit')
  62. response = self.client.get(self.url)
  63. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)