My Account: Updating Name, Password- OK. portal/actions.py:Added manifold_update...
[unfold.git] / portal / views.py
index de7a5ac..1fe771c 100644 (file)
@@ -42,7 +42,7 @@ from portal                      import signals
 from portal.forms                import SliceRequestForm, ContactForm
 from portal.util                 import RegistrationView, ActivationView
 from portal.models               import PendingUser, PendingSlice
-from portal.actions              import authority_get_pi_emails, get_request_by_authority
+from portal.actions              import authority_get_pi_emails, get_request_by_authority, manifold_add_user, manifold_update_user
 from manifold.core.query         import Query
 from manifold.manifoldapi        import execute_query
 from unfold.page                 import Page
@@ -612,6 +612,8 @@ class AccountView(TemplateView):
         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']:
@@ -626,47 +628,38 @@ class AccountView(TemplateView):
         platform_name = ''
         account_type = ''
         account_usr_hrn = ''
-        account_pub_key = ''       
+        account_pub_key = ''
+        platform_name_list = []
+        account_type_list = []
+        usr_hrn_list = []
+        pub_key_list = []          
         for account_detail in account_details:
             for platform_detail in platform_details:
                 if platform_detail['platform_id'] == account_detail['platform_id']:
                     platform_name = platform_detail['platform']
                     account_type = account_detail['auth_type']
                     account_config = json.loads(account_detail['config'])
+                    # a bit more pythonic
+                    account_usr_hrn = account_config.get('user_hrn','N/A')
+                    account_pub_key = account_config.get('user_public_key','N/A')
                     
-                    if 'user_hrn' in account_config:
-                        account_usr_hrn = account_config['user_hrn']
-                    else:
-                        account_usr_hrn = 'N/A'
-                    if 'user_public_key' in account_config:
-                        account_pub_key = account_config['user_public_key']
-                    else:
-                        account_pub_key = 'N/A'            
-                        #print "THis is a test"
-                        #print account_pub_key
+                    platform_name_list.append(platform_name)
+                    account_type_list.append(account_type)
+                    usr_hrn_list.append(account_usr_hrn)
+                    pub_key_list.append(account_pub_key)
         
-        #page.enqueue_query(network_query)
-
-        #page.expose_js_metadata()
-        #page.expose_queries()
-
-        #userlist = SimpleList(
-        #    title = None,
-        #    page  = page,
-        #    key   = 'user_id',
-        #    query = network_query,
-        #)
+        # combining 4 lists into 1 [to render in the template] 
+        lst = [{'platform_name': t[0], 'account_type': t[1], 'usr_hrn':t[2], 'usr_pubkey':t[3]} for t in zip(platform_name_list, account_type_list, usr_hrn_list, pub_key_list)]    
+        #print "test"
+        #print lst
 
         context = super(AccountView, self).get_context_data(**kwargs)
-        context['platform_name'] = platform_name
-        context['account_type'] = account_type
-        context['account_usr_hrn'] = account_usr_hrn
-        context['account_pub_key'] = account_pub_key 
+        context['data'] = lst
         context['person']   = self.request.user
-        context ['fullname'] = config['firstname'] +' '+ config['lastname']    
-        context ['firstname'] = config['firstname']
-        context ['lastname'] = config['lastname']
-        context ['affiliation'] = config['affiliation']
+        context ['firstname'] = config.get('firstname',"?")
+        context ['lastname'] = config.get('lastname',"?")
+        context ['fullname'] = context['firstname'] +' '+ context['lastname']
+        context ['authority'] = config.get('authority',"Unknown Authority")
         #context['users'] = userlist.render(self.request)
         
         # XXX This is repeated in all pages
@@ -676,62 +669,46 @@ class AccountView(TemplateView):
         context['topmenu_items'] = topmenu_items('My Account', self.request)
         # so we can sho who is logged
         context['username'] = the_user(self.request)
-        context ['firstname'] = config['firstname']
+#        context ['firstname'] = config['firstname']
         #context.update(page.prelude_env())
         return context
 
-
-
-
-
-
+#my_acc form value processing
 @login_required
-# View for my_account form
-#def my_account(request):
-#    return render(request, 'my_account.html', {
-#        #'form': form,
-#        'topmenu_items': topmenu_items('My Account', request),
-#        'username': the_user (request)
-#    })
+def acc_process(request):
+    
+    user_query  = Query().get('local:user').select('password','config')
+    user_details = execute_query(request, user_query)
 
 
-@login_required
-#my_acc form value processing
-def acc_process(request):
-    # getting the user_id from the session [now hardcoded]
-    get_user = PendingUser.objects.get(id='1') # here we will get the id/email from session e.g., person.email
-    # getting user info from manifold
     if 'submit_name' in request.POST:
         edited_first_name =  request.POST['fname']
         edited_last_name =  request.POST['lname']
-        #email = 'test_email@gmail.com'
-        #password = 'test_pp'
-        #message = 'F_Name: %s L_name: %s dummy_pp: %s' % (first_name, last_name, password)
-        #site = None
         
-        # insert into DB [needed for registration page]
-        #approach borrowed from register view     
-        #new_user = PendingUser.objects.create_inactive_user(edited_first_name, edited_last_name, email,  password, site) 
-        #conventional approach
-        #b = PendingUser(first_name=edited_first_name, last_name=edited_last_name)
-        #b.save()
+        config={}
+        for user_config in user_details:
+        #email = user_detail['email']
+            if user_config['config']:
+                config = json.loads(user_config['config'])
+                config['firstname'] = edited_first_name
+                config['lastname'] = edited_last_name
+                config['authority'] = config.get('authority','Unknown Authority')
+                updated_config = json.dumps(config)
         
-        # select and update [will be used throughout this view]
-        # select the logged in user [for the moment hard coded]
-        #get_user = PendingUser.objects.get(id='1') # here we will get the id/email from session e.g., person.email
-        # update first and last name
-        get_user.first_name = edited_first_name
-        get_user.last_name = edited_last_name
-        get_user.save() 
-
+        # updating config local:user in manifold       
+        user_params = { 'config': updated_config}
+        manifold_update_user(request,user_params)
+        # this will be depricated, we will show the success msg in same page
         return HttpResponse('Sucess: First Name and Last Name Updated!')       
     elif 'submit_pass' in request.POST:
         edited_password = request.POST['password']
-        # select the logged in user [for the moment hard coded]
-        #get_user = PendingUser.objects.get(id='1') # here we will get the id/email from session e.g., person.email
-        # update password
-        get_user.password = edited_password
-        get_user.save()
+        
+        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,user_params)
+
         return HttpResponse('Success: Password Changed!!')
     elif 'generate' in request.POST:
         # Generate public and private keys using SFA Library
@@ -739,28 +716,6 @@ def acc_process(request):
         k = Keypair(create=True)
         public_key = k.get_pubkey_string()
         private_key = k.as_pem()
-       
-# DEPRECATED
-#        KEY_LENGTH = 2048
-#
-#        def blank_callback():
-#            "Replace the default dashes"
-#            return
-#
-#        # Random seed
-#        Rand.rand_seed (os.urandom (KEY_LENGTH))
-#        # Generate key pair
-#        key = RSA.gen_key (KEY_LENGTH, 65537, blank_callback)
-#        # Create memory buffers
-#        pri_mem = BIO.MemoryBuffer()
-#        pub_mem = BIO.MemoryBuffer()
-#        # Save keys to buffers
-#        key.save_key_bio(pri_mem, None)
-#        key.save_pub_key_bio(pub_mem)
-#
-#        # Get keys 
-#        public_key = pub_mem.getvalue()
-#        private_key = pri_mem.getvalue()
         private_key = ''.join(private_key.split())
         public_key = "ssh-rsa " + public_key
         # Saving to DB
@@ -835,31 +790,6 @@ def register_4m_f4f(request):
             k = Keypair(create=True)
             public_key = k.get_pubkey_string()
             private_key = k.as_pem()
-
-# DEPRECATED
-#            #import os
-#            #from M2Crypto import Rand, RSA, BIO
-#            
-#            KEY_LENGTH = 2048
-#
-#            def blank_callback():
-#                "Replace the default dashes"
-#                return
-#
-#            # Random seed
-#            Rand.rand_seed (os.urandom (KEY_LENGTH))
-#            # Generate key pair
-#            key = RSA.gen_key (KEY_LENGTH, 65537, blank_callback)
-#            # Create memory buffers
-#            pri_mem = BIO.MemoryBuffer()
-#            pub_mem = BIO.MemoryBuffer()
-#            # Save keys to buffers
-#            key.save_key_bio(pri_mem, None)
-#            key.save_pub_key_bio(pub_mem)
-#            # Get keys 
-#            public_key = pub_mem.getvalue()
-#            private_key = pri_mem.getvalue()
-
             private_key = ''.join(private_key.split())
             public_key = "ssh-rsa " + public_key
             # Saving to DB