utils.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import random
  2. import string
  3. from rest_framework.authtoken.models import Token
  4. from desecapi.models import Domain, User
  5. class utils(object):
  6. @classmethod
  7. def generateRandomIPv4Address(cls):
  8. return ".".join(map(str, (random.randint(0, 255) for _ in range(4))))
  9. @classmethod
  10. def generateRandomString(cls, size=6, chars=string.ascii_lowercase + string.digits):
  11. return ''.join(random.choice(chars) for _ in range(size))
  12. @classmethod
  13. def generateUsername(cls):
  14. return cls.generateRandomString() + '@' + cls.generateRandomString() + 'desec.io'
  15. @classmethod
  16. def generateDomainname(cls):
  17. return random.choice(string.ascii_lowercase) + cls.generateRandomString() + '.de'
  18. @classmethod
  19. def generateDynDomainname(cls):
  20. return random.choice(string.ascii_lowercase) + cls.generateRandomString() + '.dedyn.io'
  21. """
  22. Creates a new user and saves it to the database.
  23. The user object is returned.
  24. """
  25. @classmethod
  26. def createUser(cls, username=None, password=None, dyn=False):
  27. if username is None:
  28. username = cls.generateUsername()
  29. user = User(email=username, dyn=dyn)
  30. user.plainPassword = cls.generateRandomString(size=12) if password is None else password
  31. user.set_password(user.plainPassword)
  32. user.save()
  33. return user
  34. """
  35. Creates a new domain and saves it to the database.
  36. The domain object is returned.
  37. """
  38. @classmethod
  39. def createDomain(cls, owner=None, dyn=False):
  40. if owner is None:
  41. owner = cls.createUser(username=None, dyn=False)
  42. if dyn:
  43. name = cls.generateDynDomainname()
  44. else:
  45. name = cls.generateDomainname()
  46. domain = Domain(name=name, owner=owner)
  47. domain.save()
  48. return domain
  49. @classmethod
  50. def createToken(cls, user):
  51. token = Token.objects.create(user=user)
  52. token.save();
  53. return token.key;
  54. """
  55. Returns a certificate for (www.)desec.io, signed by startssl.com,
  56. valid until 2015-11-15, serial number 0x1454C4 = 1332420 (base 10).
  57. SHA1 fingerprint is 8D:2E:F1:35:05:08:78:D3:FD:09:30:8A:A4:9C:D6:90:3E:04:8F:56
  58. SHA256 fingerprint is 8E:F3:F2:83:36:1C:F8:EC:8D:ED:4E:B8:05:82:4F:06:7D:47:86:05:B2:79:97:AB:FE:A7:64:60:4C:62:9D:6D
  59. """
  60. @classmethod
  61. def getDeSecCertificate(self):
  62. cert = ('-----BEGIN CERTIFICATE-----\n'
  63. 'MIIGLzCCBRegAwIBAgIDFFTEMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYDVQQGEwJJ\n'
  64. 'TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0\n'
  65. 'YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg\n'
  66. 'MSBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTQxMTEzMjAzNDI1\n'
  67. 'WhcNMTUxMTE1MDUwMzU2WjBIMQswCQYDVQQGEwJVUzEVMBMGA1UEAxMMd3d3LmRl\n'
  68. 'c2VjLmlvMSIwIAYJKoZIhvcNAQkBFhNwb3N0bWFzdGVyQGRlc2VjLmlvMIIBIjAN\n'
  69. 'BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp+h4uKeIMvr0jpGc8DP55q3b2vWa\n'
  70. 'wNFeneQgVyeO+b4MDRduOrlOrsid7da/qJxxTbbyI94npjWvu5GpayIK3xC3qpUm\n'
  71. 'uVSo2CmMlqpWo62cURZe9NK8eXUmEjbStOtgFIZDOADHxe0RgEr+i7AWLQvIPgHi\n'
  72. '8P1N2zd5ujBfrBMd8sXsATXeBc4Ft4wMNOLotpL9uUxnMJiMUHFU+TeYcl2g+n0S\n'
  73. 'DfNCVq6e0Bs5uIbrPr+RJMkHMVDBaEwC6X83bIRARTh+YwhI1ARThyR7/vBnx/9a\n'
  74. '/YD4B2SxomBDAx7iRF6XZ8QjHhl8Xo5bkPAa22BcRIukh4ByAaO0a9lMewIDAQAB\n'
  75. 'o4IC2zCCAtcwCQYDVR0TBAIwADALBgNVHQ8EBAMCA6gwEwYDVR0lBAwwCgYIKwYB\n'
  76. 'BQUHAwEwHQYDVR0OBBYEFBV7yHCr6j2KD+E4LIOcBMYuFMx1MB8GA1UdIwQYMBaA\n'
  77. 'FOtCNNCYsKuf9BtrCPfMZC7vDixFMCEGA1UdEQQaMBiCDHd3dy5kZXNlYy5pb4II\n'
  78. 'ZGVzZWMuaW8wggFWBgNVHSAEggFNMIIBSTAIBgZngQwBAgEwggE7BgsrBgEEAYG1\n'
  79. 'NwECAzCCASowLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Bv\n'
  80. 'bGljeS5wZGYwgfcGCCsGAQUFBwICMIHqMCcWIFN0YXJ0Q29tIENlcnRpZmljYXRp\n'
  81. 'b24gQXV0aG9yaXR5MAMCAQEagb5UaGlzIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQg\n'
  82. 'YWNjb3JkaW5nIHRvIHRoZSBDbGFzcyAxIFZhbGlkYXRpb24gcmVxdWlyZW1lbnRz\n'
  83. 'IG9mIHRoZSBTdGFydENvbSBDQSBwb2xpY3ksIHJlbGlhbmNlIG9ubHkgZm9yIHRo\n'
  84. 'ZSBpbnRlbmRlZCBwdXJwb3NlIGluIGNvbXBsaWFuY2Ugb2YgdGhlIHJlbHlpbmcg\n'
  85. 'cGFydHkgb2JsaWdhdGlvbnMuMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9jcmwu\n'
  86. 'c3RhcnRzc2wuY29tL2NydDEtY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5Bggr\n'
  87. 'BgEFBQcwAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczEvc2Vy\n'
  88. 'dmVyL2NhMEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0\n'
  89. 'cy9zdWIuY2xhc3MxLnNlcnZlci5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3\n'
  90. 'dy5zdGFydHNzbC5jb20vMA0GCSqGSIb3DQEBCwUAA4IBAQBSI82kiD0St0MnhQok\n'
  91. 'NOTvYrF7kyMVEaVoJC08VocwBejaDVRUhazv1YBYy7WwdoQ+oYYZB37Vaa83xF3B\n'
  92. 'aY59NR4UN8cPFjevt/Z9DDuslN1pWaBu/W+W2qn2t3suRuT+l4n+zEo9SwIBhn0x\n'
  93. 'TRTDoj+kfvx+1CYIcagRMvB5TBUWs61OtFaYCp410axzZBo97P9DMsRqw0maFYGv\n'
  94. 's93Bi+fJGHndo+E4Qei3MRadDZKjQnvErsmrFzlVSqHcPwWtUqSCVF5BXP9YsRZn\n'
  95. 'hvehPEY+gPmclXFMi1FY3Z1gdhN4B1DjXfhlmKxC3GrM7CoKFjOutWWwZOIZGKdL\n'
  96. 'g7Vp\n'
  97. '-----END CERTIFICATE-----\n')
  98. return cert.__str__()