AccountView: Download sfi_config
authorLoic Baron <loic.baron@lip6.fr>
Wed, 26 Nov 2014 16:39:57 +0000 (17:39 +0100)
committerLoic Baron <loic.baron@lip6.fr>
Wed, 26 Nov 2014 16:39:57 +0000 (17:39 +0100)
portal/accountview.py
portal/static/css/account_view.css
portal/templates/account-view.html
portal/templates/onelab/onelab_account-view.html

index 8193542..4d25c61 100644 (file)
@@ -14,6 +14,7 @@ from django.http                        import HttpResponse, HttpResponseRedirec
 from django.contrib                     import messages
 from django.contrib.auth.decorators     import login_required
 
+from myslice.configengine           import ConfigEngine
 from myslice.theme import ThemeView
 
 from portal.account                     import Account, get_expiration
@@ -252,6 +253,20 @@ class AccountView(LoginRequiredAutoLogoutView, ThemeView):
         context.update(prelude_env)
         return context
 
+@login_required
+def get_myslice_platform(request):
+    platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled','config').filter_by('platform','==','myslice')
+    platform_details = execute_query(request, platform_query)
+    for platform_detail in platform_details:
+        return platform_detail
+
+@login_required
+def get_myslice_account(request):
+    platform_myslice = get_myslice_platform(request)
+    account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config').filter_by('platform_id','==',platform_myslice['platform_id'])
+    account_details = execute_query(request, account_query)
+    for account_detail in account_details:
+        return account_detail
 
 @login_required
 #my_acc form value processing
@@ -534,6 +549,40 @@ def account_process(request):
             messages.error(request, 'Account error: You need an account in myslice platform to perform this action')
             return HttpResponseRedirect("/portal/account/")
 
+    # Download sfi_config
+    elif 'dl_sfi_config' in request.POST:
+        platform_detail = get_myslice_platform(request)
+        platform_config = json.loads(platform_detail['config'])
+        account_detail = get_myslice_account(request)
+        account_config = json.loads(account_detail['config'])
+
+        user_hrn = account_config.get('user_hrn','N/A')
+        t_user_hrn = user_hrn.split('.')
+        authority_hrn = t_user_hrn[0] + '.' + t_user_hrn[1]
+        import socket
+        hostname = socket.gethostbyaddr(socket.gethostname())[0]
+        registry = platform_config.get('registry','N/A')
+        admin_user = platform_config.get('user','N/A')
+        if 'localhost' in registry:
+            port = registry.split(':')[-1:][0]
+            registry = "http://" + hostname +':'+ port
+        manifold_host = ConfigEngine().manifold_url()
+        if 'localhost' in manifold_host:
+            manifold_host = manifold_host.replace('localhost',hostname)
+        sfi_config  = '[sfi]\n'
+        sfi_config += 'auth = '+ authority_hrn +'\n'
+        sfi_config += 'user = '+ user_hrn +'\n'
+        sfi_config += 'registry = '+ registry +'\n'
+        sfi_config += 'sm = http://sfa3.planet-lab.eu:12346/\n\n'
+        sfi_config += '[myslice]\n'
+        sfi_config += 'backend = '+ manifold_host +'\n'
+        sfi_config += 'delegate  = '+ admin_user +'\n'
+        sfi_config += 'platform  = myslice\n'
+        sfi_config += 'username  = '+ user_email +'\n'
+        response = HttpResponse(sfi_config, content_type='text/plain')
+        response['Content-Disposition'] = 'attachment; filename="sfi_config"'
+        return response
+
     #clear all creds
     elif 'clear_cred' in request.POST:
         try:
index cfdf432..bcb2950 100644 (file)
@@ -56,14 +56,14 @@ table.profile tr td.value {
 }
 
 table.profile button { 
-  width: 80px;
+  width: 100px;
   vertical-align: middle;
   float: right;
   margin-right: 15px;
 }
 
 #delete {
-  width: 80px;
+  width: 100px;
   vertical-align: middle;
   float: right;
   margin-right: 15px;
@@ -71,7 +71,7 @@ table.profile button {
 }
 
 #upload_key {
-  width: 80px;
+  width: 100px;
   vertical-align: middle;
   float: right; 
   margin-right: 15px;
@@ -123,7 +123,7 @@ table.profile form{
 
 #generate_keypair {
   position:relative;
-  width: 175px;
+  width: 215px;
   float: right;
   margin-right: 15px;
 
@@ -143,7 +143,7 @@ table.profile form{
 }
 
 .wide_button {
-  width: 175px;
+  width: 215px;
 }
 
 .api_cell {
index 2b8a9ca..2b99be1 100644 (file)
                                                        </td>
                                                 {%endif%}              
                                                </tr>
+                                       <tr class="even" id="sfi_config_row">
+                                               <td class="key">sfi_config </td>
+                                               <td class="value">use sfi_config file with sfi.py package (pip install sfa)<a href="#"></a>
+                                                       <button type="submit" name="dl_sfi_config" class="btn btn-default btn-xs" title="Download your privaye key" id="dl_sfi_config">
+                                                                       <span class="glyphicon glyphicon-download"></span> Download 
+                                                               </button>
+                                               </td>
+                        </tr>
                                                <tr class="even">
                                                <td colspan="2">
                                                        <p class="message" id="pkey_del_msg"><b> Tradeoff:</b> Ease-of-use vs Security.<br>
index 7ac9578..13da125 100644 (file)
                                                        </td>
                                                 {%endif%}              
                                                </tr>
+                                       <tr class="even" id="sfi_config_row">
+                                               <td class="key">sfi_config </td>
+                                               <td class="value">use sfi_config file with sfi.py package (pip install sfa)<a href="#"></a>
+                                                       <button type="submit" name="dl_sfi_config" class="btn btn-default btn-xs" title="Download your privaye key" id="dl_sfi_config">
+                                                                       <span class="glyphicon glyphicon-download"></span> Download
+                                                               </button>
+                                               </td>
+                        </tr>
+
                                                <tr class="even">
                                                <td colspan="2">
                                                                <p class="command">