import CodeError in validation.py, since it uses it
[invirt/packages/invirt-web.git] / code / validation.py
index 2f64f9a..5f2a3ff 100644 (file)
@@ -7,10 +7,10 @@ import string
 import dns.resolver
 from invirt.database import Machine, NIC, Type, Disk, CDROM, Autoinstall
 from invirt.config import structs as config
 import dns.resolver
 from invirt.database import Machine, NIC, Type, Disk, CDROM, Autoinstall
 from invirt.config import structs as config
-from webcommon import InvalidInput
+from invirt.common import InvalidInput, CodeError
 
 MAX_MEMORY_TOTAL = 512
 
 MAX_MEMORY_TOTAL = 512
-MAX_MEMORY_SINGLE = 256
+MAX_MEMORY_SINGLE = 512
 MIN_MEMORY_SINGLE = 16
 MAX_DISK_TOTAL = 50
 MAX_DISK_SINGLE = 50
 MIN_MEMORY_SINGLE = 16
 MAX_DISK_TOTAL = 50
 MAX_DISK_SINGLE = 50
@@ -44,9 +44,7 @@ class Validate:
         owner = testOwner(username, owner, machine)
         if owner is not None:
             self.owner = owner
         owner = testOwner(username, owner, machine)
         if owner is not None:
             self.owner = owner
-        admin = testAdmin(username, admin, machine)
-        if admin is not None:
-            self.admin = admin
+        self.admin = testAdmin(username, admin, machine)
         contact = testContact(username, contact, machine)
         if contact is not None:
             self.contact = contact
         contact = testContact(username, contact, machine)
         if contact is not None:
             self.contact = contact
@@ -68,6 +66,8 @@ class Validate:
                 raise CodeError("Invalid cdrom type '%s'" % cdrom)
             self.cdrom = cdrom
         if autoinstall is not None:
                 raise CodeError("Invalid cdrom type '%s'" % cdrom)
             self.cdrom = cdrom
         if autoinstall is not None:
+            #raise InvalidInput('autoinstall', 'install',
+            #                   "The autoinstaller has been temporarily disabled")
             self.autoinstall = Autoinstall.query().get(autoinstall)
 
 
             self.autoinstall = Autoinstall.query().get(autoinstall)
 
 
@@ -218,7 +218,7 @@ def testAdmin(user, admin, machine):
     if admin is None:
         return None
     if machine is not None and admin == machine.administrator:
     if admin is None:
         return None
     if machine is not None and admin == machine.administrator:
-        return None
+        return admin
     if admin == user:
         return admin
     if ':' not in admin:
     if admin == user:
         return admin
     if ':' not in admin:
@@ -241,8 +241,6 @@ def testOwner(user, owner, machine=None):
 
     If machine is None, this is the owner of a new machine.
     """
 
     If machine is None, this is the owner of a new machine.
     """
-    if owner == user:
-        return owner
     if machine is not None and owner in (machine.owner, None):
         return machine.owner
     if owner is None:
     if machine is not None and owner in (machine.owner, None):
         return machine.owner
     if owner is None:
@@ -272,8 +270,20 @@ def testName(user, name, machine=None):
     if machine is not None and name == machine.name:
         return None
     try:
     if machine is not None and name == machine.name:
         return None
     try:
-        f = open('/tmp/log', 'a')
-        dns.resolver.query('%s.%s.' % (name, config.dns.domains[0]), 'A')
+        hostname = '%s.%s.' % (name, config.dns.domains[0])
+        resolver = dns.resolver.Resolver()
+        resolver.nameservers = ['127.0.0.1']
+        try:
+            resolver.query(hostname, 'A')
+        except dns.resolver.NoAnswer, e:
+            # If we can get the TXT record, then we can verify it's
+            # reserved. If this lookup fails, let it bubble up and be
+            # dealt with
+            answer = resolver.query(hostname, 'TXT')
+            txt = answer[0].strings[0]
+            if txt.startswith('reserved'):
+                raise InvalidInput('name', name, 'The name you have requested has been %s. For more information, contact us at %s' % (txt, config.dns.contact))
+
         # If the hostname didn't exist, it would have thrown an
         # exception by now - error out
         raise InvalidInput('name', name, 'Name is already taken.')
         # If the hostname didn't exist, it would have thrown an
         # exception by now - error out
         raise InvalidInput('name', name, 'Name is already taken.')