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/plugin.css"]) usera = UserAccessProfile(self.request) c_user = usera.user_obj #get_user_by_email(the_user(self.request)) history_list_omf = Reservation.objects.filter( user_ref=c_user, username=usera.session_username) history_list_sim = SimReservation.objects.filter( user_ref=c_user, username=usera.session_username) context = super(SliceHistoryView, self).get_context_data(**kwargs) context['history_list_omf'] = history_list_omf context['history_list_sim'] = history_list_sim context['time_now'] = timezone.now context['title'] = 'Request Log' context['sim_enable'] = SIM_RESERVATION # the menu items on the top context['topmenu_items'] = topmenu_items( 'Request Log', page.request) # @qursaan change from _live # so we can sho who is logged context['username'] = usera.username #the_user(self.request) prelude_env = page.prelude_env() context.update(prelude_env) return context
def get_or_post(self, wsgi_request, method): """ """ errors = [] authorities = getAuthorities(wsgi_request, admin = True) #authority_hrn = None ## REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 #authorities_query = Query.get('authority').select('name', 'authority_hrn') #authorities = execute_admin_query(wsgi_request, authorities_query) #if authorities is not None: # # Remove the root authority from the list # matching = [s for s in authorities if "." in s['authority_hrn']] # authorities = sorted(matching, key=lambda k: k['authority_hrn']) # authorities = sorted(matching, key=lambda k: k['name']) logger.debug("############ BREAKPOINT 1 #################") # Page rendering page = Page(wsgi_request) page.add_css_files ( [ "https://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css" ] ) page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js", "js/jquery.qtip.min.js","js/jquery-ui.js","js/jquery-ui-combobox.js" ] ) page.add_css_files ( [ "css/onelab.css", "css/registration.css", "css/jquery.qtip.min.css", "css/jquery.ui.combobox.css" ] ) page.expose_js_metadata() logger.debug("############ BREAKPOINT 2 #################") if method == 'POST': reg_form = {}
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/plugin.css"]) usera = UserAccessProfile(self.request) c_user = usera.user_obj # get_user_by_email(the_user(self.request)) get_count_active_slice(c_user=c_user, username=usera.session_username) pending_list_1 = Reservation.objects.filter( user_ref=c_user, username=usera.session_username, status=ReservationStatus.get_pending()) active_list_1 = Reservation.objects.filter( user_ref=c_user, username=usera.session_username, status=ReservationStatus.get_active()) pending_list_2 = SimReservation.objects.filter( user_ref=c_user, username=usera.session_username, status=ReservationStatus.get_pending()) active_list_2 = SimReservation.objects.filter( user_ref=c_user, username=usera.session_username, status=ReservationStatus.get_active()) context = super(SliceCurrentView, self).get_context_data(**kwargs) context['current_list_1'] = pending_list_1 context['active_list_1'] = active_list_1 context['current_list_2'] = pending_list_2 context['active_list_2'] = active_list_2 context['time_now'] = timezone.now() # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Reservation Panel' # the menu items on the top # context['topmenu_items'] = topmenu_items('Reservation Status', page.request) # @qursaan change from _live # so we can sho who is logged context['username'] = usera.username # the_user(self.request) # context ['firstname'] = config['firstname'] prelude_env = page.prelude_env() context.update(prelude_env) return context
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files(["js/common.functions.js"]) platform_query = Query().get('local:platform').filter_by( 'disabled', '==', '0').select('platform', 'platform_longname', 'gateway_type') #platform_query = Query().get('local:platform').select('platform','platform_longname','gateway_type') page.enqueue_query(platform_query) page.expose_js_metadata() platformlist = QueryTable( page=page, title='List', domid='checkboxes', # this is the query at the core of the slice list query=platform_query, query_all=platform_query, checkboxes=False, init_key='platform', datatables_options={ 'iDisplayLength': 10, 'bLengthChange': True, 'bAutoWidth': True, }, ) context = super(PlatformsView, self).get_context_data(**kwargs) context['person'] = self.request.user context['platforms'] = platformlist.render(self.request) # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) context['theme'] = self.theme context.update(page.prelude_env()) context['layout_1_or_2'] = "layout-unfold2.html" if not context[ 'username'] else "layout-unfold1.html" return context
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files ( [ "js/common.functions.js" ] ) platform_query = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform','platform_longname','gateway_type') #platform_query = Query().get('local:platform').select('platform','platform_longname','gateway_type') page.enqueue_query(platform_query) page.expose_js_metadata() platformlist = QueryTable( page = page, title = 'List', domid = 'checkboxes', # this is the query at the core of the slice list query = platform_query, query_all = platform_query, checkboxes = False, init_key = 'platform', datatables_options = { 'iDisplayLength': 10, 'bLengthChange' : True, 'bAutoWidth' : True, }, ) context = super(PlatformsView, self).get_context_data(**kwargs) context['person'] = self.request.user context['platforms'] = platformlist.render(self.request) # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) context.update(page.prelude_env()) context['layout_1_or_2']="layout-unfold2.html" if not context['username'] else "layout-unfold1.html" return context
def get_or_post(self, request, method, slicename): """ """ # Page rendering page = Page(request) page.add_js_files(["js/jquery-ui.js"]) page.add_css_files(["css/jquery-ui.css"]) errors = [] slice_name = '' template_env = { 'theme': self.theme, 'section': "Slice request", 'slicename': slicename, 'request': request, } template_env.update(page.prelude_env()) return render_to_response(self.template, template_env, context_instance=RequestContext(request))
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files ( [ "js/common.functions.js" ] ) for key, value in kwargs.iteritems(): print "%s = %s" % (key, value) if key == "urn": resource_urn=value resource_query = Query().get('resource')\ .filter_by('urn', '==', resource_urn)\ .select('hostname','type','hrn','urn', 'latitude', 'longitude', 'country') page.enqueue_query(resource_query) page.expose_js_metadata() resourcelist = QueryTable( page = page, title = 'List', domid = 'checkboxes', # this is the query at the core of the slice list query = resource_query, query_all = resource_query, checkboxes = False, datatables_options = { 'iDisplayLength' : 25, 'bLengthChange' : True, }, ) resource_as_map = GoogleMap( page = page, title = 'Geographic view', domid = 'resources-map', # tab's sons preferably turn this off togglable = True, query = resource_query, query_all = resource_query, googlemap_api_key = ConfigEngine().googlemap_api_key(), checkboxes = False, # center on Paris #latitude = 49., #longitude = 9, #zoom = 4, ) # resourcelist = SimpleList( # title = None, # page = page, # key = 'hrn', # query = resource_query, # ) resource_stats = SliceStat( title = None, page = page, stats = 'node', key = 'hrn', query = resource_query ) context = super(ResourceView, self).get_context_data(**kwargs) context['person'] = self.request.user context['resource'] = resourcelist.render(self.request) context['resource_as_map'] = resource_as_map.render(self.request) context['resource_stats'] = resource_stats.render(self.request) # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Information about a resource' # the menu items on the top context['topmenu_items'] = topmenu_items_live(None, page) # so we can sho who is logged context['username'] = the_user(self.request) context.update(page.prelude_env()) return context
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files(["js/common.functions.js"]) for key, value in kwargs.iteritems(): logger.debug("{} = {}".format(key, value)) if key == "platformname": platformname = value network_query = Query().get('local:platform')\ .filter_by('platform', '==', platformname)\ .select('platform','platform_longname','gateway_type') page.enqueue_query(network_query) # ListResources of the platform metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] resources = platformname + ':resource' query_resource_all = Query.get(resources).select(resource_fields) page.enqueue_query(query_resource_all) query_resource_default_fields = Query.get(resources).select( 'hrn', 'hostname', 'type', 'country') page.enqueue_query(query_resource_default_fields) page.expose_js_metadata() networklist = QueryTable( page=page, title='List', domid='checkboxes', # this is the query at the core of the slice list query=network_query, query_all=network_query, checkboxes=False, datatables_options={ 'iDisplayLength': 25, 'bLengthChange': True, }, ) # networklist = SimpleList( # title = None, # page = page, # key = 'platform', # query = network_query, # ) # # -------------------------------------------------------------------------- # RESOURCES # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hrn' # the resources part is made of a Tabs (Geographic, List), resources_as_gmap = GoogleMap( page=page, title='Geographic view', domid='resources-map', # tab's sons preferably turn this off togglable=False, query=query_resource_default_fields, query_all=query_resource_all, # this key is the one issued by google googlemap_api_key=ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key=main_query_init_key, checkboxes=False, # center on Paris latitude=49., longitude=9, zoom=4, ) resources_as_3dmap = SensLabMap( page=page, title='3D Map', domid='senslabmap', query=query_resource_default_fields, query_all=query_resource_all, ) resources_as_list = QueryTable( page=page, domid='resources-list', title='List view', # this is the query at the core of the slice list query=query_resource_default_fields, query_all=query_resource_all, init_key=main_query_init_key, checkboxes=False, datatables_options={ 'iDisplayLength': 25, 'bLengthChange': True, 'bAutoWidth': True, }, ) resources_sons = [ resources_as_gmap, resources_as_3dmap, resources_as_list, ] resources_area = Tabs( page=page, domid="resources", togglable=True, title="Resources", outline_complete=True, sons=resources_sons, active_domid='resources-map', persistent_active=True, ) context = super(PlatformView, self).get_context_data(**kwargs) context['person'] = self.request.user context['networks'] = networklist.render(self.request) context['resources'] = resources_area.render(self.request) # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) context['theme'] = self.theme context.update(page.prelude_env()) return context
def get(self, request, slicename=tmp_default_slice): page = Page(request) page.add_css_files('css/slice-view.css') page.add_js_files(["js/common.functions.js"]) page.add_js_chunks( '$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });' ) page.add_js_chunks( '$(function() { messages.debug("sliceview: users turned %s"); });' % ("on" if do_query_users else "off")) page.add_js_chunks( '$(function() { messages.debug("sliceview: leases turned %s"); });' % ("on" if do_query_leases else "off")) page.add_js_chunks( '$(function() { messages.debug("manifold URL %s"); });' % (ConfigEngine().manifold_url())) # metadata = page.get_metadata() # resource_md = metadata.details_by_object('resource') # resource_fields = [column['name'] for column in resource_md['column']] # user_md = metadata.details_by_object('user') # user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']] # TODO The query to run is embedded in the URL main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) main_query.select( 'slice_hrn', # 'resource.hrn', 'resource.urn', 'resource.hostname', 'resource.type', 'resource.network_hrn', 'lease.urn', 'user.user_hrn', # 'application.measurement_point.counter' ) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hostname' # variables that will get passed to the view-unfold1.html template template_env = {} # define 'unfold_main' to the template engine - the main contents # template_env [ 'unfold_main' ] = main_stack.render(request) # more general variables expected in the template template_env['title'] = '%(slicename)s' % locals() # the menu items on the top template_env['topmenu_items'] = topmenu_items('Slice', page.request) # so we can sho who is logged template_env['username'] = UserAccessProfile(request).username # don't forget to run the requests # page.expose_js_metadata() # the prelude object in page contains a summary of the requirements() for all plugins # define {js,css}_{files,chunks} template_env.update(page.prelude_env()) return render_to_response('view-unfold1.html', template_env, context_instance=RequestContext(request))
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files ( [ "js/common.functions.js" ] ) for key, value in kwargs.iteritems(): print "%s = %s" % (key, value) if key == "platformname": platformname=value network_query = Query().get('local:platform')\ .filter_by('platform', '==', platformname)\ .select('platform','platform_longname','gateway_type') page.enqueue_query(network_query) # ListResources of the platform metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] resources = platformname + ':resource' query_resource_all = Query.get(resources).select(resource_fields) page.enqueue_query(query_resource_all) query_resource_default_fields = Query.get(resources).select('hrn','hostname', 'type','country') page.enqueue_query(query_resource_default_fields) page.expose_js_metadata() networklist = QueryTable( page = page, title = 'List', domid = 'checkboxes', # this is the query at the core of the slice list query = network_query, query_all = network_query, checkboxes = False, datatables_options = { 'iDisplayLength' : 25, 'bLengthChange' : True, }, ) # networklist = SimpleList( # title = None, # page = page, # key = 'platform', # query = network_query, # ) # # -------------------------------------------------------------------------- # RESOURCES # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hrn' # the resources part is made of a Tabs (Geographic, List), resources_as_gmap = GoogleMap( page = page, title = 'Geographic view', domid = 'resources-map', # tab's sons preferably turn this off togglable = False, query = query_resource_default_fields, query_all = query_resource_all, # this key is the one issued by google googlemap_api_key = ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key = main_query_init_key, checkboxes = False, # center on Paris latitude = 49., longitude = 9, zoom = 4, ) resources_as_3dmap = SensLabMap( page = page, title = '3D Map', domid = 'senslabmap', query = query_resource_default_fields, query_all = query_resource_all, ) resources_as_list = QueryTable( page = page, domid = 'resources-list', title = 'List view', # this is the query at the core of the slice list query = query_resource_default_fields, query_all = query_resource_all, init_key = main_query_init_key, checkboxes = False, datatables_options = { 'iDisplayLength': 25, 'bLengthChange' : True, 'bAutoWidth' : True, }, ) resources_sons = [ resources_as_gmap, resources_as_3dmap, resources_as_list, ] resources_area = Tabs ( page=page, domid="resources", togglable=True, title="Resources", outline_complete=True, sons= resources_sons, active_domid = 'resources-map', persistent_active=True, ) context = super(PlatformView, self).get_context_data(**kwargs) context['person'] = self.request.user context['networks'] = networklist.render(self.request) context['resources'] = resources_area.render(self.request) # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) context.update(page.prelude_env()) return context
def get_or_post (self, request, method): errors = [] # Using cache manifold-tables to get the list of authorities faster authorities_query = Query.get('authority').select('name', 'authority_hrn') #onelab_enabled_query = Query.get('local:platform').filter_by('platform', '==', 'ple').filter_by('disabled', '==', 'False') #onelab_enabled = not not execute_admin_query(request, onelab_enabled_query) #if onelab_enabled: if True: print "ONELAB ENABLED" #authorities_query = Query.get('ple:authority').select('name', 'authority_hrn').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc', 'ple.ibbtple', 'ple.nitos']) # Now using Cache else: print "FIREXP ENABLED" authorities = execute_admin_query(request, authorities_query) if authorities is not None: authorities = sorted(authorities) # xxx tocheck - if authorities is empty, it's no use anyway # (users won't be able to validate the form anyway) page = Page(request) page.add_js_files ( [ "js/jquery.validate.js", "js/my_account.register.js" ] ) page.add_css_files ( [ "css/onelab.css", "css/registration.css" ] ) page.add_css_files ( [ "http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] ) print 'registration view, method',method user_query = Query().get('local:user').select('user_id','email') user_details = execute_admin_query(self.request, user_query) if method == 'POST': # We shall use a form here #get_email = PendingUser.objects.get(email) reg_fname = request.POST.get('firstname', '') reg_lname = request.POST.get('lastname', '') #reg_aff = request.POST.get('affiliation','') reg_auth = request.POST.get('authority_hrn', '') #reg_login = request.POST.get('login', '') reg_email = request.POST.get('email','').lower() #prepare user_hrn split_email = reg_email.split("@")[0] split_email = split_email.replace(".", "_") user_hrn = reg_auth + '.' + split_email+ str(randint(1,1000000)) 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.') # 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 registered in Manifold. Please provide a new email address.') # XXX TODO: Factorize with portal/accountview.py if 'generate' in request.POST['question']: from Crypto.PublicKey import RSA private = RSA.generate(1024) private_key = json.dumps(private.exportKey()) public = private.publickey() public_key = json.dumps(public.exportKey(format='OpenSSH')) # # Generate public and private keys using SFA Library # from sfa.trust.certificate import Keypair # k = Keypair(create=True) # public_key = k.get_pubkey_string() # private_key = k.as_pem() # private_key = ''.join(private_key.split()) # public_key = "ssh-rsa " + public_key # Saving to DB 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) #keypair = keypair.rstrip('\r\n') #keypair = ''.join(keypair.split()) #for sending email: removing existing double qoute public_key = public_key.replace('"', ''); else: up_file = request.FILES['user_public_key'] file_content = up_file.read() file_name = up_file.name 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): 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 public_key = ''.join(public_key.split()) else: errors.append('Please upload a valid RSA public key.') #b = PendingUser(first_name=reg_fname, last_name=reg_lname, affiliation=reg_aff, # email=reg_email, password=request.POST['password'], keypair=keypair) #b.save() #saving to django db 'portal_pendinguser' table if not errors: b = PendingUser( first_name = reg_fname, last_name = reg_lname, #affiliation = reg_aff, authority_hrn = reg_auth, #login = reg_login, email = reg_email, password = request.POST['password'], keypair = account_config, pi = '', ) 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 user_config = '{"firstname":"'+ reg_fname + '", "lastname":"'+ reg_lname + '", "authority":"'+ reg_auth + '"}' user_params = {'email': reg_email, 'password': request.POST['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) # Send email ctx = { 'first_name' : reg_fname, 'last_name' : reg_lname, 'authority_hrn' : reg_auth, 'email' : reg_email, 'user_hrn' : user_hrn, 'public_key' : public_key, } recipients = authority_get_pi_emails(request,reg_auth) # backup email: if authority_get_pi_emails fails recipients.append('*****@*****.**') msg = render_to_string('user_request_email.txt', ctx) send_mail("Onelab New User request for %s submitted"%reg_email, msg, '*****@*****.**', recipients) return render(request, 'user_register_complete.html') template_env = { 'topmenu_items': topmenu_items_live('Register', page), 'errors': errors, 'firstname': request.POST.get('firstname', ''), 'lastname': request.POST.get('lastname', ''), #'affiliation': request.POST.get('affiliation', ''), 'authority_hrn': request.POST.get('authority_hrn', ''), 'email': request.POST.get('email', ''), 'password': request.POST.get('password', ''), 'authorities': authorities, } template_env.update(page.prelude_env ()) return render(request, 'registration_view.html',template_env)
def get(self, request, slicename=tmp_default_slice): page = Page(request) page.add_css_files('css/slice-view.css') page.add_js_files(["js/common.functions.js"]) page.add_js_chunks( '$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });' ) page.add_js_chunks( '$(function() { messages.debug("sliceview: users turned %s"); });' % ("on" if do_query_users else "off")) page.add_js_chunks( '$(function() { messages.debug("sliceview: leases turned %s"); });' % ("on" if do_query_leases else "off")) page.add_js_chunks( '$(function() { messages.debug("manifold URL %s"); });' % (ConfigEngine().manifold_url())) metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] user_md = metadata.details_by_object('user') user_fields = ['user_hrn' ] # [column['name'] for column in user_md['column']] # TODO The query to run is embedded in the URL main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) main_query.select( 'slice_hrn', #'resource.hrn', 'resource.urn', 'resource.hostname', 'resource.type', 'resource.network_hrn', 'lease.urn', 'user.user_hrn', #'application.measurement_point.counter' ) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hostname' query_resource_all = Query.get('resource').select(resource_fields) aq = AnalyzedQuery(main_query, metadata=metadata) page.enqueue_query(main_query, analyzed_query=aq) page.enqueue_query(query_resource_all) if do_query_users: # Required: the user must have an authority in its user.config # XXX Temporary solution user_query = Query().get('local:user').select('config', 'email') user_details = execute_query(self.request, user_query) # not always found in user_details... config = {} # for user_detail in user_details: # #email = user_detail['email'] # if user_detail['config']: # config = json.loads(user_detail['config']) # user_detail['authority'] = config.get('authority',"Unknown Authority") # # if user_detail['authority'] is not None: # sub_authority = user_detail['authority'].split('.') # root_authority = sub_authority[0] # query_user_all = Query.get(root_authority+':user').select(user_fields) # # # XXX TODO this filter doesn't work - to be improved in Manifold # #.filter_by('authority.authority_hrn', '=', user_detail['authority']) # # page.enqueue_query(query_user_all) # else: # print "authority of the user is not in local:user db" query_user_all = Query.get('user').select(user_fields) # query_user_all = None # ... and for the relations # XXX Let's hardcode resources for now sq_resource = aq.subquery('resource') sq_user = aq.subquery('user') sq_lease = aq.subquery('lease') sq_measurement = aq.subquery('measurement') # Prepare the display according to all metadata # (some parts will be pending, others can be triggered by users). # # For example slice measurements will not be requested by default... # Create the base layout (Stack)... main_stack = Stack( page=page, title="Slice %s" % slicename, sons=[], ) # ... responsible for the slice properties... # a nice header main_stack.insert( Raw(page=page, togglable=False, toggled=True, html="<h2 class='well well-lg'> Slice %s</h2>" % slicename)) # -------------------------------------------------------------------------- #DEPRECATED| # QueryUpdater (Pending Operations) #DEPRECATED| #DEPRECATED| main_stack.insert(QueryUpdater( #DEPRECATED| page = page, #DEPRECATED| title = 'Pending operations', #DEPRECATED| query = main_query, #DEPRECATED| togglable = True, #DEPRECATED| # start turned off, it will open up itself when stuff comes in #DEPRECATED| toggled = False, #DEPRECATED| domid = 'pending', #DEPRECATED| outline_complete = True, #DEPRECATED| )) # -------------------------------------------------------------------------- # Filter Resources # turn off for now -- see above filter_query_editor = QueryEditor( page=page, query=sq_resource, query_all=query_resource_all, title="Select Columns", domid='select-columns', ) filter_active_filters = ActiveFilters( page=page, query=sq_resource, title="Active Filters", ) filters_area = Stack( page=page, title='Filter Resources', domid='filters', sons=[filter_query_editor, filter_active_filters], togglable=True, toggled='persistent', outline_complete=True, ) main_stack.insert(filters_area) # -------------------------------------------------------------------------- # RESOURCES # the resources part is made of a Tabs (Geographic, List), resources_as_gmap = GoogleMap( page=page, title='Geographic view', domid='resources-map', # tab's sons preferably turn this off togglable=False, query=sq_resource, query_all=query_resource_all, # this key is the one issued by google googlemap_api_key=ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key=main_query_init_key, checkboxes=True, # center on Paris latitude=49., longitude=9, zoom=4, ) resources_as_3dmap = SensLabMap( page=page, title='3D Map', domid='senslabmap', query=sq_resource, query_all=query_resource_all, ) resources_as_list = QueryTable( page=page, domid='resources-list', title='List view', # this is the query at the core of the slice list query=sq_resource, query_all=query_resource_all, init_key=main_query_init_key, checkboxes=True, datatables_options={ 'iDisplayLength': 25, 'bLengthChange': True, 'bAutoWidth': True, }, ) if insert_grid: resources_as_grid = QueryGrid( page=page, domid='resources-grid', title='Grid view', # this is the query at the core of the slice list query=sq_resource, query_all=query_resource_all, init_key=main_query_init_key, checkboxes=True, ) if do_query_leases: resources_as_scheduler = Scheduler( page=page, title='Scheduler', domid='scheduler', query=sq_resource, query_all_resources=query_resource_all, query_lease=sq_lease, ) # with the new 'Filter' stuff on top, no need for anything but the querytable resources_as_list_area = resources_as_list resources_sons = [ resources_as_gmap, resources_as_3dmap, resources_as_scheduler, resources_as_list_area, ] if do_query_leases else [ resources_as_gmap, resources_as_3dmap, resources_as_list_area, ] if insert_grid: resources_sons.append(resources_as_grid) resources_area = Tabs( page=page, domid="resources", togglable=True, title="Resources", outline_complete=True, sons=resources_sons, active_domid='resources-map', persistent_active=True, ) main_stack.insert(resources_area) # -------------------------------------------------------------------------- # USERS if do_query_users and query_user_all is not None: tab_users = Tabs( page=page, domid='users', outline_complete=True, togglable=True, title='Users', active_domid='users-list', ) main_stack.insert(tab_users) tab_users.insert( QueryTable( page=page, title='Users List', domid='users-list', # tab's sons preferably turn this off togglable=False, # this is the query at the core of the slice list query=sq_user, query_all=query_user_all, checkboxes=True, datatables_options={ 'iDisplayLength': 25, 'bLengthChange': True, 'bAutoWidth': True, }, )) # DEMO # -------------------------------------------------------------------------- # MEASUREMENTS measurements_stats_cpu = SliceStat(title="CPU Usage", domid='resources-stats-cpu', page=page, stats='slice', key='hrn', query='none', slicename=slicename, o='cpu') measurements_stats_mem = SliceStat(title="Memory Usage", domid='resources-stats-mem', page=page, stats='slice', key='hrn', query='none', slicename=slicename, o='mem') measurements_stats_asb = SliceStat(title="Traffic Sent", domid='resources-stats-asb', page=page, stats='slice', key='hrn', query='none', slicename=slicename, o='asb') measurements_stats_arb = SliceStat(title="Traffic Received", domid='resources-stats-arb', page=page, stats='slice', key='hrn', query='none', slicename=slicename, o='arb') tab_measurements = Tabs( page=page, domid="measurements", togglable=True, toggled='persistent', title="Measurements", outline_complete=True, sons=[ measurements_stats_cpu, measurements_stats_mem, measurements_stats_asb, measurements_stats_arb ], active_domid='resources-stats-cpu', persistent_active=True, ) main_stack.insert(tab_measurements) # tab_measurements = Tabs ( # page = page, # active_domid = 'measurements-list', # outline_complete = True, # togglable = True, # title = 'Measurements', # domid = 'measurements', # ) # main_stack.insert(tab_measurements) # # tab_measurements.insert(QueryTable( # page = page, # title = 'Measurements', # domid = 'measurements-list', # # tab's sons preferably turn this off # togglable = False, # # this is the query at the core of the slice list # query = sq_measurement, # # do NOT set checkboxes to False # # this table being otherwise empty, it just does not fly with dataTables # checkboxes = True, # datatables_options = { # 'iDisplayLength' : 25, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # )) # # # -------------------------------------------------------------------------- # # MESSAGES (we use transient=False for now) if insert_messages: main_stack.insert( Messages( page=page, title="Runtime messages for slice %s" % slicename, domid="msgs-pre", levels="ALL", # plain messages are probably less nice for production but more reliable for development for now transient=False, # these make sense only in non-transient mode.. togglable=True, toggled='persistent', outline_complete=True, )) # variables that will get passed to the view-unfold1.html template template_env = {} # define 'unfold_main' to the template engine - the main contents template_env['unfold_main'] = main_stack.render(request) # more general variables expected in the template template_env['title'] = '%(slicename)s' % locals() # the menu items on the top template_env['topmenu_items'] = topmenu_items_live('Slice', page) # so we can sho who is logged template_env['username'] = the_user(request) template_env['theme'] = self.theme # don't forget to run the requests page.expose_js_metadata() # the prelude object in page contains a summary of the requirements() for all plugins # define {js,css}_{files,chunks} template_env.update(page.prelude_env()) return render_to_response('view-unfold1.html', template_env, context_instance=RequestContext(request))
def get_or_post(self, request, method): template_name = "slice-control-view.html" page = Page(self.request) page.add_js_files([ "js/jquery-1.11.1.js", "js/my_account.register.js", "js/my_account.edit_profile.js" ]) page.add_css_files(["css/plugin.css"]) # "css/onelab.css" image_list = None current_slice = None user_image_list = [] node_list = [] freq_list = [] allow_ssh = True allow_crt = True allow_img = True supp_file = None show_lab = False lab_ref = None lab_param_list = [] # vnc_link_access = None # vnc = False usera = UserAccessProfile(self.request) user = usera.user_obj # get_user_by_email(the_user(self.request)) if usera.access_all is False: user_image_list = UserImage.objects.filter( user_ref=user, username=usera.session_username).all() elif user: user_image_list = UserImage.objects.filter(user_ref=user).all() user_type = usera.user_type # get_user_type(user) slice_id = page.request.session.get('slice_id', None) stype = page.request.session.get('stype', None) t = '' if not slice_id or not slice_on_time(page.request, stype): # messages.error(page.request, 'Error: You have not permission to access this page.') return HttpResponseRedirect("/portal/lab/current/") if slice_id: if stype == "omf": current_slice = Reservation.objects.get(id=slice_id) node_list = ReservationDetail.objects.filter( reservation_ref=current_slice) freq_list = ReservationFrequency.objects.filter( reservation_ref=current_slice) image_list = TestbedImage.objects.all() t = 'Testbeds Remote Control Panel' elif stype == "sim": current_slice = SimReservation.objects.get(id=slice_id) node_list = SimReservation.objects.filter( id=slice_id) # current_slice.vm_ref image_list = SimulationImage.objects.all() t = 'Simulation Remote Control Panel' # active_page = page.request.session.get('active_page','0') if not current_slice: return HttpResponseRedirect("/portal/lab/current/") if user_type == 3: allow_crt, allow_img, allow_ssh, supp_file, lab_ref, lab_param_list = get_control_options( stype, current_slice) if lab_ref: show_lab = True output_script = '' template_env = { 'topmenu_items': topmenu_items('Control Panel', page.request), # 'errors': errors, 'image_list': image_list, 'slice_id': slice_id, 'deadline': current_slice.end_time, 'user_image_list': user_image_list, 'node_list': node_list, 'freq_list': freq_list, 'output': output_script, 'username': usera.username, # the_user(self.request), 'user_id': user.id, 'title': t, 'stype': stype, 'allow_ssh': allow_ssh, 'allow_crt': allow_crt, 'allow_img': allow_img, 'supp_file': supp_file, 'show_lab': show_lab, 'lab_ref': lab_ref, 'lab_param_list': lab_param_list, 'vnc_link_access': "http://" + BACKENDIP + ":6080/vnc.html", 'terminal_ip': "https://" + BACKENDIP + ":4200/" # 'vnc' :vnc, } template_env.update(page.prelude_env()) return render(request, template_name, template_env)
def get_or_post(self, request, method): errors = [] # @qursaan: get authorities from db authorities = Authority.objects.all() if authorities is not None: authorities = sorted(authorities) # get all supervisors supervisors = MyUser.objects.filter(user_type=2) # get all quotas quotas = Quota.objects.all() # @qursaan: change to user table # user_details = User.objects.all() # execute_admin_query(self.request, user_query) page = Page(request) page.add_js_files([ "js/jquery-1.11.1.js", "js/my_account.register.js", ]) page.add_css_files([ "css/registration.css", ]) if method == 'POST': # @qursaan: get post values # get_email = PendingUser.objects.get(email) reg_fname = request.POST.get('firstname', '') reg_lname = request.POST.get('lastname', '') reg_auth = request.POST.get('authority_hrn', '') reg_username = request.POST.get('username', '').lower() reg_email = request.POST.get('email', '').lower() reg_password = request.POST.get('password', '') # request.POST['password'] reg_usertype = request.POST.get('usertype', '') reg_supervisor = request.POST.get('supervisor', '') reg_quota = request.POST.get('quota', '') form = CaptchaTestForm(request.POST) if not form.is_valid(): errors.append('Invalid Captcha') if not errors: errors = UserModules.create_user_account( errors, reg_email, reg_username, reg_password, reg_fname, reg_lname, reg_auth, reg_usertype, reg_supervisor, reg_quota) if not errors: return render(request, 'user_register_complete.html') ################################################################### # Error or Get template_env = { #'topmenu_items': topmenu_items('Register', page.request), 'errors': errors, 'firstname': request.POST.get('firstname', ''), 'lastname': request.POST.get('lastname', ''), 'username': request.POST.get('username', ''), 'authority_hrn': request.POST.get('authority_hrn', ''), 'email': request.POST.get('email', ''), 'password': request.POST.get('password', ''), 'usertype': request.POST.get('usertype', ''), 'authorities': authorities, 'supervisors': supervisors, 'quotas': quotas, 'title': 'Registration', 'form': CaptchaTestForm(), } template_env.update(page.prelude_env()) return render(request, 'registration-view.html', template_env)
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", "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(): if key == "email": selected_email = value user_query = Query().get('local:user').filter_by( 'email', '==', selected_email).select('user_id', 'config', 'email', 'status') user_details = execute_admin_query(self.request, user_query) # not always found in user_details... config = {} for user_detail in user_details: user_id = user_detail['user_id'] user_email = user_detail['email'] # different significations of user_status if user_detail['status'] == 0: user_status = 'Disabled' elif user_detail['status'] == 1: user_status = 'Validation Pending' elif user_detail['status'] == 2: user_status = 'Enabled' else: user_status = 'N/A' #email = user_detail['email'] if user_detail['config']: config = json.loads(user_detail['config']) authority_hrn = config.get('authority', 'Unknown Authority') platform_query = Query().get('local:platform').select( 'platform_id', 'platform', 'gateway_type', 'disabled') account_query = Query().get('local:account').filter_by( 'user_id', '==', user_id).select('user_id', 'platform_id', 'auth_type', 'config') platform_details = execute_query(self.request, platform_query) account_details = execute_admin_query(self.request, account_query) # initial assignment needed for users having account.config = {} platform_name = '' account_type = '' account_usr_hrn = '' account_pub_key = '' account_priv_key = '' account_reference = '' my_users = '' my_slices = '' my_auths = '' ref_acc_list = '' principal_acc_list = '' user_status_list = [] platform_name_list = [] platform_name_secondary_list = [] platform_access_list = [] platform_no_access_list = [] total_platform_list = [] account_type_list = [] account_type_secondary_list = [] account_reference_list = [] delegation_type_list = [] user_cred_exp_list = [] slice_list = [] auth_list = [] slice_cred_exp_list = [] auth_cred_exp_list = [] usr_hrn_list = [] pub_key_list = [] for platform_detail in platform_details: if 'sfa' in platform_detail['gateway_type']: total_platform = platform_detail['platform'] total_platform_list.append(total_platform) for account_detail in account_details: if platform_detail['platform_id'] == account_detail[ 'platform_id']: platform_name = platform_detail['platform'] if 'config' in account_detail and account_detail[ 'config'] is not '': account_config = json.loads(account_detail['config']) account_usr_hrn = account_config.get('user_hrn', 'N/A') account_pub_key = account_config.get( 'user_public_key', 'N/A') account_reference = account_config.get( 'reference_platform', 'N/A') # credentials of myslice platform if 'myslice' in platform_detail['platform']: acc_user_cred = account_config.get( 'delegated_user_credential', 'N/A') acc_slice_cred = account_config.get( 'delegated_slice_credentials', 'N/A') acc_auth_cred = account_config.get( 'delegated_authority_credentials', 'N/A') #usr_hrn of myslice platform. used to check pi or no account_usr_hrn_myslice = account_config.get( 'user_hrn', 'N/A') if 'N/A' not in acc_user_cred: exp_date = re.search('<expires>(.*)</expires>', acc_user_cred) if exp_date: user_exp_date = exp_date.group(1) user_cred_exp_list.append(user_exp_date) my_users = [{ 'cred_exp': t[0] } for t in zip(user_cred_exp_list)] if 'N/A' not in acc_slice_cred: for key, value in acc_slice_cred.iteritems(): slice_list.append(key) # get cred_exp date exp_date = re.search('<expires>(.*)</expires>', value) if exp_date: exp_date = exp_date.group(1) slice_cred_exp_list.append(exp_date) my_slices = [{ 'slice_name': t[0], 'cred_exp': t[1] } for t in zip(slice_list, slice_cred_exp_list)] if 'N/A' not in acc_auth_cred: for key, value in acc_auth_cred.iteritems(): auth_list.append(key) #get cred_exp date exp_date = re.search('<expires>(.*)</expires>', value) if exp_date: exp_date = exp_date.group(1) auth_cred_exp_list.append(exp_date) my_auths = [{ 'auth_name': t[0], 'cred_exp': t[1] } for t in zip(auth_list, auth_cred_exp_list)] # for reference accounts if 'reference' in account_detail['auth_type']: account_type = 'Reference' delegation = 'N/A' platform_name_secondary_list.append(platform_name) account_type_secondary_list.append(account_type) account_reference_list.append(account_reference) ref_acc_list = [{ 'platform_name': t[0], 'account_type': t[1], 'account_reference': t[2] } for t in zip(platform_name_secondary_list, account_type_secondary_list, account_reference_list)] elif 'managed' in account_detail['auth_type']: account_type = 'Principal' delegation = 'Automatic' else: account_type = 'Principal' delegation = 'Manual' # for principal (auth_type=user/managed) accounts if 'reference' not in account_detail['auth_type']: platform_name_list.append(platform_name) account_type_list.append(account_type) delegation_type_list.append(delegation) usr_hrn_list.append(account_usr_hrn) pub_key_list.append(account_pub_key) user_status_list.append(user_status) # combining 5 lists into 1 [to render in the template] principal_acc_list = [{ 'platform_name': t[0], 'account_type': t[1], 'delegation_type': t[2], 'usr_hrn': t[3], 'usr_pubkey': t[4], 'user_status': t[5], } for t in zip(platform_name_list, account_type_list, delegation_type_list, usr_hrn_list, pub_key_list, user_status_list)] # to hide private key row if it doesn't exist if 'myslice' in platform_detail['platform']: account_config = json.loads(account_detail['config']) account_priv_key = account_config.get( 'user_private_key', 'N/A') if 'sfa' in platform_detail['gateway_type']: platform_access = platform_detail['platform'] platform_access_list.append(platform_access) # Removing the platform which already has access for platform in platform_access_list: total_platform_list.remove(platform) # we could use zip. this one is used if columns have unequal rows platform_list = [{ 'platform_no_access': t[0] } for t in itertools.izip_longest(total_platform_list)] ## check pi or no pi_status = self.request.session['user']['pi'] context = super(UserView, self).get_context_data(**kwargs) context['principal_acc'] = principal_acc_list context['ref_acc'] = ref_acc_list context['platform_list'] = platform_list context['my_users'] = my_users context['my_slices'] = my_slices context['my_auths'] = my_auths context['user_status'] = user_status context['user_email'] = user_email context['firstname'] = config.get('firstname', "?") context['lastname'] = config.get('lastname', "?") context['fullname'] = context['firstname'] + ' ' + context['lastname'] context['authority'] = config.get('authority', "Unknown Authority") context['user_private_key'] = account_priv_key context['pi'] = pi_status # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('My Account', page) # so we can sho who is logged context['username'] = the_user(self.request) context['theme'] = self.theme # context ['firstname'] = config['firstname'] prelude_env = page.prelude_env() context.update(prelude_env) return context
<<<<<<< HEAD #user_query = Query().get('user').select('user_hrn').filter_by('user_hrn','==','$user_hrn') #user_hrn = execute_query(self.request, user_query) #self.user_hrn = user_hrn[0].get('user_hrn') ======= # acc_auth_cred = account_config.get('delegated_authority_credentials','N/A') pi = request.session['user']['pi'] # Page rendering >>>>>>> onelab page = Page(request) page.add_js_files ( [ "js/jquery.validate.js", "js/jquery-ui.js" ] ) page.add_css_files ( [ "css/jquery-ui.css" ] ) page.expose_js_metadata() if method == 'POST': # The form has been submitted if request.is_secure(): current_site = 'https://' else: current_site = 'http://' current_site += request.META['HTTP_HOST'] #if theme.theme != 'fed4fire' or self.theme != 'onelab': # getting the authority_hrn from the selected organization # for authority in authorities:
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/account_view.css", "css/plugin.css"]) # @qursaan # user_details = MyUser.objects.filter(email=the_user(self.request)) # user_query = Query().get('local:user').select('config','email','status') # user_details = execute_query(self.request, user_query) usera = UserAccessProfile(self.request) user_detail = usera.user_obj # get_user_by_email(the_user(self.request)) # not always found in user_details... config = {} user_status = 'N/A' user_fname = '?' user_lname = '?' user_authu = 'Unknown Authority' # for user_detail in user_details: if user_detail: # different significations of user_status if user_detail.status == 0: user_status = 'Disabled' elif user_detail.status == 1: user_status = 'Validation Pending' elif user_detail.status == 2: user_status = 'Enabled' else: user_status = 'N/A' user_fname = user_detail.first_name user_lname = user_detail.last_name user_authu = user_detail.authority_hrn context = super(AccountView, self).get_context_data(**kwargs) # context['principal_acc'] = principal_acc_list # context['ref_acc'] = ref_acc_list # context['platform_list'] = platform_list # context['my_users'] = my_users # context['my_slices'] = my_slices # context['my_auths'] = my_auths context['user_status'] = user_status context['person'] = self.request.user context['firstname'] = user_fname # config.get('firstname',"?") context['lastname'] = user_lname # config.get('lastname',"?") context['fullname'] = context['firstname'] + ' ' + context['lastname'] context[ 'authority'] = user_authu # config.get('authority',"Unknown Authority") # context['user_private_key'] = account_priv_key # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Account Information' # the menu items on the top context['topmenu_items'] = topmenu_items( 'My Account', page.request) # @qursaan change from _live # so we can sho who is logged context['username'] = usera.username prelude_env = page.prelude_env() context.update(prelude_env) return context
def get_or_post(self, request, method): errors = [] # List authorities already in the Registry in order to avoid duplicates # Using cache manifold-tables to get the list of authorities faster authorities_query = Query.get("authority").select("name", "authority_hrn") authorities = execute_admin_query(request, authorities_query) if authorities is not None: authorities = sorted(authorities) root_authorities = sorted([a for a in authorities if "." not in a["authority_hrn"]]) page = Page(request) page.add_js_files(["js/jquery.validate.js", "js/join.js"]) page.add_css_files(["css/onelab.css", "css/registration.css"]) page.add_css_files(["http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"]) if method == "POST": # xxx tocheck - if authorities is empty, it's no use anyway # (users won't be able to validate the form anyway) # List local users in Manifold DB in order ot avoid duplicates user_query = Query().get("local:user").select("user_id", "email") list_users = execute_admin_query(self.request, user_query) reg_root_authority_hrn = request.POST.get("root_authority_hrn", "").lower() 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_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_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)) UserModel = get_user_model() reg_address_line1 = request.POST.get("address_line1", "") reg_address_line2 = request.POST.get("address_line2", "") reg_address_line3 = request.POST.get("address_line3", "") reg_address_city = request.POST.get("address_city", "") reg_address_postalcode = request.POST.get("address_postalcode", "") reg_address_state = request.POST.get("address_state", "") reg_address_country = request.POST.get("address_country", "") # 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.") 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): 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.") for user_detail in list_users: if user_detail["email"] == reg_email: 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']: from Crypto.PublicKey import RSA private = RSA.generate(1024) private_key = json.dumps(private.exportKey()) public = private.publickey() public_key = json.dumps(public.exportKey(format="OpenSSH")) # Saving to DB account_config = ( '{"user_public_key":' + public_key + ', "user_private_key":' + private_key + ', "user_hrn":"' + user_hrn + '"}' ) auth_type = "managed" public_key = public_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_abbreviated_name=reg_site_abbreviated_name, site_url=reg_site_url, site_latitude=reg_site_latitude, site_longitude=reg_site_longitude, address_line1=reg_address_line1, address_line2=reg_address_line2, address_line3=reg_address_line3, address_city=reg_address_city, address_postalcode=reg_address_postalcode, address_state=reg_address_state, address_country=reg_address_country, authority_hrn=reg_root_authority_hrn, ) 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, keypair=account_config, pi=reg_auth, ) b.save() # saves the user to django auth_user table [needed for password reset] 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) # 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) # Send email ctx = { "first_name": reg_fname, "last_name": reg_lname, "authority_hrn": reg_auth, "email": reg_email, "user_hrn": user_hrn, "public_key": public_key, } recipients = authority_get_pi_emails(request, reg_auth) # We don't need to send this email to user. # it's for the PI only # if ctx['cc_myself']: # recipients.append(ctx['email']) msg = render_to_string("user_request_email.txt", ctx) send_mail( "Onelab New Authority request for %s submitted" % reg_email, msg, "*****@*****.**", recipients ) return render(request, "user_register_complete.html") template_env = { "topmenu_items": topmenu_items_live("join", page), "errors": errors, "pi_first_name": request.POST.get("pi_first_name", ""), "pi_last_name": request.POST.get("pi_last_name", ""), "pi_email": request.POST.get("pi_email", ""), "pi_phone": request.POST.get("pi_phone", ""), "pi_password": request.POST.get("pi_password", ""), "site_name": request.POST.get("site_name", ""), "site_authority": request.POST.get("site_authority", "").lower(), "site_abbreviated_name": request.POST.get("site_abbreviated_name", ""), "site_url": request.POST.get("site_url", ""), "site_latitude": request.POST.get("site_latitude", ""), "site_longitude": request.POST.get("site_longitude", ""), "address_line1": request.POST.get("address_line1", ""), "address_line2": request.POST.get("address_line2", ""), "address_line3": request.POST.get("address_line3", ""), "address_city": request.POST.get("address_city", ""), "address_postalcode": request.POST.get("address_postalcode", ""), "address_state": request.POST.get("address_state", ""), "address_country": request.POST.get("address_country", ""), "root_authority_hrn": request.POST.get("root_authority_hrn", "").lower(), "root_authorities": root_authorities, "authorities": authorities, } template_env.update(page.prelude_env()) return render(request, "join_view.html", template_env)
def get_context_data(self, **kwargs): page = Page(self.request) page.add_js_files ( [ "js/common.functions.js" ] ) #platform_query = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform','platform_longname','gateway_type') #platform_query = Query().get('local:platform').select('platform','platform_longname','gateway_type') email_list = [] status_list = [] authority_list = [] config={} user_query = Query().get('local:user').select('email','status','config') user_details = execute_admin_query(self.request, user_query) for user in user_details: # get email email_list.append(user['email']) # get status if user['status'] == 0: user_status = 'Disabled' elif user['status'] == 1: user_status = 'Validation Pending' elif user['status'] == 2: user_status = 'Enabled' else: user_status = 'N/A' status_list.append(user_status) #get authority #if user['config']: user_config = json.loads(user['config']) user_authority = user_config.get('authority','N/A') authority_list.append(user_authority) user_list = [{'email': t[0], 'status': t[1], 'authority':t[2]} for t in zip(email_list, status_list, authority_list)] #page.enqueue_query(user_query) #page.expose_js_metadata() #userlist = QueryTable( # page = page, # title = 'List', # domid = 'checkboxes', # # this is the query at the core of the slice list # query = user_query, # query_all = user_query, # checkboxes = False, # init_key = 'user', # datatables_options = { # 'iDisplayLength': 10, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, #) context = super(UsersView, self).get_context_data(**kwargs) context['person'] = self.request.user context['user_list'] = user_list # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Users in MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('Users', page) # so we can sho who is logged context['username'] = the_user(self.request) context.update(page.prelude_env()) context['layout_1_or_2']="layout-unfold2.html" if not context['username'] else "layout-unfold1.html" return context
def get (self,request, slicename=tmp_default_slice): page = Page(request) page.add_css_files ('css/slice-view.css') page.add_js_files ( [ "js/common.functions.js" ] ) page.add_js_chunks ('$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });') page.add_js_chunks ('$(function() { messages.debug("sliceview: users turned %s"); });'%("on" if do_query_users else "off")) page.add_js_chunks ('$(function() { messages.debug("sliceview: leases turned %s"); });'%("on" if do_query_leases else "off")) page.add_js_chunks ('$(function() { messages.debug("manifold URL %s"); });'%(ConfigEngine().manifold_url())) metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] user_md = metadata.details_by_object('user') user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']] # TODO The query to run is embedded in the URL main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) main_query.select( 'slice_hrn', #'resource.hrn', 'resource.urn', 'resource.hostname', 'resource.type', 'resource.network_hrn', 'lease.urn', 'user.user_hrn', #'application.measurement_point.counter' ) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hostname' query_resource_all = Query.get('resource').select(resource_fields) aq = AnalyzedQuery(main_query, metadata=metadata) page.enqueue_query(main_query, analyzed_query=aq) page.enqueue_query(query_resource_all) if do_query_users: # Required: the user must have an authority in its user.config # XXX Temporary solution user_query = Query().get('local:user').select('config','email') user_details = execute_query(self.request, user_query) # not always found in user_details... config={} # for user_detail in user_details: # #email = user_detail['email'] # if user_detail['config']: # config = json.loads(user_detail['config']) # user_detail['authority'] = config.get('authority',"Unknown Authority") # # if user_detail['authority'] is not None: # sub_authority = user_detail['authority'].split('.') # root_authority = sub_authority[0] # query_user_all = Query.get(root_authority+':user').select(user_fields) # # # XXX TODO this filter doesn't work - to be improved in Manifold # #.filter_by('authority.authority_hrn', '=', user_detail['authority']) # # page.enqueue_query(query_user_all) # else: # print "authority of the user is not in local:user db" query_user_all = Query.get('user').select(user_fields) # query_user_all = None # ... and for the relations # XXX Let's hardcode resources for now sq_resource = aq.subquery('resource') sq_user = aq.subquery('user') sq_lease = aq.subquery('lease') sq_measurement = aq.subquery('measurement') # Prepare the display according to all metadata # (some parts will be pending, others can be triggered by users). # # For example slice measurements will not be requested by default... # Create the base layout (Stack)... main_stack = Stack ( page=page, title="Slice %s"%slicename, sons=[], ) # ... responsible for the slice properties... # a nice header main_stack.insert ( Raw (page=page, togglable=False, toggled=True, html="<h2 class='well well-lg'> Slice %s</h2>"%slicename) ) # -------------------------------------------------------------------------- # QueryUpdater (Pending Operations) main_stack.insert(QueryUpdater( page = page, title = 'Pending operations', query = main_query, togglable = True, # start turned off, it will open up itself when stuff comes in toggled = False, domid = 'pending', outline_complete = True, )) # -------------------------------------------------------------------------- # Filter Resources # turn off for now -- see above filter_query_editor = QueryEditor( page = page, query = sq_resource, query_all = query_resource_all, title = "Select Columns", domid = 'select-columns', ) filter_active_filters = ActiveFilters( page = page, query = sq_resource, title = "Active Filters", ) filters_area = Stack( page = page, title = 'Filter Resources', domid = 'filters', sons = [filter_query_editor, filter_active_filters], togglable = True, toggled = 'persistent', outline_complete = True, ) main_stack.insert (filters_area) # -------------------------------------------------------------------------- # RESOURCES # the resources part is made of a Tabs (Geographic, List), resources_as_gmap = GoogleMap( page = page, title = 'Geographic view', domid = 'resources-map', # tab's sons preferably turn this off togglable = False, query = sq_resource, query_all = query_resource_all, # this key is the one issued by google googlemap_api_key = ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key = main_query_init_key, checkboxes = True, # center on Paris latitude = 49., longitude = 9, zoom = 4, ) resources_as_3dmap = SensLabMap( page = page, title = '3D Map', domid = 'senslabmap', query = sq_resource, query_all = query_resource_all, ) resources_as_list = QueryTable( page = page, domid = 'resources-list', title = 'List view', # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, init_key = main_query_init_key, checkboxes = True, datatables_options = { 'iDisplayLength': 25, 'bLengthChange' : True, 'bAutoWidth' : True, }, ) if insert_grid: resources_as_grid = QueryGrid( page = page, domid = 'resources-grid', title = 'Grid view', # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, init_key = main_query_init_key, checkboxes = True, ) #if do_query_leases: # resources_as_scheduler = Scheduler( # page = page, # title = 'Scheduler', # domid = 'scheduler', # query = sq_resource, # query_all_resources = query_resource_all, # query_lease = sq_lease, # ) resources_as_scheduler2 = Scheduler2( page = page, domid = 'scheduler', title = 'Scheduler', # this is the query at the core of the slice list query = sq_resource, query_all_resources = query_resource_all, query_lease = sq_lease, ) # with the new 'Filter' stuff on top, no need for anything but the querytable resources_as_list_area = resources_as_list resources_sons = [ resources_as_gmap, resources_as_3dmap, resources_as_scheduler2, resources_as_list_area, ] if do_query_leases else [ resources_as_gmap, resources_as_3dmap, resources_as_list_area, resources_as_scheduler2, ] if insert_grid: resources_sons.append(resources_as_grid) resources_area = Tabs ( page=page, domid="resources", togglable=True, title="Resources", outline_complete=True, sons= resources_sons, active_domid = 'scheduler', persistent_active=True, ) main_stack.insert (resources_area) # -------------------------------------------------------------------------- # USERS if do_query_users and query_user_all is not None: tab_users = Tabs( page = page, domid = 'users', outline_complete = True, togglable = True, title = 'Users', active_domid = 'users-list', ) main_stack.insert(tab_users) tab_users.insert(QueryTable( page = page, title = 'Users List', domid = 'users-list', # tab's sons preferably turn this off togglable = False, # this is the query at the core of the slice list query = sq_user, query_all = query_user_all, checkboxes = True, datatables_options = { 'iDisplayLength' : 25, 'bLengthChange' : True, 'bAutoWidth' : True, }, )) # DEMO # -------------------------------------------------------------------------- # MEASUREMENTS measurements_stats_cpu = SliceStat( title = "CPU Usage", domid = 'resources-stats-cpu', page = page, stats = 'slice', key = 'hrn', query = 'none', slicename = slicename, o = 'cpu' ) measurements_stats_mem = SliceStat( title = "Memory Usage", domid = 'resources-stats-mem', page = page, stats = 'slice', key = 'hrn', query = 'none', slicename = slicename, o = 'mem' ) measurements_stats_asb = SliceStat( title = "Traffic Sent", domid = 'resources-stats-asb', page = page, stats = 'slice', key = 'hrn', query = 'none', slicename = slicename, o = 'asb' ) measurements_stats_arb = SliceStat( title = "Traffic Received", domid = 'resources-stats-arb', page = page, stats = 'slice', key = 'hrn', query = 'none', slicename = slicename, o = 'arb' ) tab_measurements = Tabs ( page=page, domid = "measurements", togglable = True, toggled = 'persistent', title = "Measurements", outline_complete=True, sons = [ measurements_stats_cpu, measurements_stats_mem, measurements_stats_asb, measurements_stats_arb ], active_domid = 'resources-stats-cpu', persistent_active = True, ) main_stack.insert (tab_measurements) # tab_measurements = Tabs ( # page = page, # active_domid = 'measurements-list', # outline_complete = True, # togglable = True, # title = 'Measurements', # domid = 'measurements', # ) # main_stack.insert(tab_measurements) # # tab_measurements.insert(QueryTable( # page = page, # title = 'Measurements', # domid = 'measurements-list', # # tab's sons preferably turn this off # togglable = False, # # this is the query at the core of the slice list # query = sq_measurement, # # do NOT set checkboxes to False # # this table being otherwise empty, it just does not fly with dataTables # checkboxes = True, # datatables_options = { # 'iDisplayLength' : 25, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # )) # # # -------------------------------------------------------------------------- # # MESSAGES (we use transient=False for now) if insert_messages: main_stack.insert(Messages( page = page, title = "Runtime messages for slice %s"%slicename, domid = "msgs-pre", levels = "ALL", # plain messages are probably less nice for production but more reliable for development for now transient = False, # these make sense only in non-transient mode.. togglable = True, toggled = 'persistent', outline_complete = True, )) # variables that will get passed to the view-unfold1.html template template_env = {} # define 'unfold_main' to the template engine - the main contents template_env [ 'unfold_main' ] = main_stack.render(request) # more general variables expected in the template template_env [ 'title' ] = '%(slicename)s'%locals() # the menu items on the top template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) # so we can sho who is logged template_env [ 'username' ] = the_user (request) # don't forget to run the requests page.expose_js_metadata() # the prelude object in page contains a summary of the requirements() for all plugins # define {js,css}_{files,chunks} template_env.update(page.prelude_env()) return render_to_response ('view-unfold1.html',template_env, context_instance=RequestContext(request))
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" ] ) user_query = Query().get('local:user').select('config','email','status') user_details = execute_query(self.request, user_query) # not always found in user_details... config={} for user_detail in user_details: # different significations of user_status if user_detail['status'] == 0: user_status = 'Disabled' elif user_detail['status'] == 1: user_status = 'Validation Pending' elif user_detail['status'] == 2: user_status = 'Enabled' else: user_status = 'N/A' #email = user_detail['email'] if user_detail['config']: config = json.loads(user_detail['config']) 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') platform_details = execute_query(self.request, platform_query) account_details = execute_query(self.request, account_query) # initial assignment needed for users having account.config = {} platform_name = '' account_type = '' account_usr_hrn = '' account_pub_key = '' account_priv_key = '' account_reference = '' my_users = '' my_slices = '' my_auths = '' ref_acc_list = '' principal_acc_list = '' user_status_list = [] platform_name_list = [] platform_name_secondary_list = [] platform_access_list = [] platform_no_access_list = [] total_platform_list = [] account_type_list = [] account_type_secondary_list = [] account_reference_list = [] delegation_type_list = [] user_cred_exp_list = [] slice_list = [] auth_list = [] slice_cred_exp_list = [] auth_cred_exp_list = [] usr_hrn_list = [] pub_key_list = [] for platform_detail in platform_details: if 'sfa' in platform_detail['gateway_type']: total_platform = platform_detail['platform'] total_platform_list.append(total_platform) for account_detail in account_details: if platform_detail['platform_id'] == account_detail['platform_id']: platform_name = platform_detail['platform'] account_config = json.loads(account_detail['config']) account_usr_hrn = account_config.get('user_hrn','N/A') account_pub_key = account_config.get('user_public_key','N/A') account_reference = account_config.get ('reference_platform','N/A') # credentials of myslice platform if 'myslice' in platform_detail['platform']: acc_user_cred = account_config.get('delegated_user_credential','N/A') acc_slice_cred = account_config.get('delegated_slice_credentials','N/A') acc_auth_cred = account_config.get('delegated_authority_credentials','N/A') if 'N/A' not in acc_user_cred: exp_date = re.search('<expires>(.*)</expires>', acc_user_cred) if exp_date: user_exp_date = exp_date.group(1) user_cred_exp_list.append(user_exp_date) my_users = [{'cred_exp': t[0]} for t in zip(user_cred_exp_list)] if 'N/A' not in acc_slice_cred: for key, value in acc_slice_cred.iteritems(): slice_list.append(key) # get cred_exp date exp_date = re.search('<expires>(.*)</expires>', value) if exp_date: exp_date = exp_date.group(1) slice_cred_exp_list.append(exp_date) my_slices = [{'slice_name': t[0], 'cred_exp': t[1]} for t in zip(slice_list, slice_cred_exp_list)] if 'N/A' not in acc_auth_cred: for key, value in acc_auth_cred.iteritems(): auth_list.append(key) #get cred_exp date exp_date = re.search('<expires>(.*)</expires>', value) if exp_date: exp_date = exp_date.group(1) auth_cred_exp_list.append(exp_date) my_auths = [{'auth_name': t[0], 'cred_exp': t[1]} for t in zip(auth_list, auth_cred_exp_list)] # for reference accounts if 'reference' in account_detail['auth_type']: account_type = 'Reference' delegation = 'N/A' platform_name_secondary_list.append(platform_name) account_type_secondary_list.append(account_type) account_reference_list.append(account_reference) ref_acc_list = [{'platform_name': t[0], 'account_type': t[1], 'account_reference': t[2]} for t in zip(platform_name_secondary_list, account_type_secondary_list, account_reference_list)] elif 'managed' in account_detail['auth_type']: account_type = 'Principal' delegation = 'Automatic' else: account_type = 'Principal' delegation = 'Manual' # for principal (auth_type=user/managed) accounts if 'reference' not in account_detail['auth_type']: platform_name_list.append(platform_name) account_type_list.append(account_type) delegation_type_list.append(delegation) usr_hrn_list.append(account_usr_hrn) pub_key_list.append(account_pub_key) user_status_list.append(user_status) # combining 5 lists into 1 [to render in the template] principal_acc_list = [{'platform_name': t[0], 'account_type': t[1], 'delegation_type': t[2], 'usr_hrn':t[3], 'usr_pubkey':t[4], 'user_status':t[5],} for t in zip(platform_name_list, account_type_list, delegation_type_list, usr_hrn_list, pub_key_list, user_status_list)] # to hide private key row if it doesn't exist if 'myslice' in platform_detail['platform']: account_config = json.loads(account_detail['config']) account_priv_key = account_config.get('user_private_key','N/A') if 'sfa' in platform_detail['gateway_type']: platform_access = platform_detail['platform'] platform_access_list.append(platform_access) # Removing the platform which already has access for platform in platform_access_list: total_platform_list.remove(platform) # we could use zip. this one is used if columns have unequal rows platform_list = [{'platform_no_access': t[0]} for t in itertools.izip_longest(total_platform_list)] context = super(AccountView, self).get_context_data(**kwargs) context['principal_acc'] = principal_acc_list context['ref_acc'] = ref_acc_list context['platform_list'] = platform_list context['my_users'] = my_users context['my_slices'] = my_slices context['my_auths'] = my_auths context['user_status'] = user_status context['person'] = self.request.user context['firstname'] = config.get('firstname',"?") context['lastname'] = config.get('lastname',"?") context['fullname'] = context['firstname'] +' '+ context['lastname'] context['authority'] = config.get('authority',"Unknown Authority") context['user_private_key'] = account_priv_key # XXX This is repeated in all pages # more general variables expected in the template context['title'] = 'Platforms connected to MySlice' # the menu items on the top context['topmenu_items'] = topmenu_items_live('My Account', page) # so we can sho who is logged context['username'] = the_user(self.request) # context ['firstname'] = config['firstname'] prelude_env = page.prelude_env() context.update(prelude_env) return context
def get_or_post(self, request, method): errors = [] # List authorities already in the Registry in order to avoid duplicates # Using cache manifold-tables to get the list of authorities faster authorities_query = Query.get('authority').select( 'name', 'authority_hrn') authorities = execute_admin_query(request, authorities_query) if authorities is not None: authorities = sorted(authorities) root_authorities = sorted( [a for a in authorities if '.' not in a['authority_hrn']]) page = Page(request) page.add_js_files( ["js/jquery.validate.js", "js/join.js", "js/jquery.qtip.min.js"]) page.add_css_files([ "css/onelab.css", "css/registration.css", "css/jquery.qtip.min.css" ]) page.add_css_files([ "https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ]) if method == 'POST': # xxx tocheck - if authorities is empty, it's no use anyway # (users won't be able to validate the form anyway) # List local users in Manifold DB in order ot avoid duplicates user_query = Query().get('local:user').select('user_id', 'email') list_users = execute_admin_query(self.request, user_query) reg_root_authority_hrn = request.POST.get('root_authority_hrn', '').lower() 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', '').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 = '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(".", "_") # Replace + by _ => more convenient for testing and validate with a real email split_email = split_email.replace("+", "_") user_hrn = reg_auth + '.' + split_email UserModel = get_user_model() reg_address_line1 = request.POST.get('address_line1', '') reg_address_line2 = request.POST.get('address_line2', '') reg_address_line3 = request.POST.get('address_line3', '') reg_address_city = request.POST.get('address_city', '') reg_address_postalcode = request.POST.get('address_postalcode', '') reg_address_state = request.POST.get('address_state', '') reg_address_country = request.POST.get('address_country', '') #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.' ) if (re.search(r'^[A-Za-z0-9_ ]*$', reg_site_name) == None): errors.append( 'Name of organization may contain only letters, numbers, and underscore.' ) if (re.search(r'^[A-Za-z ]*$', reg_address_city) == None): errors.append('City may contain only letters.') if (re.search(r'^[A-Za-z ]*$', reg_address_country) == None): errors.append('Country may contain only letters.') if (re.search(r'^[A-Za-z0-9]*$', reg_site_abbreviated_name) == None): errors.append( 'Shortname may contain only letters and numbers') if (re.search(r'^[0-9]*$', reg_phone) == None): errors.append('Phone number may contain only 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_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.' ) for user_detail in list_users: if user_detail['email'] == reg_email: errors.append( 'Email already registered in Manifold. Please provide a new email address.' ) # XXX TODO: Factorize with portal/accountview.py # XXX TODO: Factorize with portal/registrationview.py # XXX TODO: Factorize with portal/joinview.py # if 'generate' in request.POST['question']: from Crypto.PublicKey import RSA private = RSA.generate(1024) private_key = private.exportKey() public_key = private.publickey().exportKey(format='OpenSSH') # Saving to DB auth_type = 'managed' if not errors: reg_password = request.POST['pi_password'] a = PendingAuthority( site_name=reg_site_name, site_authority=reg_auth, site_abbreviated_name=reg_site_abbreviated_name, site_url=reg_site_url, site_latitude=reg_site_latitude, site_longitude=reg_site_longitude, address_line1= reg_email, # XXX field name must be renamed. Email needed 4 rejection email. address_line2=reg_address_line2, address_line3=reg_address_line3, address_city=reg_address_city, address_postalcode=reg_address_postalcode, address_state=reg_address_state, address_country=reg_address_country, authority_hrn=reg_root_authority_hrn, ) a.save() reg_password = request.POST['pi_password'] salt = randint(1, 100000) if request.is_secure(): current_site = 'https://' else: current_site = 'http://' current_site += request.META['HTTP_HOST'] 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': 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) #creating user to manifold local:user #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) # Send email try: ctx = { 'site_name': reg_site_name, 'authority_hrn': reg_root_authority_hrn + '.' + reg_site_authority, 'site_abbreviated_name': reg_site_abbreviated_name, 'site_url': reg_site_url, 'address_city': reg_address_city, 'address_country': reg_address_country, 'first_name': reg_fname, 'last_name': reg_lname, 'authority_hrn': reg_auth, 'email': reg_email, 'user_hrn': user_hrn, 'public_key': public_key, } #recipients = authority_get_pi_emails(request,reg_auth) self.template_name = 'authority_request_email.html' html_content = render_to_string(self.template, ctx) self.template_name = 'authority_request_email.txt' text_content = render_to_string(self.template, ctx) self.template_name = 'authority_request_email_subject.txt' subject = render_to_string(self.template, ctx) subject = subject.replace('\n', '') #theme.template_name = 'email_default_sender.txt' #sender = render_to_string(theme.template, ctx) #sender = sender.replace('\n', '') sender = reg_email msg = EmailMultiAlternatives(subject, text_content, sender, ['*****@*****.**']) msg.attach_alternative(html_content, "text/html") msg.send() except Exception, e: logger.error( "Failed to send email, please check the mail templates and the SMTP configuration of your server" ) import traceback logger.error(traceback.format_exc()) self.template_name = 'join_complete.html' # log institution activity activity.institution.joined(self.request) return render(request, self.template, {'theme': self.theme})
def get (self,request, slicename=tmp_default_slice): page = Page(request) page.add_css_files ('css/slice-view.css') page.add_js_files ( [ "js/common.functions.js" ] ) page.add_js_chunks ('$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });') page.add_js_chunks ('$(function() { messages.debug("sliceview: users turned %s"); });'%("on" if do_query_users else "off")) page.add_js_chunks ('$(function() { messages.debug("sliceview: leases turned %s"); });'%("on" if do_query_leases else "off")) page.add_js_chunks ('$(function() { messages.debug("manifold URL %s"); });'%(ConfigEngine().manifold_url())) metadata = page.get_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] user_md = metadata.details_by_object('user') user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']] # TODO The query to run is embedded in the URL main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) main_query.select( 'slice_hrn', #'resource.hrn', 'resource.urn', 'resource.hostname', 'resource.type', 'resource.network_hrn', 'lease.urn', 'user.user_hrn', #'application.measurement_point.counter' ) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'hostname' query_resource_all = Query.get('resource').select(resource_fields) aq = AnalyzedQuery(main_query, metadata=metadata) page.enqueue_query(main_query, analyzed_query=aq) page.enqueue_query(query_resource_all) if do_query_users: # Required: the user must have an authority in its user.config # XXX Temporary solution user_query = Query().get('local:user').select('config','email') user_details = execute_query(self.request, user_query) # not always found in user_details... config={} # for user_detail in user_details: # #email = user_detail['email'] # if user_detail['config']: # config = json.loads(user_detail['config']) # user_detail['authority'] = config.get('authority',"Unknown Authority") # # if user_detail['authority'] is not None: # sub_authority = user_detail['authority'].split('.') # root_authority = sub_authority[0] # query_user_all = Query.get(root_authority+':user').select(user_fields) # # # XXX TODO this filter doesn't work - to be improved in Manifold # #.filter_by('authority.authority_hrn', '=', user_detail['authority']) # # page.enqueue_query(query_user_all) # else: # print "authority of the user is not in local:user db" query_user_all = Query.get('user').select(user_fields) # query_user_all = None # ... and for the relations # XXX Let's hardcode resources for now sq_resource = aq.subquery('resource') sq_user = aq.subquery('user') sq_lease = aq.subquery('lease') sq_measurement = aq.subquery('measurement') # Prepare the display according to all metadata # (some parts will be pending, others can be triggered by users). # # For example slice measurements will not be requested by default... # Create the base layout (Stack)... main_stack = Stack ( page=page, title="Slice %s"%slicename, sons=[], ) # ... responsible for the slice properties... # a nice header main_stack.insert ( Raw (page=page, togglable=False, toggled=True, html="<h2 class='well well-lg'> Slice %s</h2>"%slicename) ) # -------------------------------------------------------------------------- # QueryUpdater (Pending Operations) main_stack.insert(QueryUpdater( page = page, title = 'Pending operations', query = main_query, togglable = True, # start turned off, it will open up itself when stuff comes in toggled = False, domid = 'pending', outline_complete = True, )) # -------------------------------------------------------------------------- # Filter Resources # turn off for now -- see above filter_query_editor = QueryEditor( page = page, query = sq_resource, query_all = query_resource_all, title = "Select Columns", domid = 'select-columns', ) filter_active_filters = ActiveFilters( page = page, query = sq_resource, title = "Active Filters", ) filters_area = Stack( page = page, title = 'Filter Resources', domid = 'filters', sons = [filter_query_editor, filter_active_filters], togglable = True, toggled = 'persistent', outline_complete = True, ) main_stack.insert (filters_area) # -------------------------------------------------------------------------- # RESOURCES # the resources part is made of a Tabs (Geographic, List), resources_as_gmap = GoogleMap( page = page, title = 'Geographic view', domid = 'resources-map', # tab's sons preferably turn this off togglable = False, query = sq_resource, query_all = query_resource_all, # this key is the one issued by google googlemap_api_key = ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key = main_query_init_key, checkboxes = True, # center on Paris latitude = 49., longitude = 9, zoom = 4, ) resources_as_3dmap = SensLabMap( page = page, title = '3D Map', domid = 'senslabmap', query = sq_resource, query_all = query_resource_all, ) resources_as_list = QueryTable( page = page, domid = 'resources-list', title = 'List view', # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, init_key = main_query_init_key, checkboxes = True, datatables_options = { 'iDisplayLength': 25, 'bLengthChange' : True, 'bAutoWidth' : True, }, ) if insert_grid: resources_as_grid = QueryGrid( page = page, domid = 'resources-grid', title = 'Grid view', # this is the query at the core of the slice list query = sq_resource, query_all = query_resource_all, init_key = main_query_init_key, checkboxes = True, ) #if do_query_leases: # resources_as_scheduler = Scheduler( # page = page, # title = 'Scheduler', # domid = 'scheduler', # query = sq_resource, # query_all_resources = query_resource_all, # query_lease = sq_lease, # ) resources_as_scheduler2 = Scheduler2( page = page, domid = 'scheduler', title = 'Scheduler', # this is the query at the core of the slice list query = sq_resource, query_all_resources = query_resource_all, query_lease = sq_lease, )