X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fdashboard%2Fviews%2Ftenant.py;h=5a450335d031784bc6660eae75f80911fed5840e;hb=c3495b3d7f89cff13f3fbc892def3e3f2c26c664;hp=2048dd59d49ccd9dff0dc4f8845574d24a7b4914;hpb=866c5b39223e027f89b8e467b8afa35cb4d9c9b0;p=plstackapi.git diff --git a/planetstack/core/dashboard/views/tenant.py b/planetstack/core/dashboard/views/tenant.py index 2048dd5..5a45033 100644 --- a/planetstack/core/dashboard/views/tenant.py +++ b/planetstack/core/dashboard/views/tenant.py @@ -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 = """

Please authorize the following user on site """+site+""":

User: """+firstname+""" """+lastname+"""
Email: """+email+"""

-Check the checkbox next to Is Active property at this link 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.

""" +Check the checkbox next to Is Active property at this link 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.

""" 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" @@ -103,8 +122,8 @@ class TenantUpdateSlice(View): if(entry.name==sliceName): if (actionToDo == "update"): setattr(entry,'serviceClass',serviceClass) - setattr(entry,'imagePreference',imageName) - setattr(entry,'mountDataSets',dataSet) + setattr(entry,'image_preference',imageName) + setattr(entry,'mount_data_sets',dataSet) entry.save() break addOrModifyPorts(networkPorts,sliceName) @@ -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))