Fix: merge conflict
[myslice.git] / portal / accountview.py
index e57dfed..5bc30ca 100644 (file)
@@ -1,18 +1,20 @@
-from portal.templateviews            import LoginRequiredAutoLogoutView
+from views.loginrequired                import LoginRequiredAutoLogoutView
 #
-from manifold.core.query             import Query
-from manifold.manifoldapi            import execute_query
-from portal.actions                  import manifold_update_user
+from manifold.core.query                import Query
+from manifold.manifoldapi               import execute_query
+from portal.actions                     import manifold_update_user, manifold_update_account
 #
-from myslice.viewutils               import topmenu_items, the_user
+from myslice.viewutils                  import topmenu_items, the_user
 #
-from django.http                     import HttpResponse
-from django.contrib.auth.decorators  import login_required
-import json
+from django.http                        import HttpResponse, HttpResponseRedirect
+from django.contrib                     import messages
+from django.contrib.auth.decorators     import login_required
+#
+import json, os, re
 
 # requires login
 class AccountView(LoginRequiredAutoLogoutView):
-    template_name = "my_account.html"
+    template_name = "account-view.html"
     
     def dispatch(self, *args, **kwargs):
         return super(AccountView, self).dispatch(*args, **kwargs)
@@ -91,6 +93,16 @@ class AccountView(LoginRequiredAutoLogoutView):
 def account_process(request):
     user_query  = Query().get('local:user').select('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)
+
+    platform_query  = Query().get('local:platform').select('platform_id','platform')
+    platform_details = execute_query(request, platform_query)
+
+   # for account_detail in account_details:
+    #    if account_detail['platform_id'] == 5: 
+     #       account_config = json.loads(account_detail['config'])
 
     if 'submit_name' in request.POST:
         edited_first_name =  request.POST['fname']
@@ -105,12 +117,18 @@ def account_process(request):
                 config['lastname'] = edited_last_name
                 config['authority'] = config.get('authority','Unknown Authority')
                 updated_config = json.dumps(config)
-        
+                user_params = {'config': updated_config}
+            else: # it's needed if the config is empty 
+                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       
-        user_params = { 'config': updated_config}
+        #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!')       
+#        return HttpResponse('Sucess: First Name and Last Name Updated!')
+        # Redirect to same page with success message
+        messages.success(request, 'Sucess: First Name and Last Name Updated.')
+        return HttpResponseRedirect("/portal/account/")       
     elif 'submit_pass' in request.POST:
         edited_password = request.POST['password']
         
@@ -119,8 +137,10 @@ def account_process(request):
         #updating password in local:user
         user_params = { 'password': user_pass['password']}
         manifold_update_user(request,user_params)
+#        return HttpResponse('Success: Password Changed!!')
+        messages.success(request, 'Sucess: Password Updated.')
+        return HttpResponseRedirect("/portal/account/")
 
-        return HttpResponse('Success: Password Changed!!')
     elif 'generate' in request.POST:
         # Generate public and private keys using SFA Library
         from sfa.trust.certificate  import Keypair
@@ -135,9 +155,11 @@ def account_process(request):
 #        keypair = re.sub("\n", "\\n", keypair)
 #        #keypair = keypair.rstrip('\r\n')
 #        keypair = ''.join(keypair.split())
-        get_user.keypair = keypair
-        get_user.save()
-        return HttpResponse('Success: New Keypair Generated! %s' % keypair)
+        user_params = { 'config': keypair, 'auth_type':'managed'}
+        manifold_update_account(request,user_params)
+#        return HttpResponse('Success: New Keypair Generated!')
+        messages.success(request, 'Sucess: New Keypair Generated!')
+        return HttpResponseRedirect("/portal/account/")
 
     elif 'upload_key' in request.POST:
         up_file = request.FILES['pubkey']
@@ -147,15 +169,59 @@ def account_process(request):
         allowed_extension =  ['.pub','.txt']
         if file_extension in allowed_extension and re.search(r'ssh-rsa',file_content):
             file_content = '{"user_public_key":"'+ file_content +'"}'
-            file_content = re.sub("\r", "", file_content)
-            file_content = re.sub("\n", "\\n",file_content)
+            #file_content = re.sub("\r", "", file_content)
+            #file_content = re.sub("\n", "\\n",file_content)
             file_content = ''.join(file_content.split())
-            get_user.keypair = file_content
-            get_user.save()
-            return HttpResponse('Success: Publickey uploaded! Old records overwritten')
+            # update manifold account table
+            user_params = { 'config': file_content, 'auth_type':'user'}
+            manifold_update_account(request,user_params)
+#            return HttpResponse('Success: Publickey uploaded! Please delegate your credentials using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
+            messages.success(request, 'Publickey uploaded! Please delegate your credentials using SFA: http://trac.myslice.info/wiki/DelegatingCredentials')
+            return HttpResponseRedirect("/portal/account/")
+
         else:
-            return HttpResponse('Please upload a valid RSA public key [.txt or .pub].')    
-        
+#            return HttpResponse('Please upload a valid RSA public key [.txt or .pub].')    
+            messages.error(request, 'RSA key error: Please upload a valid RSA public key [.txt or .pub].')
+            return HttpResponseRedirect("/portal/account/")
+
+    elif 'dl_pubkey' 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'])
+                        public_key = account_config['user_public_key'] 
+                        response = HttpResponse(public_key, content_type='text/plain')
+                        response['Content-Disposition'] = 'attachment; filename="pubkey.txt"'
+                        return response
+                        break
+        else:
+            messages.success(request, 'Account error: You need an account in myslice platform to perform this action')
+            return HttpResponseRedirect("/portal/account/")
+               
+    elif 'dl_pkey' 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'])
+                        print "hello"
+                        if 'user_private_key' in account_config:
+                            private_key = account_config['user_private_key']
+                            response = HttpResponse(private_key, content_type='text/plain')
+                            response['Content-Disposition'] = 'attachment; filename="privkey.txt"'
+                            return response
+                        else:
+                            messages.success(request, 'download error: Private key is not stored in the server')
+                            return HttpResponseRedirect("/portal/account/")
+
+        else:
+            messages.success(request, 'Account error: You need an account in myslice platform to perform this action')
+            return HttpResponseRedirect("/portal/account/")
+           
+       
     else:
-        message = 'You submitted an empty form.'
-        return HttpResponse(message)
+        messages.info(request, 'Under Construction. Please try again later!')
+        return HttpResponseRedirect("/portal/account/")
+
+