Merge branch 'master' of ssh://git.onelab.eu/git/myslice
authorLoic Baron <loic.baron@lip6.fr>
Thu, 16 Jan 2014 16:38:29 +0000 (17:38 +0100)
committerLoic Baron <loic.baron@lip6.fr>
Thu, 16 Jan 2014 16:38:29 +0000 (17:38 +0100)
Conflicts:
portal/templates/registration_view.html

1  2 
portal/registrationview.py
portal/templates/slicerequest_view.html

@@@ -6,6 -6,7 +6,7 @@@ from django.contrib.auth.models import 
  from django.views.generic       import View
  from django.template.loader     import render_to_string
  from django.shortcuts           import render
+ from django.contrib.auth        import get_user_model
  
  from unfold.page                import Page
  from unfold.loginrequired       import FreeAccessView
@@@ -73,18 -74,22 +74,22 @@@ class RegistrationView (FreeAccessView)
              split_email = reg_email.split("@")[0] 
              split_email = split_email.replace(".", "_")
              user_hrn = reg_auth + '.' + split_email
+             
+             UserModel = get_user_model()
  
              #POST value validation  
              if (re.search(r'^[\w+\s.@+-]+$', reg_fname)==None):
                  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.')
-             # XXX validate authority hrn !!
+             # 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 UserModel._default_manager.filter(email__iexact=reg_email): 
+                 errors.append('This email is not usable. Please contact the administrator or try with another email.')
              for user_detail in user_details:
                  if user_detail['email']==reg_email:
-                     errors.append('Email already exists in Manifold. Please provide a new email address.')
+                     errors.append('Email already registered in Manifold. Please provide a new email address.')
  
  # XXX TODO: Factorize with portal/accountview.py
              if 'generate' in request.POST['question']:
  #                private_key = ''.join(private_key.split())
  #                public_key = "ssh-rsa " + public_key
                  # Saving to DB
 -                keypair = '{"user_public_key":'+ public_key + ', "user_private_key":'+ private_key + ', "user_hrn":"'+ user_hrn + '"}'
 +                account_config = '{"user_public_key":'+ public_key + ', "user_private_key":'+ private_key + ', "user_hrn":"'+ user_hrn + '"}'
                  auth_type = 'managed'
                  #keypair = re.sub("\r", "", keypair)
                  #keypair = re.sub("\n", "\\n", keypair)
                  file_extension = os.path.splitext(file_name)[1]
                  allowed_extension =  ['.pub','.txt']
                  if file_extension in allowed_extension and re.search(r'ssh-rsa',file_content):
 -                    keypair = '{"user_public_key":"'+ file_content + '", "user_hrn":"'+ user_hrn +'"}'
 -                    keypair = re.sub("\r", "", keypair)
 -                    keypair = re.sub("\n", "\\n",keypair)
 -                    keypair = ''.join(keypair.split())
 +                    account_config = '{"user_public_key":"'+ file_content + '", "user_hrn":"'+ user_hrn +'"}'
 +                    account_config = re.sub("\r", "", account_config)
 +                    account_config = re.sub("\n", "\\n",account_config)
 +                    account_config = ''.join(account_config.split())
                      auth_type = 'user'
                      # for sending email
                      public_key = file_content
                      #login         = reg_login,
                      email         = reg_email, 
                      password      = request.POST['password'],
 -                    keypair       = keypair,
 +                    keypair       = account_config,
                  )
                  b.save()
                  # saves the user to django auth_user table [needed for password reset]
                  user = User.objects.create_user(reg_email, reg_email, request.POST['password'])
                  #creating user to manifold local:user
 -                config = '{"firstname":"'+ reg_fname + '", "lastname":"'+ reg_lname + '", "authority":"'+ reg_auth + '"}'
 -                user_params = {'email': reg_email, 'password': request.POST['password'], 'config': config}
 +                user_config = '{"firstname":"'+ reg_fname + '", "lastname":"'+ reg_lname + '", "authority":"'+ reg_auth + '"}'
 +                user_params = {'email': reg_email, 'password': request.POST['password'], 'config': user_config}
                  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
 -                user_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': keypair}
 -                manifold_add_account(request,user_params)
 +                account_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': account_config}
 +                manifold_add_account(request,account_params)
   
                  # Send email
                  ctx = {
                      'authority_hrn' : reg_auth,
                      'email'         : reg_email,
                      'user_hrn'      : user_hrn,
-                     'keypair'       : 'Public Key: ' + public_key,
+                     'public_key'    : public_key,
                      'cc_myself'     : True # form.cleaned_data['cc_myself']
                      }
                  recipients = authority_get_pi_emails(request,reg_auth)
                      recipients.append(ctx['email'])
  
                  msg = render_to_string('user_request_email.txt', ctx)
-                 send_mail("Onelab New User request for %s submitted"%reg_email, msg, reg_email, recipients)
+                 send_mail("Onelab New User request for %s submitted"%reg_email, msg, 'support@myslice.info', recipients)
                  return render(request, 'user_register_complete.html') 
  
          template_env = {
index 0000000,0000000..af787c2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,99 @@@
++{% extends "layout-unfold1.html" %}
++{% load i18n %}
++
++{% block head %}
++{{ wizard.form.media }}
++{% endblock %}
++
++{% block unfold_main %}
++
++<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/onelab.css" />
++<!-- xxx ideally only onelab.css but ... xxx -->
++<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/registration.css" />
++
++<div class="onelab-title well-lg">
++  <h2>Request a Slice</h2>
++</div>
++
++{% if errors %}
++<ul>
++  {% for error in errors %}
++  <li>{{ error }}</li>
++  {% endfor %}
++</ul>
++{% endif %}
++
++<div class='well'>
++  <form id="commentForm" class="form-horizontal" action="" method="post" role="form">{% csrf_token %}
++  <fieldset>
++
++   <div class="form-group">
++     <label for="email" class="col-xs-2 control-label">Experimenter</label>
++     <div class="col-xs-4">
++        <label class="col-xs-2 control-label" style="height:34px;">{{ email }}</label>
++     </div>
++     <div class="col-xs-6"> <p class="form-hint">Experimenter requesting a Slice</p> </div>
++   </div>
++
++   <div class="form-group">
++     <label for="slice_name" class="col-xs-2 control-label">Slice Name</label>
++     <div class="col-xs-4">
++        <input type="text" name="slice_name" class="form-control" minlength="2" value="{{ slice_name }}" placeholder="Slice Name" required />
++     </div>
++     <div class="col-xs-6"> <p class="form-hint">The name of the slice you wish to create</p> </div>
++   </div>
++
++   <div class="form-group">
++     <label for="authority_hrn" class="col-xs-2 control-label">Authority</label>
++     <div class="col-xs-4">
++       <div class="ui-widget">
++           <input id="authority_hrn" name="authority_hrn" class="form-control" value="{{ authority_hrn }}" placeholder="Authority" required />
++       </div>
++    </div>
++     <div class="col-xs-6"><p class="form-hint">An authority responsible for vetting your slice</p></div>
++   </div>
++
++   <div class="form-group">
++     <label for="number_of_nodes" class="col-xs-2 control-label">Number of nodes</label>
++     <div class="col-xs-4">
++       <div class="ui-widget">
++           <input id="number_of_nodes" name="number_of_nodes" class="form-control" value="{{ number_of_nodes }}" />
++       </div>
++    </div>
++     <div class="col-xs-6"><p class="form-hint">Number of nodes you expect to request (informative)</p></div>
++   </div>
++
++   <div class="form-group">
++     <label for="purpose" class="col-xs-2 control-label">Experiment purpose</label>
++     <div class="col-xs-4">
++       <div class="ui-widget">
++           <textarea id="purpose" name="purpose" class="form-control" style="height:110px;" placeholder="Purpose" required>{{ purpose }}</textarea>
++       </div>
++    </div>
++     <div class="col-xs-6"><p class="form-hint">Purpose of your experiment (informative)</p></div>
++   </div>
++
++   <button class="submit btn btn-default col-xs-12" type="submit">Request Slice</button>
++  </fieldset>
++  </form>
++</div>
++
++<script>
++jQuery(document).ready(function(){
++    var availableTags = [
++    {% if authorities %}
++        {% for authority in authorities %}
++        {value:"{{ authority.authority_hrn }}",label:"{{authority.name}}"},
++        {% endfor %}    
++    {% else %}
++        {value:"",label:"No authority found !!!"}
++    {% endif %}
++    ];
++    $( "#authority_hrn" ).autocomplete({
++      source: availableTags,
++      select: function( event, ui ) {console.log(jQuery(this))}
++    });
++});
++</script>
++{% endblock %}
++