test_authentication.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from rest_framework.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED
  2. from desecapi.tests.base import DynDomainOwnerTestCase
  3. class DynUpdateAuthenticationTestCase(DynDomainOwnerTestCase):
  4. NUM_OWNED_DOMAINS = 1
  5. def _get_dyndns12(self):
  6. with self.assertPdnsNoRequestsBut(self.requests_desec_rr_sets_update()):
  7. return self.client.get(self.reverse('v1:dyndns12update'))
  8. def assertDynDNS12Status(self, code=HTTP_200_OK, authorization=None):
  9. if authorization:
  10. self.client.set_credentials_basic_auth(authorization)
  11. self.assertStatus(self._get_dyndns12(), code)
  12. def test_username_password(self):
  13. # noinspection PyPep8Naming
  14. def assertDynDNS12AuthenticationStatus(username, token, code):
  15. self.client.set_credentials_basic_auth(username, token)
  16. self.assertDynDNS12Status(code)
  17. assertDynDNS12AuthenticationStatus('', self.token, HTTP_200_OK)
  18. assertDynDNS12AuthenticationStatus(self.owner.get_username(), self.token, HTTP_200_OK)
  19. assertDynDNS12AuthenticationStatus(self.my_domain.name, self.token, HTTP_200_OK)
  20. assertDynDNS12AuthenticationStatus(' ' + self.my_domain.name, self.token, HTTP_401_UNAUTHORIZED)
  21. assertDynDNS12AuthenticationStatus('wrong', self.token, HTTP_401_UNAUTHORIZED)
  22. assertDynDNS12AuthenticationStatus('', 'wrong', HTTP_401_UNAUTHORIZED)
  23. assertDynDNS12AuthenticationStatus(self.user.get_username(), 'wrong', HTTP_401_UNAUTHORIZED)
  24. def test_malformed_basic_auth(self):
  25. for authorization in [
  26. 'asdf:asdf:sadf',
  27. 'asdf',
  28. 'bull[%]shit',
  29. '你好',
  30. '💩💩💩💩',
  31. '💩💩:💩💩',
  32. ]:
  33. self.assertDynDNS12Status(authorization=authorization, code=HTTP_401_UNAUTHORIZED)
  34. class TokenAuthenticationTestCase(DynDomainOwnerTestCase):
  35. def _get_domains(self):
  36. with self.assertPdnsNoRequestsBut(self.request_pdns_zone_retrieve_crypto_keys()):
  37. return self.client.get(self.reverse('v1:domain-list'))
  38. def assertAuthenticationStatus(self, code=HTTP_200_OK, token=''):
  39. self.client.set_credentials_token_auth(token)
  40. self.assertStatus(self._get_domains(), code)
  41. def test_token_case_sensitive(self):
  42. self.assertAuthenticationStatus(HTTP_200_OK, self.token)
  43. self.assertAuthenticationStatus(HTTP_401_UNAUTHORIZED, self.token.upper())
  44. self.assertAuthenticationStatus(HTTP_401_UNAUTHORIZED, self.token.lower())