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
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 = {
--- /dev/null
--- /dev/null
++{% 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 %}
++