ask the PI to click save
[plstackapi.git] / planetstack / core / dashboard / views / tenant.py
index 2048dd5..5a45033 100644 (file)
@@ -4,6 +4,7 @@ import functools
 from django.contrib.auth.models import BaseUserManager
 from django.core import serializers
 from django.core.mail import EmailMultiAlternatives
+import json
 
 BLESSED_DEPLOYMENTS = ["US-MaxPlanck", "US-GeorgiaTech", "US-Princeton", "US-Washington", "US-Stanford"]
 
@@ -13,11 +14,29 @@ class RequestAccessView(View):
        firstname = request.POST.get("firstname", "0")
        lastname = request.POST.get("lastname", "0")
        site = request.POST.get("site","0")
+        # see if it already exists
+        user=User.objects.filter(email=BaseUserManager.normalize_email(email))
+        if (user):
+             user = user[0]
+             if user.is_active:
+                 # force a new email to be sent
+                 user.is_registering=True
+                 user.save()
+                 return HttpResponse(json.dumps({"error": "already_approved"}), content_type='application/javascript')
+             else:
+                 return HttpResponse(json.dumps({"error": "already_pending"}), content_type='application/javascript')
+
+        user=User.deleted_objects.filter(email=BaseUserManager.normalize_email(email))
+        if (user):
+            return HttpResponse(json.dumps({"error": "is_deleted"}), content_type='application/javascript')
+
        user = User(
             email=BaseUserManager.normalize_email(email),
             firstname=firstname,
             lastname=lastname,
-           is_active=False
+           is_active=False,
+            is_admin=False,
+            is_registering=True
         )
         user.save()
        user.site=Site.objects.get(name=site)
@@ -29,7 +48,7 @@ class RequestAccessView(View):
                subject, from_email, to = 'Authorize OpenCloud User Account', 'support@opencloud.us', str(sp.user)
                text_content = 'This is an important message.'
                html_content = """<p>Please authorize the following user on site """+site+""": <br><br>User: """+firstname+""" """+lastname+"""<br>Email: """+email+"""<br><br>
-Check the checkbox next to Is Active property at <a href="""+userUrl+"""> this link</a> to authorize the user. If you do not recognize this individual, or otherwise do not want to approve this account, please ignore this email. If you do not approve this request in 48 hours, the account will automatically be deleted.</p>"""
+Check the checkbox next to Is Active property at <a href="""+userUrl+"""> this link</a> to authorize the user, and then click the Save button. If you do not recognize this individual, or otherwise do not want to approve this account, please ignore this email. If you do not approve this request in 48 hours, the account will automatically be deleted.</p>"""
                msg = EmailMultiAlternatives(subject,text_content, from_email, [to])
                msg.attach_alternative(html_content, "text/html")
                msg.send()
@@ -52,7 +71,7 @@ class TenantCreateSlice(View):
            serviceClass = ServiceClass.objects.get(name=serviceClass)
            site = request.user.site
            image = Image.objects.get(name=imageName)
-           newSlice = Slice(name=sliceName,serviceClass=serviceClass,site=site,imagePreference=image,mountDataSets=mountDataSets)
+           newSlice = Slice(name=sliceName,serviceClass=serviceClass,site=site,image_preference=image,mount_data_sets=mountDataSets)
            newSlice.save()
           privateTemplate="Private"
           publicTemplate="Public shared IPv4"\r
@@ -103,8 +122,8 @@ class TenantUpdateSlice(View):
                 if(entry.name==sliceName):\r
                          if (actionToDo == "update"):\r
                                 setattr(entry,'serviceClass',serviceClass)\r
-                                setattr(entry,'imagePreference',imageName)\r
-                                setattr(entry,'mountDataSets',dataSet)\r
+                                setattr(entry,'image_preference',imageName)\r
+                                setattr(entry,'mount_data_sets',dataSet)\r
                                 entry.save()\r
                                 break\r
        addOrModifyPorts(networkPorts,sliceName)\r
@@ -179,8 +198,8 @@ def getTenantInfo(user):
            sliceName = Slice.objects.get(id=entry.id).name
            slice = Slice.objects.get(name=Slice.objects.get(id=entry.id).name)
            sliceServiceClass = entry.serviceClass.name
-           preferredImage =  entry.imagePreference
-           #sliceDataSet = entry.mountDataSets
+           preferredImage =  entry.image_preference
+           #sliceDataSet = entry.mount_data_sets
            sliceNetwork = {}
            numSliver = 0
            sliceImage=""
@@ -188,7 +207,7 @@ def getTenantInfo(user):
            sliceNode = {}
            sliceInstance= {}
            #createPrivateVolume(user,sliceName)
-           available_sites = get_available_sites()
+           available_sites = getAvailableSites()
            for sliver in slice.slivers.all():
                 if sliver.node.site.name in available_sites:
                     sliceSite[sliver.node.site.name] = sliceSite.get(sliver.node.site.name,0) + 1
@@ -231,7 +250,7 @@ def getImageInfo(user):
     length = len(BLESSED_DEPLOYMENTS)
     for deployment in Deployment.objects.all():
         if deployment.name in BLESSED_DEPLOYMENTS:
-            for x in deployment.imagedeployments_set.all():
+            for x in deployment.imagedeployments.all():
                 tempImageInfo.append(x.image.name)
     temp = {}
     for i in set(tempImageInfo):
@@ -309,7 +328,7 @@ def getAvailableSites():
     available_sites = []
     for deployment in Deployment.objects.all():
         if deployment.name in BLESSED_DEPLOYMENTS:
-            for x in deployment.sitedeployments_set.all():
+            for x in deployment.sitedeployments.all():
                if x.site.nodes.all():
                        available_sites.append(x.site.name)
     return list(set(available_sites))
@@ -416,7 +435,7 @@ def tenant_pick_sites(user, user_ip=None, slice=None, count=None):
         print "exception in geo code"
         traceback.print_exc()
 
-    available_sites = get_available_sites()
+    available_sites = getAvailableSites()
     sites = Site.objects.all()
     sites = [x for x in sites if x.name in available_sites]
     sites = sorted(sites, key=functools.partial(siteSortKey, slice=slice, count=count, lat=lat, lon=lon))