Merge branch 'master' of ssh://git.onelab.eu/git/myslice
authorCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Thu, 20 Feb 2014 16:09:48 +0000 (17:09 +0100)
committerCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Thu, 20 Feb 2014 16:09:48 +0000 (17:09 +0100)
Conflicts:
portal/slicerequestview.py
portal/usersview.py

1  2 
portal/accountview.py
portal/manageuserview.py
portal/slicerequestview.py
portal/usersview.py

diff --combined portal/accountview.py
@@@ -12,13 -12,11 +12,13 @@@ from django.contri
  from django.contrib.auth.decorators     import login_required
  from django.core.mail                   import send_mail
  
 +from theme import ThemeView
 +
  #
  import json, os, re, itertools
  
  # requires login
 -class AccountView(LoginRequiredAutoLogoutView):
 +class AccountView(LoginRequiredAutoLogoutView, ThemeView):
      template_name = "account-view.html"
      def dispatch(self, *args, **kwargs):
          return super(AccountView, self).dispatch(*args, **kwargs)
          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)
@@@ -239,7 -236,7 +239,7 @@@ def account_process(request)
              if 'delete_'+platform_detail['platform'] in request.POST:
                  platform_id = platform_detail['platform_id']
                  user_params = {'user_id':user_id}
-                 manifold_delete_account(request,platform_id,user_params)
+                 manifold_delete_account(request,platform_id, user_id, user_params)
                  messages.info(request, 'Reference Account is removed from the selected platform')
                  return HttpResponseRedirect("/portal/account/")
  
                          updated_config = json.dumps(account_config) 
                          # updating manifold
                          user_params = { 'config': keypair, 'auth_type':'managed'}
-                         manifold_update_account(request,user_params)
+                         manifold_update_account(request, user_id, user_params)
                          # updating sfa
                          public_key = public_key.replace('"', '');
                          user_pub_key = {'keys': public_key}
                              file_content = ''.join(file_content.split())
                              #update manifold local:account table
                              user_params = { 'config': file_content, 'auth_type':'user'}
-                             manifold_update_account(request,user_params)
+                             manifold_update_account(request, user_id, user_params)
                              # updating sfa
                              user_pub_key = {'keys': file_content}
                              sfa_update_user(request, user_hrn, user_pub_key)
                                  
                              updated_config = json.dumps(account_config)
                              user_params = { 'config': updated_config, 'auth_type':'user'}
-                             manifold_update_account(request,user_params)
+                             manifold_update_account(request, user_id, user_params)
                              messages.success(request, 'Private Key deleted. You need to delegate credentials manually once it expires.')
                              messages.success(request, 'Once your credentials expire, Please delegate manually using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
                              return HttpResponseRedirect("/portal/account/")
                              user_priv_key = json.dumps(account_config.get('user_private_key','N/A'))
                              updated_config = '{"user_public_key":'+ user_pub_key + ', "user_private_key":'+ user_priv_key + ', "user_hrn":"'+ user_hrn + '"}'
                              user_params = { 'config': updated_config}
-                             manifold_update_account(request,user_params)
+                             manifold_update_account(request,user_id, user_params)
                              messages.success(request, 'All Credentials cleared')
                              return HttpResponseRedirect("/portal/account/")
                          else:
diff --combined portal/manageuserview.py
@@@ -11,12 -11,12 +11,12 @@@ from django.htt
  from django.contrib                     import messages
  from django.contrib.auth.decorators     import login_required
  from django.core.mail                   import send_mail
 -
 +from theme import ThemeView
  #
  import json, os, re, itertools
  
  # requires login
 -class UserView(LoginRequiredAutoLogoutView):
 +class UserView(LoginRequiredAutoLogoutView, ThemeView):
      template_name = "manageuserview.html"
      def dispatch(self, *args, **kwargs):
          return super(UserView, self).dispatch(*args, **kwargs)
@@@ -41,8 -41,6 +41,6 @@@
          for user_detail in user_details:
              user_id = user_detail['user_id']
              user_email = user_detail['email'] 
-             print "hello_world"
-             print user_id          
              # different significations of user_status
              if user_detail['status'] == 0: 
                  user_status = 'Disabled'
          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)
  
  @login_required
  #my_acc form value processing
- def user_process(request):
-     user_query  = Query().get('local:user').select('user_id','email','password','config')
-     user_details = execute_query(request, user_query)
-     
-     account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
-     account_details = execute_query(request, account_query)
+ def user_process(request, **kwargs):
+         
+     for key, value in kwargs.iteritems():
+         if key == "email":
+             selected_email=value
  
-     platform_query  = Query().get('local:platform').select('platform_id','platform')
-     platform_details = execute_query(request, platform_query)
+     redirect_url = "/portal/user/"+selected_email
      
+     user_query  = Query().get('local:user').filter_by('email', '==', selected_email).select('user_id','email','password','config')
+     user_details = execute_admin_query(request, user_query)
      # getting the user_id from the session
      for user_detail in user_details:
-             user_id = user_detail['user_id']
+         user_id = user_detail['user_id']
+         user_email = user_detail['email']
+     account_query  = Query().get('local:account').filter_by('user_id', '==', user_id).select('user_id','platform_id','auth_type','config')
+     account_details = execute_admin_query(request, account_query)
+     platform_query  = Query().get('local:platform').select('platform_id','platform')
+     platform_details = execute_admin_query(request, platform_query)
+     
  
      for account_detail in account_details:
          for platform_detail in platform_details:
              if 'add_'+platform_detail['platform'] in request.POST:
                  platform_id = platform_detail['platform_id']
                  user_params = {'platform_id': platform_id, 'user_id': user_id, 'auth_type': "reference", 'config': '{"reference_platform": "myslice"}'}
-                 manifold_add_account(request,user_params)
+                 manifold_add_account(request, user_params)
                  messages.info(request, 'Reference Account is added to the selected platform successfully!')
-                 return HttpResponseRedirect("/portal/account/")
+                 return HttpResponseRedirect(redirect_url)
  
              # Delete reference account from the platforms
              if 'delete_'+platform_detail['platform'] in request.POST:
                  platform_id = platform_detail['platform_id']
                  user_params = {'user_id':user_id}
-                 manifold_delete_account(request,platform_id,user_params)
-                 messages.info(request, 'Reference Account is removed from the selected platform')
-                 return HttpResponseRedirect("/portal/account/")
+                 manifold_delete_account(request, platform_id, user_id, user_params)
+                 messages.info(request, 'Refeence Account is removed from the selected platform')
+                 return HttpResponseRedirect(redirect_url)
  
              if platform_detail['platform_id'] == account_detail['platform_id']:
                  if 'myslice' in platform_detail['platform']:
                  user_config['config']= '{"firstname":"' + edited_first_name + '", "lastname":"'+ edited_last_name + '", "authority": "Unknown Authority"}'
                  user_params = {'config': user_config['config']} 
          # updating config local:user in manifold       
-         manifold_update_user(request, request.user.email,user_params)
+         manifold_update_user(request, user_email, user_params)
          # this will be depricated, we will show the success msg in same page
          # Redirect to same page with success message
          messages.success(request, 'Sucess: First Name and Last Name Updated.')
-         return HttpResponseRedirect("/portal/account/")       
+         return HttpResponseRedirect(redirect_url)       
      
-     elif 'submit_pass' in request.POST:
-         edited_password = request.POST['password']
+     elif 'submit_auth' in request.POST:
+         edited_auth = request.POST['authority']
          
-         for user_pass in user_details:
-             user_pass['password'] = edited_password
-         #updating password in local:user
-         user_params = { 'password': user_pass['password']}
-         manifold_update_user(request,request.user.email,user_params)
- #        return HttpResponse('Success: Password Changed!!')
-         messages.success(request, 'Sucess: Password Updated.')
-         return HttpResponseRedirect("/portal/account/")
+         config={}
+         for user_config in user_details:
+             if user_config['config']:
+                 config = json.loads(user_config['config'])
+                 config['firstname'] = config.get('firstname', 'N/A')
+                 config['lastname'] = config.get('lastname','N/A')
+                 config['authority'] = edited_auth
+                 updated_config = json.dumps(config)
+                 user_params = {'config': updated_config}
+             else: # it's needed if the config is empty 
+                 user_config['config']= '{"firstname": "N/A", "lastname":"N/A", "authority":"' + edited_auth + '"}'
+                 user_params = {'config': user_config['config']}
+         # updating config local:user in manifold       
+         manifold_update_user(request, user_email, user_params)
+         # this will be depricated, we will show the success msg in same page
+         # Redirect to same page with success message
+         messages.success(request, 'Sucess: Authority Updated.')
+         return HttpResponseRedirect(redirect_url)
  
  # XXX TODO: Factorize with portal/registrationview.py
  
                          updated_config = json.dumps(account_config) 
                          # updating manifold
                          user_params = { 'config': keypair, 'auth_type':'managed'}
-                         manifold_update_account(request,user_params)
+                         manifold_update_account(request, user_id, user_params)
                          # updating sfa
-                         public_key = public_key.replace('"', '');
-                         user_pub_key = {'keys': public_key}
-                         sfa_update_user(request, user_hrn, user_pub_key)
+                         #public_key = public_key.replace('"', '');
+                         #user_pub_key = {'keys': public_key}
+                         #sfa_update_user(request, user_hrn, user_pub_key)
                          messages.success(request, 'Sucess: New Keypair Generated! Delegation of your credentials will be automatic.')
-                         return HttpResponseRedirect("/portal/account/")
+                         return HttpResponseRedirect(redirect_url)
          else:
              messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
-             return HttpResponseRedirect("/portal/account/")
+             return HttpResponseRedirect(redirect_url)
                         
      elif 'upload_key' in request.POST:
          for account_detail in account_details:
                              file_content = ''.join(file_content.split())
                              #update manifold local:account table
                              user_params = { 'config': file_content, 'auth_type':'user'}
-                             manifold_update_account(request,user_params)
+                             manifold_update_account(request,user_id,user_params)
                              # updating sfa
-                             user_pub_key = {'keys': file_content}
-                             sfa_update_user(request, user_hrn, user_pub_key)
+                             #user_pub_key = {'keys': file_content}
+                             #sfa_update_user(request, user_hrn, user_pub_key)
                              messages.success(request, 'Publickey uploaded! Please delegate your credentials using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
-                             return HttpResponseRedirect("/portal/account/")
+                             return HttpResponseRedirect(redirect_url)
                          else:
                              messages.error(request, 'RSA key error: Please upload a valid RSA public key [.txt or .pub].')
-                             return HttpResponseRedirect("/portal/account/")
+                             return HttpResponseRedirect(redirect_url)
          else:
              messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
              return HttpResponseRedirect("/portal/account/")
                          break
          else:
              messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
-             return HttpResponseRedirect("/portal/account/")
+             return HttpResponseRedirect(redirect_url)
                 
      elif 'dl_pkey' in request.POST:
          for account_detail in account_details:
                              return response
                          else:
                              messages.error(request, 'Download error: Private key is not stored in the server')
-                             return HttpResponseRedirect("/portal/account/")
+                             return HttpResponseRedirect(redirect_url)
  
          else:
              messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
              return HttpResponseRedirect("/portal/account/")
      
-     elif 'delete' in request.POST:
-         for account_detail in account_details:
-             for platform_detail in platform_details:
-                 if platform_detail['platform_id'] == account_detail['platform_id']:
-                     if 'myslice' in platform_detail['platform']:
-                         account_config = json.loads(account_detail['config'])
-                         if 'user_private_key' in account_config:
-                             for key in account_config.keys():
-                                 if key == 'user_private_key':    
-                                     del account_config[key]
-                                 
-                             updated_config = json.dumps(account_config)
-                             user_params = { 'config': updated_config, 'auth_type':'user'}
-                             manifold_update_account(request,user_params)
-                             messages.success(request, 'Private Key deleted. You need to delegate credentials manually once it expires.')
-                             messages.success(request, 'Once your credentials expire, Please delegate manually using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
-                             return HttpResponseRedirect("/portal/account/")
-                         else:
-                             messages.error(request, 'Delete error: Private key is not stored in the server')
                            return HttpResponseRedirect("/portal/account/")
-                            
-         else:
-             messages.error(request, 'Account error: You need an account in myslice platform to perform this action')    
            return HttpResponseRedirect("/portal/account/")
#    elif 'delete' in request.POST:
#        for account_detail in account_details:
#            for platform_detail in platform_details:
#                if platform_detail['platform_id'] == account_detail['platform_id']:
#                    if 'myslice' in platform_detail['platform']:
#                        account_config = json.loads(account_detail['config'])
#                        if 'user_private_key' in account_config:
#                            for key in account_config.keys():
#                                if key == 'user_private_key':    
#                                    del account_config[key]
+ #                                
#                            updated_config = json.dumps(account_config)
#                            user_params = { 'config': updated_config, 'auth_type':'user'}
#                            manifold_update_account(request,user_params)
#                            messages.success(request, 'Private Key deleted. You need to delegate credentials manually once it expires.')
#                            messages.success(request, 'Once your credentials expire, Please delegate manually using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
#                            return HttpResponseRedirect("/portal/account/")
#                        else:
#                            messages.error(request, 'Delete error: Private key is not stored in the server')
#                            return HttpResponseRedirect(redirect_url)
+ #                           
#        else:
#            messages.error(request, 'Account error: You need an account in myslice platform to perform this action')    
#            return HttpResponseRedirect(redirect_url)
  
      #clear all creds
      elif 'clear_cred' in request.POST:
                              user_priv_key = json.dumps(account_config.get('user_private_key','N/A'))
                              updated_config = '{"user_public_key":'+ user_pub_key + ', "user_private_key":'+ user_priv_key + ', "user_hrn":"'+ user_hrn + '"}'
                              user_params = { 'config': updated_config}
-                             manifold_update_account(request,user_params)
+                             manifold_update_account(request, user_id,user_params)
                              messages.success(request, 'All Credentials cleared')
                              return HttpResponseRedirect("/portal/account/")
                          else:
                              messages.error(request, 'Delete error: Credentials are not stored in the server')
-                             return HttpResponseRedirect("/portal/account/")
+                             return HttpResponseRedirect(redirect_url)
          else:
              messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
-             return HttpResponseRedirect("/portal/account/")
+             return HttpResponseRedirect(redirect_url)
  
  
      # Download delegated_user_cred
              return response
          else:
              messages.error(request, 'Download error: User credential  is not stored in the server')
-             return HttpResponseRedirect("/portal/account/")
+             return HttpResponseRedirect(redirect_url)
          
      else:
          messages.info(request, 'Under Construction. Please try again later!')
-         return HttpResponseRedirect("/portal/account/")
+         return HttpResponseRedirect(redirect_url)
  
  
@@@ -12,8 -12,10 +12,10 @@@ from portal.actions              impor
  from portal.forms                import SliceRequestForm
  from unfold.loginrequired        import LoginRequiredAutoLogoutView
  from ui.topmenu                  import topmenu_items_live, the_user
- from theme import ThemeView
+ import json
 -class SliceRequestView (LoginRequiredAutoLogoutView):
 +class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
      def __init__ (self):
          self.user_email = ''
          self.errors = []
          user_email = execute_query(self.request, user_query)
          self.user_email = user_email[0].get('email')
  
-         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')
  
+         account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
+         account_details = execute_query(self.request, account_query)
+         platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
+         platform_details = execute_query(self.request, platform_query)
+         # getting user_hrn from local:account
+         for account_detail in account_details:
+             for platform_detail in platform_details:
+                 if platform_detail['platform_id'] == account_detail['platform_id']:
+                     # taking user_hrn only from myslice account
+                     # NOTE: we should later handle accounts filter_by auth_type= managed OR user
+                     if 'myslice' in platform_detail['platform']:
+                         account_config = json.loads(account_detail['config'])
+                         user_hrn = account_config.get('user_hrn','N/A')
+         #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')
+         
+         
          page = Page(request)
          page.add_css_files ( [ "http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] )
  
@@@ -53,7 -74,7 +74,7 @@@
              number_of_nodes = request.POST.get('number_of_nodes', '')
              purpose = request.POST.get('purpose', '')
              email = self.user_email
-             user_hrn = self.user_hrn
+             user_hrn = user_hrn
              cc_myself = True
              
              if (authority_hrn is None or authority_hrn == ''):
            'number_of_nodes': request.POST.get('number_of_nodes', ''),
            'purpose': request.POST.get('purpose', ''),
            'email': self.user_email,
-           'user_hrn': self.user_hrn,
+           'user_hrn': user_hrn,
            'cc_myself': True,
            'authorities': authorities,
 +          'theme': self.theme
          }
          template_env.update(page.prelude_env ())
          return render(request, 'slicerequest_view.html',template_env)
diff --combined portal/usersview.py
@@@ -6,12 -6,12 +6,12 @@@ from manifold.manifoldapi       import 
  
  from plugins.querytable         import QueryTable
  from unfold.loginrequired       import LoginRequiredAutoLogoutView
 -
 +from theme import ThemeView
  import json
  
  # View for platforms
- class AdminView(LoginRequiredAutoLogoutView, ThemeView):
-     template_name = "adminview.html"
 -class UsersView(LoginRequiredAutoLogoutView):
++class UsersView(LoginRequiredAutoLogoutView, ThemeView):
+     template_name = "usersview.html"
  
      def get_context_data(self, **kwargs):
          page = Page(self.request)
@@@ -69,7 -69,7 +69,7 @@@
          #        },
          #)
  
-         context = super(AdminView, self).get_context_data(**kwargs)
+         context = super(UsersView, self).get_context_data(**kwargs)
          context['person']   = self.request.user
          context['user_list'] = user_list
  
          # more general variables expected in the template
          context['title'] = 'Users in MySlice'
          # the menu items on the top
-         context['topmenu_items'] = topmenu_items_live('Admin', page)
+         context['topmenu_items'] = topmenu_items_live('Users', 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"