From 34ececec5c03aa6ca7fe3b7e0b9c28fb7cf49d91 Mon Sep 17 00:00:00 2001
From: Yasin <mohammed-yasin.rahman@lip6.fr>
Date: Tue, 15 Jul 2014 15:53:16 +0200
Subject: [PATCH] SliceRequest: Slicename should only be letter, number and
 underscore + bugfix

---
 portal/actions.py                             |  2 +-
 portal/registrationview.py                    |  4 ++--
 portal/slicerequestview.py                    | 19 +++++++++++++++----
 .../onelab/onelab_slicerequest_view.html      |  6 +++---
 portal/templates/slice_request_email.html     | 10 +++++-----
 portal/templates/slice_request_email.txt      | 10 +++++-----
 6 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/portal/actions.py b/portal/actions.py
index baf4ccab..e2181260 100644
--- a/portal/actions.py
+++ b/portal/actions.py
@@ -402,7 +402,7 @@ def create_pending_slice(wsgi_request, request, email):
         slice_name      = request['slice_name'],
         user_hrn        = request['user_hrn'],
         authority_hrn   = request['authority_hrn'],
-        number_of_nodes = request['number_of_nodes'],
+        number_of_nodes = request['exp_url'],
         purpose         = request['purpose'],
     )
     s.save()
diff --git a/portal/registrationview.py b/portal/registrationview.py
index 6a8322d0..7967a916 100644
--- a/portal/registrationview.py
+++ b/portal/registrationview.py
@@ -89,9 +89,9 @@ class RegistrationView (FreeAccessView, ThemeView):
             # Validate input
             UserModel = get_user_model()
             if (re.search(r'^[\w+\s.@+-]+$', user_request['first_name']) == None):
-                errors.append('First Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
+                errors.append('First name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
             if (re.search(r'^[\w+\s.@+-]+$', user_request['last_name']) == None):
-                errors.append('Last Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
+                errors.append('Last name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
             # checking in django_db !!
             if PendingUser.objects.filter(email__iexact = user_request['email']):
                 errors.append('Email is pending for validation. Please provide a new email address.')
diff --git a/portal/slicerequestview.py b/portal/slicerequestview.py
index 8cd0af43..734ac9cd 100644
--- a/portal/slicerequestview.py
+++ b/portal/slicerequestview.py
@@ -14,7 +14,7 @@ from ui.topmenu                 import topmenu_items_live, the_user
 
 from myslice.theme import ThemeView
 
-import json, time
+import json, time, re
 
 class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
     template_name = 'slicerequest_view.html'
@@ -31,7 +31,9 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
         """
         """
         errors = []
-
+        slice_name =''
+        purpose=''
+        exp_url=''
         # Retrieve the list of authorities
         authorities_query = Query.get('authority').select('name', 'authority_hrn')
         authorities = execute_admin_query(wsgi_request, authorities_query)
@@ -105,11 +107,13 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
                 'authority_hrn'     : authority_hrn,
                 'organization'      : wsgi_request.POST.get('org_name', ''),
                 'slice_name'        : wsgi_request.POST.get('slice_name', ''),
-                'number_of_nodes'   : wsgi_request.POST.get('number_of_nodes', ''),
+                'exp_url'           : wsgi_request.POST.get('exp_url', ''),
                 'purpose'           : wsgi_request.POST.get('purpose', ''),
                 'current_site'      : current_site
             }
             
+            exp_url = slice_request['exp_url']
+           
             authority_hrn = slice_request['authority_hrn']
             if (authority_hrn is None or authority_hrn == ''):
                 errors.append('Please, select an authority')
@@ -117,7 +121,11 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
             # What kind of slice name is valid?
             slice_name = slice_request['slice_name']
             if (slice_name is None or slice_name == ''):
-                errors.append('Slice Name is mandatory')
+                errors.append('Slice name is mandatory')
+            
+            if (re.search(r'^[A-Za-z0-9_]*$', slice_name) == None):
+                errors.append('Slice name may contain only letters, numbers, and underscore.')
+
     
             purpose = slice_request['purpose']
             if (purpose is None or purpose == ''):
@@ -141,8 +149,11 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
             'username': wsgi_request.user.email,
             'topmenu_items': topmenu_items_live('Request a slice', page),
             'errors': errors,
+            'slice_name': slice_name,
+            'purpose': purpose,
             'email': user_email,
             'user_hrn': user_hrn,
+            'exp_url': exp_url,
             'pi': pi,
             'authority_name': authority_name,        
             'cc_myself': True,
diff --git a/portal/templates/onelab/onelab_slicerequest_view.html b/portal/templates/onelab/onelab_slicerequest_view.html
index 3c383460..82ccd16e 100644
--- a/portal/templates/onelab/onelab_slicerequest_view.html
+++ b/portal/templates/onelab/onelab_slicerequest_view.html
@@ -30,7 +30,7 @@
 			    <input type="email" class="form-control" id="email" style="width:300px" value="{{ email }}" readonly="readonly">
 			  </div>
 			  <div class="form-group">
-			    <input type="text" class="form-control" name="slice_name" id="slice_name" style="width:300px" placeholder="Slice Name" 
+			    <input type="text" class="form-control" name="slice_name" id="slice_name" style="width:300px" placeholder="Slice name" value="{{slice_name}}" 
 				title="Please enter a name for your slice"required="required">
 			  </div>
 			  <div class="form-group">
@@ -43,8 +43,8 @@
 				{%endif%}
 			  </div>
 			  <div class="form-group">
-			    <input type="text" class="form-control" name="number_of_nodes" id="number_of_nodes" style="width:300px" placeholder="Experiment URL (if one exists)"
-				title="Please provide the url of your experiment if you have one.">
+			    <input type="text" class="form-control" name="exp_url" id="exp_url" style="width:300px" placeholder="Experiment URL (if one exists)"
+				title="Please provide the url of your experiment if you have one." value="{{exp_url}}">
 			  </div>
 			  <div class="form-group">
 			  	<textarea id="purpose" name="purpose" class="form-control" rows="6" placeholder="Experiment Purpose" style="width:300px" 
diff --git a/portal/templates/slice_request_email.html b/portal/templates/slice_request_email.html
index 417a8bd6..8306c2bb 100644
--- a/portal/templates/slice_request_email.html
+++ b/portal/templates/slice_request_email.html
@@ -2,10 +2,10 @@
 <br>
 <h1>NEW SLICE REQUEST</h1>
 <br>
-<b>slice name      :</b> {{slice_name}}</br>
-<b>number of nodes :</b> {{number_of_nodes}}</br>
-<b>purpose         :</b> {{purpose}}</br>
-<b>organization	   :</b> {{organization}}
-<b>email           :</b> {{email}}</br>
+<b>Slice name      :</b> {{slice_name}}</br>
+<b>URL 			   :</b> {{exp_url}}</br>
+<b>Purpose         :</b> {{purpose}}</br>
+<b>Organization	   :</b> {{organization}}</br>
+<b>Email           :</b> {{email}}</br>
 <b>Portal url	   :</b> {{current_site}}</br> 
 
diff --git a/portal/templates/slice_request_email.txt b/portal/templates/slice_request_email.txt
index 6cd5a2db..c8a51b52 100644
--- a/portal/templates/slice_request_email.txt
+++ b/portal/templates/slice_request_email.txt
@@ -1,9 +1,9 @@
 NEW SLICE REQUEST
 
-slice name      : {{slice_name}}
-number of nodes : {{number_of_nodes}}
-purpose         : {{purpose}}
-email           : {{email}}
-organization	: {{organization}}
+Slice name      : {{slice_name}}
+URL 			: {{exp_url}}
+Purpose         : {{purpose}}
+Email           : {{email}}
+Organization	: {{organization}}
 Portal url		: {{current_site}}
 
-- 
2.47.0