testdynupdateauthentication.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. response = self.client.post(url, data)
  25. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  26. httpretty.enable()
  27. httpretty.register_uri(httpretty.POST, settings.NSLORD_PDNS_API + '/zones')
  28. httpretty.register_uri(httpretty.GET,
  29. settings.NSLORD_PDNS_API + '/zones/' + self.domain + '.',
  30. body='{"rrsets": []}',
  31. content_type="application/json")
  32. httpretty.register_uri(httpretty.PATCH, settings.NSLORD_PDNS_API + '/zones/' + self.domain + '.')
  33. httpretty.register_uri(httpretty.PUT, settings.NSLORD_PDNS_API + '/zones/' + self.domain + './notify')
  34. def tearDown(self):
  35. httpretty.reset()
  36. httpretty.disable()
  37. def testSuccessfulAuthentication(self):
  38. response = self.client.get(self.url)
  39. self.assertEqual(response.status_code, status.HTTP_200_OK)
  40. self.assertEqual(response.data, 'good')
  41. def testWrongUsername(self):
  42. self.setCredentials('wrong', self.password)
  43. response = self.client.get(self.url)
  44. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  45. def testWrongPassword(self):
  46. self.setCredentials(self.username, 'wrong')
  47. response = self.client.get(self.url)
  48. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  49. def testDoubleColonInAuthentication(self):
  50. self.client.credentials(
  51. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password + ':bullshit').encode()).decode())
  52. response = self.client.get(self.url)
  53. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  54. def testlNoColonInAuthentication(self):
  55. self.client.credentials(
  56. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + '' + self.password).encode()).decode())
  57. response = self.client.get(self.url)
  58. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  59. def testNoValidEncoding(self):
  60. self.client.credentials(HTTP_AUTHORIZATION='Basic bull[%]shit')
  61. response = self.client.get(self.url)
  62. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)