utils.py 4.9 KB

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