*/
case TYPE_LIST_OF_VALUES: // XXX Until fixed
case TYPE_LIST_OF_RECORDS:
- var new_state,cur_query_uuid;
+ var key, new_state, cur_query_uuid;
cur_query_uuid = query.analyzed_query.subqueries[field].query_uuid;
// - update_query_orig.params.resource = resources in slice before update
// - update_query.params.resource = resource requested in slice
// - keys from field = resources obtained
- var key = manifold.metadata.get_key(field);
+
+ if (field == 'lease') {
+ // lease_id has been added to be repeated when
+ // constructing request rspec. We don't want it for
+ // comparisons
+ key = ['start_time', 'end_time', 'resource'];
+ } else {
+ key = manifold.metadata.get_key(field);
+ }
if (!key)
continue;
/*
cursor: not-allowed;\r
}\r
\r
-#scheduler-reservation-table tbody tr td.success {\r
+#scheduler-reservation-table tbody tr td.success:after {\r
content: "✓";\r
}\r
-#scheduler-reservation-table tbody tr td.failure {\r
+#scheduler-reservation-table tbody tr td.failure:after {\r
content: "✗";\r
}\r
\r
public_key = request['public_key'],
private_key = request['private_key'],
user_hrn = request['user_hrn'],
- pi = '', # XXX Why not None ?
+ pi = request['pi'],
email_hash = request['email_hash'],
status = 'False',
)
## check user is pi or not
platform_query = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
account_query = Query().get('local:account').select('user_id','platform_id','auth_type','config')
+ # XXX Something like an invalid session seems to make the execute fail sometimes, and thus gives an error on the main page
platform_details = execute_query(self.request, platform_query)
account_details = execute_query(self.request, account_query)
for platform_detail in platform_details:
import json
from random import randint
+from hashlib import md5
from django.core.mail import EmailMultiAlternatives
from django.contrib.auth.models import User
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 django.contrib.sites.models import Site
from unfold.page import Page
from unfold.loginrequired import FreeAccessView
from manifold.core.query import Query
from portal.models import PendingUser,PendingAuthority
-from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account
+from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account, create_pending_user
from myslice.theme import ThemeView
reg_site_name = request.POST.get('site_name', '')
reg_site_authority = request.POST.get('site_authority', '').lower()
- reg_site_abbreviated_name = request.POST.get('site_abbreviated_name', '')
+ reg_site_abbreviated_name = request.POST.get('site_abbreviated_name', '').lower()
reg_site_url = request.POST.get('site_url', '')
reg_site_latitude = request.POST.get('site_latitude', '')
reg_site_longitude = request.POST.get('site_longitude', '')
reg_fname = request.POST.get('pi_first_name', '')
reg_lname = request.POST.get('pi_last_name', '')
- reg_auth = reg_root_authority_hrn + "." + reg_site_authority
+ reg_auth = 'onelab.' + reg_site_abbreviated_name
reg_email = request.POST.get('pi_email','').lower()
reg_phone = request.POST.get('pi_phone','')
#prepare user_hrn
split_email = reg_email.split("@")[0]
split_email = split_email.replace(".", "_")
- user_hrn = reg_auth + '.' + split_email+ str(randint(1,1000000))
+ user_hrn = reg_auth + '.' + split_email
UserModel = get_user_model()
reg_password = request.POST['pi_password']
a = PendingAuthority(
site_name = reg_site_name,
- site_authority = 'onelab.' + reg_site_abbreviated_name,
+ site_authority = reg_auth,
site_abbreviated_name = reg_site_abbreviated_name,
site_url = reg_site_url,
site_latitude = reg_site_latitude,
a.save()
reg_password = request.POST['pi_password']
- b = PendingUser(
- first_name = reg_fname,
- last_name = reg_lname,
- authority_hrn = reg_auth,
- email = reg_email,
- password = reg_password,
- public_key = public_key,
- private_key = private_key,
- user_hrn = user_hrn,
- pi = reg_auth,
- email_hash = '',
- status = 'True',
- )
- b.save()
+ salt = randint(1,100000)
+ # get the domain url
+ current_site = Site.objects.get_current()
+ current_site = current_site.domain
+
+ email_hash = md5(str(salt)+reg_email).hexdigest()
+ user_request = {
+ 'first_name' : reg_fname,
+ 'last_name' : reg_lname,
+ 'organization' : reg_site_name,
+ 'authority_hrn' : reg_auth,
+ 'email' : reg_email,
+ 'password' : reg_password,
+ 'public_key' : public_key,
+ 'private_key' : private_key,
+ 'current_site' : current_site,
+ 'email_hash' : email_hash,
+ 'user_hrn' : user_hrn,
+ 'pi' : [reg_auth],
+ 'auth_type' : 'managed',
+ 'validation_link': 'http://' + current_site + '/portal/email_activation/'+ email_hash
+ }
+
+ create_pending_user(request, user_request, user_detail)
# saves the user to django auth_user table [needed for password reset]
- user = User.objects.create_user(reg_email, reg_email, reg_password)
+ #user = User.objects.create_user(reg_email, reg_email, reg_password)
#creating user to manifold local:user
#user_config = '{"first_name":"'+ reg_fname + '", "last_name":"'+ reg_lname + '", "authority_hrn":"'+ reg_auth + '"}'
def get_context_data(self, **kwargs):
page = Page(self.request)
- page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/my_account.edit_profile.js" ] )
- page.add_css_files ( [ "css/onelab.css", "css/account_view.css","css/plugin.css" ] )
+ page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/my_account.edit_profile.js", "js/jquery-ui.js" ] )
+ page.add_css_files ( [ "css/onelab.css", "css/account_view.css","css/plugin.css","css/jquery-ui.css" ] )
for key, value in kwargs.iteritems():
#print "%s = %s" % (key, value)
'password' : wsgi_request.POST.get('password', ''),
'current_site' : current_site,
'email_hash' : email_hash,
+ 'pi' : '',
'validation_link': 'http://' + current_site + '/portal/email_activation/'+ email_hash
}
ALLOWED_EXTENSIONS = ['.pub','.txt']
if file_extension not in ALLOWED_EXTENSIONS or not re.search(r'ssh-rsa',file_content):
errors.append('Please upload a valid RSA public key.')
-
- user_request['private_key'] = None
+ # user_request['private_key'] can't be Null because all db fields are set as NOT NULL
+ user_request['private_key'] = ""
user_request['public_key'] = file_content
if not errors:
account_query = Query().get('local:account').select('user_id','platform_id','auth_type','config')
platform_details = execute_query(self.request, platform_query)
account_details = execute_query(self.request, account_query)
+
+ # XXX When session has expired, this is None and thus not iterable
for platform_detail in platform_details:
for account_detail in account_details:
if platform_detail['platform_id'] == account_detail['platform_id']:
+<script type="text/javascript" src="{{STATIC_URL}}/js/jquery-ui.js"></script>
+<script type="text/javascript" src="{{STATIC_URL}}/js/jquery.qtip.min.js"></script>
+<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/jquery.qtip.min.css">
+<link rel="stylesheet" href="{{ STATIC_URL }}css/jquery-ui.css">
<script>
function get_users_in_slice(authority_hrn){
console.log(authority_hrn);
// Keep only the sub authorities, remove root auth
if(auth_hrn.indexOf(".") > -1){
list_authorities.push(auth_hrn);
+ list_authorities.sort();
if(auth_hrn=="{{user_details.parent_authority}}"){
- $("#auth_list").append("<option value='"+auth_hrn+"' selected='selected'>"+auth_hrn+"</option>");
- }else{
- $("#auth_list").append("<option value='"+auth_hrn+"'>"+auth_hrn+"</option>");
- }
+ $('#auth_list').val(auth_hrn);
+ }
}
});
+ $( "#auth_list" ).autocomplete({
+ source: list_authorities,
+ minLength: 0,
+ select: function (event, ui) {
+ get_users_in_slice(ui.item.value);
+ }
+ //select: function( event, ui ) {console.log(jQuery(this))}
+ });
}); // post rest/authority
get_users_in_slice("{{user_details.parent_authority}}");
//window.location="/portal/institution#slices";
}); // button#addusers click
-
+ $('[title!=""]').qtip();
}); // document ready
</script>
</div>
<ul class="list-group">
- <li class="list-group-item">Authority:<b> {{user_details.parent_authority}}</b>
- </li>
+ <li class="list-group-item">Authority</li>
<li class="list-group-item" style="padding-left:5px;">
- <select id="auth_list" onchange="get_users_in_slice(this.value);" style ="min-width:190px;">
- </select>
+ <input type="text" id="auth_list" style ="min-width:190px;"
+ title="The default value is the authority that you belong to and the selected users belong to this slice.
+ You can view users of other authorities (organizations) from the list that apears when you click in the field and start to type.
+ Use the arrow keys to scroll through the list; type part of the name to narrow down the list."/>
</li>
</ul>