Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
authorYasin <root@lamia.ipv6.lip6.fr>
Wed, 4 Jun 2014 16:20:14 +0000 (11:20 -0500)
committerYasin <root@lamia.ipv6.lip6.fr>
Wed, 4 Jun 2014 16:20:14 +0000 (11:20 -0500)
portal/joinview.py
portal/registrationview.py
portal/templates/join_view.html
portal/templates/registration_view.html

index 58bf6ba..65d8351 100644 (file)
@@ -89,15 +89,15 @@ class JoinView (FreeAccessView, ThemeView):
                 errors.append('First Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
             if (re.search(r'^[\w+\s.@+-]+$', reg_lname) == None):
                 errors.append('Last Name may contain only letters, numbers, spaces and @/./+/-/_ characters.')
-            if (re.search(r'^\w+$', reg_site_authority) == None):
-                errors.append('Site Authority may contain only letters or numbers.')
+            #if (re.search(r'^\w+$', reg_site_authority) == None):
+            #    errors.append('Site Authority may contain only letters or numbers.')
             # checking in django_db !!
             if PendingUser.objects.filter(email__iexact=reg_email):
                 errors.append('Email is pending for validation. Please provide a new email address.')
-            if PendingAuthority.objects.filter(site_authority__iexact=reg_auth):
-                errors.append('This site is pending for validation.')
-            if PendingAuthority.objects.filter(site_name__iexact=reg_site_name):
+            if PendingAuthority.objects.filter(site_abbreviated_name__iexact=reg_site_abbreviated_name):
                 errors.append('This site is pending for validation.')
+            #if PendingAuthority.objects.filter(site_name__iexact=reg_site_name):
+            #    errors.append('This site is pending for validation.')
 
             if UserModel._default_manager.filter(email__iexact=reg_email): 
                 errors.append('This email is not usable. Please contact the administrator or try with another email.')
@@ -117,12 +117,13 @@ class JoinView (FreeAccessView, ThemeView):
             account_config = '{"user_public_key":'+ public_key + ', "user_private_key":'+ private_key + ', "user_hrn":"'+ user_hrn + '"}'
             auth_type = 'managed'
             public_key = public_key.replace('"', '');
+            private_key = private_key.replace('"', '');
 
             if not errors:
                 reg_password = request.POST['pi_password']
                 a = PendingAuthority(
                     site_name             = reg_site_name,             
-                    site_authority        = reg_root_authority_hrn + '.' + reg_site_authority
+                    site_authority        = 'onelab.' + reg_site_abbreviated_name
                     site_abbreviated_name = reg_site_abbreviated_name, 
                     site_url              = reg_site_url,
                     site_latitude         = reg_site_latitude, 
@@ -145,8 +146,12 @@ class JoinView (FreeAccessView, ThemeView):
                     authority_hrn = reg_auth,
                     email         = reg_email, 
                     password      = reg_password,
-                    keypair       = account_config,
+                    public_key    = public_key,
+                    private_key   = private_key,
+                    user_hrn      = user_hrn,  
                     pi            = reg_auth,
+                    email_hash    = '',
+                    status        = 'True',
                 )
                 b.save()
 
@@ -154,13 +159,13 @@ class JoinView (FreeAccessView, ThemeView):
                 user = User.objects.create_user(reg_email, reg_email, reg_password)
 
                 #creating user to manifold local:user
-                user_config = '{"firstname":"'+ reg_fname + '", "lastname":"'+ reg_lname + '", "authority":"'+ reg_auth + '"}'
-                user_params = {'email': reg_email, 'password': reg_password, 'config': user_config, 'status': 1}
-                manifold_add_user(request,user_params)
+                #user_config = '{"first_name":"'+ reg_fname + '", "last_name":"'+ reg_lname + '", "authority_hrn":"'+ reg_auth + '"}'
+                #user_params = {'email': reg_email, 'password': reg_password, 'config': user_config, 'status': 1}
+                #manifold_add_user(request,user_params)
                 #creating local:account in manifold
-                user_id = user_detail['user_id']+1 # the user_id for the newly created user in local:user
-                account_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': account_config}
-                manifold_add_account(request,account_params)
+                #user_id = user_detail['user_id']+1 # the user_id for the newly created user in local:user
+                #account_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': account_config}
+                #manifold_add_account(request,account_params)
 
                 # Send email
                 try: 
index 88bd5ae..f731447 100644 (file)
@@ -57,7 +57,9 @@ class RegistrationView (FreeAccessView, ThemeView):
             current_site = current_site.domain
 
             post_email = wsgi_request.POST.get('email','').lower()
-            email_hash = md5(post_email).digest().encode('base64')[:-1]
+            salt = randint(1,100000)
+            email_hash = md5(str(salt)+post_email).hexdigest()
+            #email_hash = md5(post_email).digest().encode('base64')[:-1]
             user_request = {
                 'first_name'    : wsgi_request.POST.get('firstname',     ''),
                 'last_name'     : wsgi_request.POST.get('lastname',      ''),
index 8576d1a..fecc7fb 100644 (file)
@@ -5,19 +5,22 @@
 
 <div class="row">
        <div class="col-md-12">
-       <h1><img src="{{ STATIC_URL }}icons/testbed-xs.png" alt="Join Federation" /> Join the OneLab Federation</h1>
+       <h1><img src="{{ STATIC_URL }}icons/testbed-xs.png" alt="Join Federation" /> Add organization</h1>
        </div>
 </div>
+<div class="row">
+       <div class="col-md-12">
+               <h3>Questions? <a href="/portal/contact" >Contact us</a></h3>
+       </div>
+</div>
+
 <div class="row">
        <div class="col-md-12">
        <h3>
-       OneLab welcomes companies, universities, and research laboratories to join the OneLab Federation of Testbeds. <br>
+       Please provide information about your organization and designate a manager (you or another person) from your organization. <br>
        </h3>
        <p>
-       We are supported by the European Commision through its 7th Framework Programs and FIRE initiative (Future Internet Research and Experimentation), as well as by other national and international funding initiatives.
-       </p>
-       <p>
-       If you wish to become a new member of OneLab Federation, you should first consult the Membership Agreement.
+       OneLab is open to enterprise, to scientific researchers, and to educators. We grant manager access to people in positions of responsibility (e.g., executives, professors, senior researchers), and delegate to these managers the right to grant standard user access to other people in their organizations.
        </p>
        </div>
 </div>
 <div class="row">
   
   {% csrf_token %}
-  <div class="col-md-6">
-       <h3>Site Information</h3>
+  <div class="col-md-4">
+       <h3>Organization</h3>
        
        <div class="form-group">
-               <label for="site_name">Site name:</label>
-       <input type="text" id="site_name" name="site_name" value="{{ site_name }}" maxlength="40" class="form-control" required>
+       <input type="text" id="site_name" name="site_name" value="{{ site_name }}"  style="width:200px" placeholder="Name of organization"maxlength="40" class="form-control" required>
     </div>
-       <div class="form-group">
+       <!--<div class="form-group">
        <label for="root_authority_hrn">Root authority:</label>
            <select id="root_authority_hrn" name="root_authority_hrn" class="form-control" required>
                   {% if root_authorities %}
                   <option>{{ root_auth.authority_hrn }}</option>
                        {% endfor %}
                   {% endif %}
-               </select>
-<!--
+               </select> 
                <div class="ui-widget">
                    <input id="root_authority_hrn" name="root_authority_hrn" class="form-control" value="{{ root_authority_hrn }}" required>
                </div>
--->
-       </div>
+
+       </div> -->
        <div class="form-group">
-               <label for="site_authority">Site authority:</label>
-               <input type="text" id="site_authority" name="site_authority" value="{{ site_authority }}" maxlength="16" class="form-control" required>
-    </div>
+       <input type="text" id="address_city" name="address_city" value="{{ address_city }}" style="width:200px" placeholder="City" maxlength="20" class="form-control">
+       </div>
+       <div class="form-group">   
+       <input type="text" id="address_country" name="address_country" value="{{ address_country }}" style="width:200px" placeholder="Country" maxlength="20" class="form-control">
+       </div>
+
        <div class="form-group">  
-        <label for="site_abbreviated_name">Abbreviated name:</label>
-        <input type="text" id="site_abbreviated_name" name="site_abbreviated_name" value="{{ site_abbreviated_name }}" maxlength="40" class="form-control" required>
+        <input type="text" id="site_abbreviated_name" name="site_abbreviated_name" value="{{ site_abbreviated_name }}" style="width:200px" 
+               title="Maximum eight characters, joined, all lower case. Example: 'upmc' for Université Pierre et Marie Curie. This will be used by the system as an identifier for the organization." placeholder="Short name" maxlength="8" class="form-control" required>
     </div>
        <div class="form-group">  
-        <label for="site_url">URL:</label>
-        <input type="text" id="site_url" name="site_url" value="{{ site_url }}" maxlength="128" class="form-control" required>
-    </div>
-       <div class="form-group"> 
-        <label for="site_latitude">Latitude:</label>
-        <input type="text" id="site_latitude" name="site_latitude" value="{{ site_latitude }}" maxlength="10" class="form-control" required>
-    </div>
-       <div class="form-group"> 
-        <label for="site_longitude">Longitude:</label>
-        <input type="text" id="site_longitude" name="site_longitude" value="{{ site_longitude }}" maxlength="10" class="form-control" required>
+        <input type="text" id="site_url" name="site_url" value="{{ site_url }}" style="width:200px" placeholder="http://" maxlength="128" class="form-control" required>
     </div>
   </div>
   
-  <div class="col-md-6">
-       <h3>Postal address</h3>
+  <div class="col-md-4">
+       <h3>Manager</h3>
 
        <div class="form-group">
-               <label class="" for="address_line1">Address: </label>
-        <input type="text" id="address_line1" name="address_line1" value="{{ address_line1 }}" maxlength="40" class="form-control">
-    </div>
-       <div class="form-group"> 
-        <label class="" for="address_line2">Address (2): </label>
-        <input type="text" id="address_line2" name="address_line2" value="{{ address_line2 }}" maxlength="40" class="form-control">
-    </div>
-       <div class="form-group"> 
-        <label class="" for="address_line3">Address (3): </label>
-        <input type="text" id="address_line3" name="address_line3" value="{{ address_line3 }}" maxlength="40" class="form-control">
-    </div>
-       <div class="form-group"> 
-        <label class="" for="address_city">City: </label>
-        <input type="text" id="address_city" name="address_city" value="{{ address_city }}" maxlength="20" class="form-control">
-    </div>
-       <div class="form-group"> 
-        <label class="" for="address_postalcode">Postal Code: </label>
-        <input type="text" id="address_postalcode" name="address_postalcode" value="{{ address_postalcode }}" size="10" maxlength="10" class="form-control">
-    </div>
-       <div class="form-group">
-        <label class="" for="address_state">State: </label>
-        <input type="text" id="address_state" name="address_state" value="{{ address_state }}" maxlength="20" class="form-control">
-    </div>
-       <div class="form-group">   
-        <label class="" for="address_country">Country: </label>
-        <input type="text" id="address_country" name="address_country" value="{{ address_country }}" maxlength="20" class="form-control">
-    </div>
-       
-  </div>
-</div>
-
-<div class="row"> 
-  
-  <div class="col-md-6">
-       
-       <h3>Principal Investigator Information</h3>
-
-       <div class="form-group">
-               <label for="pi_first_name">PI First Name</label>
-       <input type="text" id="pi_first_name" name="pi_first_name" value="{{ pi_first_name }}" maxlength="20" class="form-control" required>
+       <input type="text" id="pi_first_name" name="pi_first_name" value="{{ pi_first_name }}" style="width:200px" placeholder="First name" maxlength="20" class="form-control" required>
     </div>
        <div class="form-group">    
-       <label for="pi_last_name">PI Last Name:</label>
-               <input type="text" id="pi_last_name" name="pi_last_name" value="{{ pi_last_name }}" maxlength="20" class="form-control" required>
+               <input type="text" id="pi_last_name" name="pi_last_name" value="{{ pi_last_name }}" style="width:200px" placeholder="Last name" maxlength="20" class="form-control" required>
 <!--
         <tr>
           <th><label class="" for="pi_title">PI Title: </label></th>
 -->
        </div>
        <div class="form-group">
-               <label for="pi_phone">PI Phone:</label>
-       <input type="text" id="pi_phone" name="pi_phone" value="{{ pi_phone }}" maxlength="20" class="form-control" required>
-    </div>
+       <input type="email" id="pi_email" name="pi_email" value="{{ pi_email }}" style="width:200px" 
+               title="We may e-mail the manager as part of the validation process, and in case any issues arise with the use of the system."
+               placeholder="Email" maxlength="40" class="form-control" required>
+       </div>
        <div class="form-group">
-       <label for="pi_email">PI email:</label>
-       <input type="text" id="pi_email" name="pi_email" value="{{ pi_email }}" maxlength="40" class="form-control" required>
+       <input type="tel" id="pi_phone" name="pi_phone" value="{{ pi_phone }}" 
+               title="We may phone the manager as part of the validation process, and in case any issues arise with the use of the system."
+               style="width:200px" placeholder="Phone number"  maxlength="20" class="form-control" required>
     </div>
        <div class="form-group">
-       <label for="pi_password">PI password:</label>
-       <input type="password" id="pi_password" name="pi_password" value="" maxlength="20" class="form-control" required>
+               <input type="password"  id="password" name="pi_password"   class="form-control" style="width:200px" minlength="4" value="{{ password }}" placeholder="Password" required/>
        </div>
-       
+       <div class="form-group">
+       <input type="password"  id="confirmpassword" name="confirmpassword" style="width:200px"  minlength="4" class="form-control" value="" placeholder="Confirm Password" required/>
        </div>
-       <div class="col-md-6">
-               <h3>Site Registration Information</h3>
-       <p>
-               A membership agreement document will be sent to your email address as a PDF file.
-       </p><p>
-               Please print and sign a copy of the agreement and send it to:
-       </p><p>
-       Ciro Scognamiglio<br>
-       UPMC - LIP6<br>
-       Campus Jussieu<br>
-       Couloir 26-00, bureau 102<br>
-       Boite courrier 169<br>
-       4 place Jussieu<br>
-       F-75252 PARIS cedex 05 - FRANCE<br>
-       </p><p>
-       Once your membership has been processed we will contact you to welcome you as a member.
-       </p><p>
-       If you have any questions about membership, contact the <a href="/portal/contact" >OneLab Support team</a>.
-       </p>
+
        </div>
 </div>
-<div class="row">
-       <div class="col-md-12" style="text-align:center;">
-               <button type="submit" class="btn btn-default">Send registration form</button>
+       <div class="form-group" >
+               <p></p>
+               <button type="submit" class="btn btn-primary">Submit</button>
        </div>
-</div>
 </form>
 <script>
 /*
index 5929f16..1950b6c 100644 (file)
@@ -3,14 +3,11 @@
 {% block content %}        
 
 <div class="row">
-       <div class="col-md-12">
-       <h1><img src="{{ STATIC_URL }}icons/user-xs.png" alt="User Registration" />Experimenter registration</h1>
-       </div>
+       <h1><img src="{{ STATIC_URL }}icons/user-xs.png" alt="User Registration" />User sign-up</h1>
 </div>
 <div class="row">
-       <div class="col-md-12">
-               <h3>For First Line Support please <a href="/portal/contact" >Contact Support</a></h3>
-       </div>
+               <p></p>
+               <p><strong>Questions? <a href="/portal/contact" >Contact us.</a></strong></p>
 </div>
 {% if errors %}
 <ul>
 </ul>
 {% endif %}
    
-<div class="row">
-       <div class="col-md-2"></div>
-       <div class="col-md-8">
-       <form class="cmxform form-horizontal" id="registrationForm" method="post" enctype="multipart/form-data" role="form">
-    {% csrf_token %}
-    <div class="form-group">
-       <label for="firstname" class="control-label">First Name</label>
-               <input type="text" name="firstname" class="form-control" minlength="2" value="{{ firstname }}" placeholder="First Name" required />
-    </div>
+<form class="cmxform form-horizontal" id="registrationForm" method="post" enctype="multipart/form-data" role="form">
+{% csrf_token %}
+       <div class="form-group">
+               <label for="authority_hrn" class="control-label">Organization</label>
+               <p></p>
+               <input id="authority_hrn" name="authority_hrn" class="form-control" style="width:530px" value="{{ authority_hrn }}" required>
+               <p class="help-block">Choose your organization (company/university) from the list that apears when you<br> click in the field above and start to type.
+                Use the arrow keys to scroll through the list;<br>type part of the name to narrow down the list. If it is not in the list, 
+               <a href="/portal/join">please add it.</a></p>
+       </div>
+
+       <div class="row">
+       <div class="col-md-4">
+
     <div class="form-group">
-       <label for="lastname" class="control-label">Last Name</label>
-               <input type="text" name="lastname" size="25" class="form-control" minlength="2" value="{{ lastname }}" placeholder="Last Name" required />
+               <label for="firstname" class="control-label">Personal information</label>
+               <p></p>
+               <input type="text" name="firstname" class="form-control" style="width:200px" minlength="2" value="{{ first_name }}" placeholder="First name" required />
     </div>
     <div class="form-group">
-      <label for="authority_hrn" class="control-label">Authority</label>
-      <input id="authority_hrn" name="authority_hrn" class="form-control" value="{{ authority_hrn }}" required>
-      <p class="help-block">An authority responsible for vetting your account</p>
+               <input type="text" name="lastname" size="25" class="form-control" style="width:200px" minlength="2" value="{{ last_name }}" placeholder="Last name" required />
     </div>
+       <div class="form-group">
+       <input type="email" name="email" size="25"  class="form-control" style="width:200px" value="{{ email }}" 
+               title="Your e-mail address will be your identifier for logging in. We contact you to verify your account and then, occasionally, for important issues."
+               placeholder="Email" required/>
+       </div>
+</div> 
 
        <!-- LOGIN
        TODO: Login should be suggested from user email or first/last name, and
       <div class="col-xs-6"><p class="form-hint">Enter your login</p></div>
     </div>
        -->
-
-    <div class="form-group">
-       <label for="email" class="control-label">Email</label>
-       <input type="email" name="email" size="25"  class="form-control" value="{{ email }}" required/>
-    </div>
+<div class="col-md-4">
     <div class="form-group">
-      <label for="password" class="control-label">Password</label>
-      <input type="password"  id="password" name="password"   class="form-control" minlength="4" value="{{ password }}" required/>
+      <label for="password" class="control-label">Authentication</label>
+         <p></p>       
+      <input type="password"  id="password" name="password"   class="form-control" style="width:200px" minlength="4" value="{{ password }}" 
+               title="Your password allows you to log in to this portal."
+               placeholder="Password" required/>
     </div>
     <div class="form-group">
-       <label for="password" class="control-label">Confirm Password</label>
-               <input type="password"  id="confirmpassword" name="confirmpassword"   minlength="4" class="form-control" value="" placeholder="Confirm Password" required/>
+               <input type="password"  id="confirmpassword" name="confirmpassword" style="width:200px"  minlength="4" class="form-control" value="" 
+                       placeholder="Confirm password" required/>
     </div>
     <div class="form-group">
-       <label for="question" class="control-label">My Keys</label>
-               <select name="question" class="form-control" id="key-policy" required>        
-                       <option value="generate">Generate key pairs for me </option>
-                       <option value="upload">Upload my public key </option>
+       <!--<label for="question" class="control-label">Keys</label> -->
+               <select name="question" class="form-control" style="width:200px" id="key-policy" 
+                       title="Your public/private key pair allows you to access the testbeds." required>        
+                       <option value="generate">Generate my keys for me (recommended)</option>
+                       <option value="upload">Upload my public key (advanced users only)</option>
                </select>
-       <p class="help-block">Genkey: Account Delegation Automatic (Recommended)</p>
     </div>
     <div class="form-group" style="display:none;" id="upload_key">
        <label for="file" class="control-label">Upload public key</label>
-       <input type="file" name="user_public_key" class="form-control" id="user_public_key" required>
+       <input type="file" name="user_public_key" class="form-control" style="width:200px" id="user_public_key" required/>
        <br />
                <div class="alert alert-danger" id="pkey_del_msg">
-                       Once your account is validated, you will have to delegate your credentials manually using SFA [Advanced users only]
+                       In order for the portal to contact testbeds on your behalf, so as to list and reserve resources, you will need to 
+                       <a href="http://trac.myslice.info/wiki/InstallSfa" target="_blank">delegate your public key to the portal.</a>
                </div>
-       <p class="help-block">Account Delegation: Manual (Advanced Users)</p>
     </div>
-    <div class="form-group" id="register">
-      <button class="submit btn btn-default" type="submit">Register</button>
+       </div>
+       </div>
+
+       <div class="form-group">
+               <p></p>
+               <input type="checkbox" name="agreement" value="agreement" required/> I agree to the 
+               <button class="btn btn-default btn-xs" data-toggle="modal" data-target="#myModal">terms and conditions.</button> 
+       </div>
+       <!-- Modal - columns selector -->
+               <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+                       <div class="modal-dialog">
+                       <div class="modal-content">
+                               <div class="modal-header">
+                                       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                               <h4 class="modal-title" id="myModalLabel">Terms & Conditions</h4>
+                               </div>
+                               <div class="modal-body">
+                                               <p align="left">
+                                       TERMS AND CONDITIONS
+                                       <br/>
+                                       for OneLab Basic level service
+                                       <br/>
+                                       Version 0.6 of 20 May 2014
+                                               </p>
+                                       <h1 align="left">1 Context</h1>
+                                       <h2 align="left">1.1 OneLab</h2>
+                                       <p align="left">
+                               OneLab is an experimental facility for testing new ideas and new technologies in the area of computer networking. It consists of a variety of types of
+                               platforms, including:</p>
+                                       <ul type="disc">
+                               <li>
+                               <strong>internet overlay testbeds</strong>
+                               , testbeds that offer virtual machines distributed across locations in different countries, allowing users to deploy overlays on the internet;
+                               </li>
+                               <li>
+                               <strong>wireless testbeds</strong>
+                               , testbeds that consist of clusters of computers that are within Wi-Fi communication range of each other, either in an office environment or in an
+                               isolated setting;
+                               </li>
+                               <li>
+                               <strong>internet of things testbeds</strong>
+                               , testbeds that consist of embedded computing nodes with sensor capabilities, communicating wirelessly in an isolated environment;
+                               </li>
+                               <li>
+                               <strong>emulation testbeds,</strong>
+                               computing clusters that offer virtual machines on servers that are interconnected by a high speed switch, enabling large scale network emulation.
+                               </li>
+                                       </ul>
+                                       <p align="left">
+                               This list of types of platforms is subject to change, and the current list, along with the identities of the specific platforms of each type, can be found
+                               on the OneLab website (onelab.eu).</p>
+                                       <p align="left">
+                               Each platform has its own owners, and OneLab is the grouping of these platforms through a consortium of institutions. The OneLab consortium is coordinated
+                               by UPMC Sorbonne Universités. It operates on a not-for-profit basis.</p>
+                                       <p align="left">
+                               Access to OneLab may also provide access to additional platforms that are not part of OneLab, due to a federation agreement between OneLab and the owners
+                               of those platforms.</p>
+                                       <h2 align="left">1.2 Fee-free Basic level service</h2>
+                                       <p align="left">These terms and conditions define and apply to OneLab's Basic level service, which is available free of charge.</p>
+                                       <p align="left">
+                               Users who would like additional services are encouraged to contact support@onelab.eu. Some additional services require a written agreement, but are
+                               otherwise free. Others require the payment of fees or in-kind contributions. (An example of an in-kind contribution is the hosting of a PlanetLab Europe
+                               server node.)</p>
+                                       <h2 align="left">1.3 Managers and standard users</h2>
+                                       <p align="left">
+                               There are two classes of OneLab user: the manager and the standard user. OneLab grants access rights to managers, who, in turn, provide access rights to
+                                       standard users. Examples are: for a small enterprise, an executive may be the manager and the employees may be standard users; for a research team, a
+                               senior scientist (faculty member or research scientist) may be a manager and doctoral students and other members of the team may be standard users; for a
+                               university course, a professor may be a manager and the students may be standard users.</p>
+                                       <h2 align="left">1.4 These terms and conditions</h2>
+                                       <p align="left">
+                               Acceptance of these terms and conditions is a condition of obtaining OneLab Basic level user service. They are posted to the OneLab portal site
+                               (portal.onelab.eu). They may be changed without other notice than the posting of a new version to the portal site.</p>
+                                       <h1 align="left">2 Services provided by OneLab</h1>
+                                       <h2 align="left">2.1 Access to the experimental facility</h2>
+                                       <p align="left">
+                               OneLab provides users with access to the platforms that make up the experimental facility. Each platform owner determines the specifics of this access (for
+                               example, how many nodes are available to a user, what happens in case of oversubscription, etc.), with the proviso that Basic level service requires that
+                                       users be able to conduct meaningful experiments on every OneLab testbed.</p>
+                                       <p align="left">
+                               Basic level service may also provide access to platforms that are federated with OneLab, but such access depends upon the terms of the federation
+                               agreements with those platforms, which may require that the user have a higher level of service in order to gain access. For example, Basic level service
+                               provides access to PlanetLab Europe, a OneLab platform, without providing access to PlanetLab Central, a federated platform. Users wanting full access
+                               across the global PlanetLab system should contact support@onelab.eu to arrange to enter into a PlanetLab Europe membership agreement.</p>
+                                       <p align="left">OneLab's role is to facilitate access to the platforms. Specifically, it provides each user with:</p>
+                                       <ul>
+                               <li align="left">
+                               <strong>a single account,</strong>
+                               the credentials for which can be used to access all of the OneLab testbeds;
+                               </li>
+                               <li align="left">
+                               <strong>tools through which to access the testbeds</strong>
+                               , including, notably, a web-based portal (portal.onelab.eu) that allows a user to see the resources available on each testbed and to reserve them,
+                               along with a number of experiment control tools that a user can employ to deploy an experiment on those resources;
+                               </li>
+                               <li align="left">
+                               <strong>support</strong>
+                               , with documentation on how to use the tools, pointers to documentation for individual testbeds, and a helpdesk to respond to user questions.
+                               </li>
+                                       </ul>
+<p align="left">
+    Additional support, such as accompaniment through the design and deployment of experiments and the interpretation of their results, is available through
+    higher levels of service.
+</p>
+<h2 align="left">
+    2.2 Best effort, without guarantees
+</h2>
+<p align="left">
+    OneLab and the owners of the individual OneLab testbeds do their best to provide the services outlined here, with the understanding that Basic level
+    service offers no guarantees. Users should clearly understand the following limitations.
+</p>
+<ul type="disc">
+    <li>
+        <strong>Reliability:</strong>
+        OneLab does not provide any guarantees with respect to the reliability of the portal, of other tools, or of the individual nodes on platforms. These
+        may be taken down for maintenance, rebooted, or reinstalled at any time. Reinstallation implies that disks are wiped, meaning that users should not
+        consider a local disk to be a persistent form of storage.
+    </li>
+    <li>
+        <strong>Fitness:</strong>
+        OneLab does not guarantee that the platforms are suitable for the experiments that users intend to conduct. There may be limitations in the
+        technologies that are offered that prevent certain types of experiments from being carried out.
+    </li>
+    <li>
+        <strong>Privacy</strong>
+        : OneLab does not guarantee the privacy of traffic generated on the platforms (e.g., wireless signals, packets). Unless otherwise specified by an
+        individual platform owner, users should assume that traffic is monitored and logged. Such monitoring may be done intentionally, for example, to allow
+        platform administrators as well as other users to investigate abuse.
+    </li>
+</ul>
+<p align="left">
+    Users who seek such guarantees are invited to consider a higher level of service.
+</p>
+<h2 align="left">
+    <a name="_Toc261537715">2.3 Limited</a>
+    liability
+</h2>
+<p align="left">
+    In no event shall the partners of the OneLab consortium be liable to any user for any consequential, incidental, punitive, or lost profit damages, or for
+    any damages arising out of loss of use or loss of data, to the extent that such damages arise out of the activities of OneLab consortium partners, or any
+    breach of the present terms and conditions, even if the consortium partner has been advised of the possibility of such damages.
+</p>
+<p align="left">
+    Nothing contained in these terms and conditions shall be deemed as creating any rights or liabilities in or for third parties who are not Basic level users
+    of OneLab.
+</p>
+<h1 align="left">
+    3 Acceptable use policy
+</h1>
+<h2 align="left">
+    3.1 Responsibilities of managers and standard users
+</h2>
+<p align="left">
+    OneLab creates and administers accounts for managers and delegates to managers the responsibility for creating and administering accounts for standard
+    users. Both managers and standard users are required to follow OneLab's acceptable use policy. In addition, managers are fully responsible for the
+    activities of the standard users whose accounts they create.
+</p>
+<p align="left">
+    A manager is expected to grant user access only an individual with whom he or she has a working relationship. In general, this means an individual who
+    works for the same institution as the manager, or, in the case of higher education and research, an individual who is a student at the university where the
+    manager works. Managers may also grant access to individuals from other institutions, provided that they are collaborating on a common project on OneLab.
+    If there is a doubt, a manager should refer the question to support@onelab.eu.
+</p>
+<h2 align="left">
+    3.2 Types of use
+</h2>
+<p align="left">
+    OneLab may be used by enterprise, by scientific researchers, and by educators.
+</p>
+<p align="left">
+    OneLab may be used for pre-commercial research and development. In keeping with OneLab's not-for-profit status, it may not be used to deploy services that
+    are designed to generate a commercial profit.
+</p>
+<p align="left">
+    Not-for-profit use of OneLab to deploy services that are designed to generate revenue requires prior approval through a written agreement, and thus may not
+    be carried out on a Basic level account. Interested users are invited to contact support@onelab.eu.
+</p>
+<p align="left">
+    OneLab may be used for scientific research.
+</p>
+<p align="left">
+    OneLab may be used to host lab exercises for university courses.
+</p>
+<p align="left">
+    Questions about other types of use should be addressed to support@onelab.eu.
+</p>
+<h2 align="left">
+    3.3 Applicable laws and regulations
+</h2>
+<p align="left">
+    OneLab is managed, and the portal is hosted, in France. Information regarding the countries in which individual testbeds are managed and hosted is
+    available from those testbeds. Users are responsible for being aware of the countries in which their experiments are deployed and for ensuring that their
+    use of OneLab fully conforms to the laws and regulations of those countries, as well as the laws and regulations of the country in which they themselves
+    are present when conducting their experiments.
+</p>
+<p align="left">
+    Above and beyond specific national laws, the activities email spamming, phishing through web services, and all types of Internet fraud are prohibited on
+    OneLab.
+</p>
+<h2>
+    3.4 Security and accounting mechanisms
+</h2>
+<p align="left">
+    Users are expected to respect the security and accounting mechanisms put in place by OneLab, its platforms, and federated platforms. For example, access to
+    PlanetLab Europe is designed to take place through the SSH cryptographically-secured connection protocol, which uses public/private key pair
+    authentication, and so users should not attempt to bypass this mechanism. As another example, OneLab's notion of a "slice" associates a set of resources
+    with the group of users who have reserved those resources, and users should not attempt to obscure the identities of participants in a slice.
+</p>
+<p align="left">
+    Hacking attempts against the OneLab portal and testbeds are not permitted. This includes "red team" (hacker test) experiments.
+</p>
+<h2>
+    3.5 Sharing of resources
+</h2>
+<p align="left">
+    OneLab is intended for ambitious experiments. Large numbers of resources and extended leases on resources may legitimately be granted in order to carry
+    these out. At the same time, OneLab and its testbeds are shared environments, and when there is contention for resources, limits must be imposed.
+</p>
+<p align="left">
+    Each OneLab platform sets its own policies for handling resource contention. As a general rule, users are encouraged to design their experiments to use
+    resources efficiently. In particular, spinning/busy-waiting techniques for extended periods of time are strongly discouraged. Some resource contention
+    policies (e.g., PlanetLab Europe's) terminate the jobs that are using the most resources in the case of contention.
+</p>
+<h2>
+    3.6 Internet-connected platforms
+</h2>
+<p align="left">
+    Some of OneLab's platforms allow experiments to take place on resources that have access to the public internet. These experiments can potentially generate
+    traffic to, and receive traffic from, any host or router in the internet.<a></a><a id="_anchor_1" href="#_msocom_1" name="_msoanchor_1">[LB1]</a>
+</p>
+<p align="left">
+    Furthermore, some internet-connected platforms (e.g., PlanetLab Europe) consist of servers that are hosted by a large number of member institutions.
+</p>
+<p align="left">
+    The accessibility of internet-connected platforms and the distributed hosting model of some of these platforms imply certain responsibilities on the part
+    of users, as detailed below.
+</p>
+<h3>
+    3.6.1 General guidance
+</h3>
+<p align="left">
+    A good litmus test when considering whether an experiment is appropriate for such internet-connected platforms is to ask what the network administrator at
+    one's own organisation would say about the experiment running locally. If the experiment disrupts local activity (e.g., uses more than its share of the
+    site's internet bandwidth) or triggers complaints from remote network administrators (e.g., performs systematic port scans), then it is not appropriate for
+    such internet-connected platforms.
+</p>
+<p align="left">
+    It is the responsibility of the user and the user's manager to ensure that an application that will run on an internet-connected platform is tested and
+    debugged in a controlled environment, to better understand its behaviour prior to deployment.
+</p>
+<h3>
+    3.6.2 Standards of network etiquette
+</h3>
+<p align="left">
+    Internet-connected platforms are designed to support experiments that generate unusual traffic, such as network measurements. However, it is expected that
+    all users adhere to widely accepted standards of network etiquette in an effort to minimise complaints from network administrators. Activities that have
+    been interpreted as worm and denial-of-service attacks in the past (and should be avoided) include sending SYN packets to port 80 on random machines,
+    probing random IP addresses, repeatedly pinging routers, overloading bottleneck links with measurement traffic, and probing a single target machine from
+    many nodes.
+</p>
+<p align="left">
+    For internet-connected platforms that have a distributed hosting model, each host institution will have its own acceptable use policy. Users should not
+    knowingly violate such local policies. Conflicts between local policies and OneLab's stated goal of supporting research into wide-area networks should be
+    brought to the attention of OneLab administrators at support@onelab.eu.
+</p>
+<h3>
+    3.6.3 Specific network usage rules
+</h3>
+<p align="left">
+    It is not allowed to use one or more nodes of an internet-connected platform to generate a high number of network flows or flood a site with high traffic
+    to the point of interfering with its normal operation. Use of congestion-controlled flows for large transfers is highly encouraged.
+</p>
+<p align="left">
+    It is not allowed to perform systematic or random port or address block scans from an internet-connected platform.
+</p>
+<p align="left">
+    For internet-connected platforms that use a distributed hosting model, it is not allowed to spoof or sniff traffic on a hosted server or on the network the
+    server belongs to.
+</p>
+<p align="left">
+    Access to a server on a distributed hosting platform may not be used to gain access to other servers or networked equipment that are not part of the
+    testbed.
+</p>
+<h2>
+    3.7 Wireless platforms
+</h2>
+<p align="left">
+    Wireless-connected platforms give users access to nodes that communicate via Wi-Fi and other wireless technologies. They may be capable of detecting
+    wireless activity in the neighbourhood of those nodes: traffic generated by other users of the platform or by individuals not associated with the platform.
+    In general, much of the traffic will be encrypted, with certain aspects (such as SSIDs) not encrypted, but it is also possible that there will be fully
+    unencrypted traffic. They may also be capable of generating wireless activity that reaches equipment outside of the testbed.
+</p>
+<p align="left">
+    Furthermore, some wireless-connected platforms may have built-in limitations to prevent them from generating signals at a strength that exceeds health and
+    safety regulations.
+</p>
+<p align="left">
+    These characteristics of wireless-connected platforms imply certain responsibilities on the part of users, as detailed below.
+</p>
+<h3>
+    3.7.1 Specific network usage rules
+</h3>
+<p align="left">
+    Experimenters may make no attempt to defeat the encryption of encrypted third-party traffic. Furthermore, experimenters must treat with utmost discretion
+    any unencrypted traffic. Limited metadata can be recorded for the bona fide purposes of an experiment, but under no case should third party communications
+    be recorded.
+</p>
+<p align="left">
+    No attempt may be made to reverse engineer traffic in order to learn the identities of the parties who have generated the traffic.
+</p>
+<p align="left">
+    Wireless-connected platforms may not be used to gain access to any network equipment that is not part of the testbed itself.
+</p>
+<p align="left">
+    It is not allowed to perform systematic or random scans of wireless networks that are not part of a wireless-connected platform. Similarly, it is not
+    allowed to spoof or sniff wireless traffic of the institution that hosts a wireless-connected platform or of other networks in the proximity.
+</p>
+<p align="left">
+    Care must be taken so that traffic on wireless-connected platforms does not interfere with the normal functioning of network equipment that is not part of
+    the testbed itself.
+</p>
+<p align="left">
+    No attempt may be made to defeat the mechanisms that limit signal strength on wireless-connected platforms.
+</p>
+<h2>
+    3.8 Handling suspected violations
+</h2>
+<p align="left">
+    Suspected violations of the OneLab acceptable use policy should be reported to support@onelab.eu.
+</p>
+<p align="left">
+    Upon notification or detection of a possible violation, OneLab management will attempt to understand if a violation has in fact occurred. To do so,
+    management will freely communicate with the users concerned, the operators of the platforms concerned, as well as any third parties that might be involved.
+    An example of a third party is a network operator who detects what they believe to be unauthorized traffic emanating from a OneLab platform.
+</p>
+<p align="left">
+    The priority is to resolve any real or apparent violations amicably. However, if OneLab management believes that a violation may have occurred, it can, at
+    its sole discretion, and without prior notice, apply any of the following measures:
+</p>
+<ul type="disc">
+    <li>
+        notification of the users of the concerned slice (set of resources);
+    </li>
+    <li>
+        disabling of the concerned slice;
+    </li>
+    <li>
+        disabling an individual user's account;
+    </li>
+    <li>
+        reporting of the user's activity to his/her manager;
+    </li>
+    <li>
+        disabling of the manager's account and all user accounts for which the manager is responsible;
+    </li>
+    <li>
+        disabling of all accounts associated with the user's institution.
+    </li>
+</ul>
+<p align="left">
+    In the case of suspected illegal activity, OneLab management might need, without prior notice, to notify the relevant authorities.
+</p>
+<div>
+    <div>
+        <div id="_com_1">
+        </div>
     </div>
-  </form>  
 </div>
+                               </div>
+                               <div class="modal-footer">
+                                       <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+                               </div>
+                       </div>
+                       </div>
+               </div>
+
+    <div class="form-group" id="register">
+               <p></p> 
+       <button class="submit btn btn-primary" type="submit">Sign up</button>
+    </div>
+</form>  
 <script>
 jQuery(document).ready(function(){
     var availableTags = [