From: Loic Baron Date: Mon, 21 Jul 2014 13:25:19 +0000 (-0300) Subject: Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into fibre X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=fdd9b516fcb287a9451874c04fd946bef9803c13;hp=f6f7b21b464c7308f7d5f9b5335862d7bee4903d;p=myslice.git Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into fibre --- diff --git a/manifoldapi/static/js/manifold.js b/manifoldapi/static/js/manifold.js index b959c10e..7dfcb4db 100644 --- a/manifoldapi/static/js/manifold.js +++ b/manifoldapi/static/js/manifold.js @@ -1302,7 +1302,7 @@ case TYPE_LIST_OF_VALUES: */ 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; @@ -1310,7 +1310,15 @@ case TYPE_LIST_OF_VALUES: // - 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; /* diff --git a/plugins/scheduler2/static/css/scheduler2.css b/plugins/scheduler2/static/css/scheduler2.css index 2fcf0634..cda74b12 100755 --- a/plugins/scheduler2/static/css/scheduler2.css +++ b/plugins/scheduler2/static/css/scheduler2.css @@ -220,10 +220,10 @@ cursor: not-allowed; } -#scheduler-reservation-table tbody tr td.success { +#scheduler-reservation-table tbody tr td.success:after { content: "✓"; } -#scheduler-reservation-table tbody tr td.failure { +#scheduler-reservation-table tbody tr td.failure:after { content: "✗"; } diff --git a/portal/actions.py b/portal/actions.py index 97850f71..cc167d13 100644 --- a/portal/actions.py +++ b/portal/actions.py @@ -688,7 +688,7 @@ def create_pending_user(wsgi_request, request, user_detail): 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', ) diff --git a/portal/homeview.py b/portal/homeview.py index 3e68487f..858c887e 100644 --- a/portal/homeview.py +++ b/portal/homeview.py @@ -108,6 +108,7 @@ class HomeView (FreeAccessView, ThemeView): ## 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: diff --git a/portal/joinview.py b/portal/joinview.py index 5dd04c22..8356dec7 100644 --- a/portal/joinview.py +++ b/portal/joinview.py @@ -2,12 +2,14 @@ import os.path, re 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 @@ -17,7 +19,7 @@ from manifoldapi.manifoldapi import execute_admin_query 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 @@ -59,20 +61,20 @@ class JoinView (FreeAccessView, 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() @@ -123,7 +125,7 @@ class JoinView (FreeAccessView, ThemeView): 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, @@ -140,23 +142,33 @@ class JoinView (FreeAccessView, ThemeView): 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 + '"}' diff --git a/portal/manageuserview.py b/portal/manageuserview.py index 7687d341..3cbb91df 100644 --- a/portal/manageuserview.py +++ b/portal/manageuserview.py @@ -24,8 +24,8 @@ class UserView(LoginRequiredAutoLogoutView, ThemeView): 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) diff --git a/portal/registrationview.py b/portal/registrationview.py index 7bb25fc5..0bccac96 100644 --- a/portal/registrationview.py +++ b/portal/registrationview.py @@ -79,6 +79,7 @@ class RegistrationView (FreeAccessView, ThemeView): '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 } @@ -144,8 +145,8 @@ class RegistrationView (FreeAccessView, ThemeView): 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: diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index db72dca9..db7413d1 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -256,6 +256,8 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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']: diff --git a/portal/templates/slice-tab-users-view.html b/portal/templates/slice-tab-users-view.html index 1052c495..103a1ff8 100644 --- a/portal/templates/slice-tab-users-view.html +++ b/portal/templates/slice-tab-users-view.html @@ -1,3 +1,7 @@ + + + + @@ -93,11 +104,12 @@