utils.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import random
  2. import string
  3. from httpretty import httpretty
  4. from api import settings
  5. from desecapi.models import Domain, User, Token
  6. class utils(object):
  7. @classmethod
  8. def generateRandomIPv4Address(cls):
  9. return ".".join(map(str, (random.randint(0, 255) for _ in range(4))))
  10. @classmethod
  11. def generateRandomString(cls, size=6, chars=string.ascii_lowercase + string.digits):
  12. return ''.join(random.choice(chars) for _ in range(size))
  13. @classmethod
  14. def generateUsername(cls):
  15. return cls.generateRandomString() + '@' + cls.generateRandomString() + 'desec.io'
  16. @classmethod
  17. def generateDomainname(cls):
  18. return random.choice(string.ascii_lowercase) + cls.generateRandomString() + '.de'
  19. @classmethod
  20. def generateDynDomainname(cls):
  21. return random.choice(string.ascii_lowercase) + cls.generateRandomString() + '.dedyn.io'
  22. """
  23. Creates a new user and saves it to the database.
  24. The user object is returned.
  25. """
  26. @classmethod
  27. def createUser(cls, username=None, password=None, dyn=False):
  28. if username is None:
  29. username = cls.generateUsername()
  30. user = User(email=username, dyn=dyn)
  31. user.plainPassword = cls.generateRandomString(size=12) if password is None else password
  32. user.set_password(user.plainPassword)
  33. user.save()
  34. return user
  35. """
  36. Creates a new domain and saves it to the database.
  37. The domain object is returned.
  38. """
  39. @classmethod
  40. def createDomain(cls, owner=None, dyn=False):
  41. if owner is None:
  42. owner = cls.createUser(username=None, dyn=False)
  43. if dyn:
  44. name = cls.generateDynDomainname()
  45. else:
  46. name = cls.generateDomainname()
  47. domain = Domain(name=name, owner=owner)
  48. cls.httpretty_for_pdns_domain_creation(name)
  49. domain.save()
  50. return domain
  51. @classmethod
  52. def httpretty_for_pdns_domain_creation(cls, name):
  53. httpretty.enable(allow_net_connect=False)
  54. httpretty.register_uri(httpretty.POST, settings.NSLORD_PDNS_API + '/zones')
  55. httpretty.register_uri(httpretty.GET,
  56. settings.NSLORD_PDNS_API + '/zones/' + name + '.',
  57. body='{"rrsets": []}',
  58. content_type="application/json")
  59. httpretty.register_uri(httpretty.GET,
  60. settings.NSLORD_PDNS_API + '/zones/' + name + './cryptokeys',
  61. body='[]',
  62. content_type="application/json")
  63. httpretty.register_uri(httpretty.PUT, settings.NSLORD_PDNS_API + '/zones/' + name + './notify',
  64. status=200)
  65. @classmethod
  66. def createToken(cls, user):
  67. token = Token.objects.create(user=user)
  68. token.save();
  69. return token.key;