conflict fix
[myslice.git] / portal / actions.py
index e378ca5..2075300 100644 (file)
@@ -11,6 +11,8 @@ from django.template.loader     import render_to_string
 from django.core.mail           import EmailMultiAlternatives, send_mail
 
 from myslice.theme              import ThemeView
+from myslice.configengine       import ConfigEngine
+
 
 theme = ThemeView()
 
@@ -22,8 +24,7 @@ import activity.slice
 #from sfa.util.xrn                import Xrn 
 
 
-# Get the list of authorities
-
+# Get the list of pis in a given authority
 def authority_get_pis(request, authority_hrn):
 
     # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2
@@ -38,6 +39,80 @@ def authority_get_pis(request, authority_hrn):
     #return result['pi_users']
     return results
 
+#check the user is pi or not in the registry
+def authority_check_pis(request, user_email):
+    try:
+        user_query  = Query().get('local:user').filter_by('email', '==', user_email).select('user_id','email','password','config')
+        user_details = execute_admin_query(request, user_query)
+    
+        # getting the authority_hrn
+        for user_detail in user_details:
+            user_id = user_detail['user_id']
+            if user_detail['config']:
+                config = json.loads(user_detail['config'])
+                authority_hrn = config.get('authority','Unknown Authority')
+        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 platform_detail['platform_id'] == account_detail['platform_id']:
+                    if 'myslice' in platform_detail['platform']:
+                        account_config = json.loads(account_detail['config'])
+                        user_hrn = account_config.get('user_hrn','N/A')
+
+        pi_status = False
+        pis = authority_get_pis (request, authority_hrn)
+        for pi in pis:
+            pi_list = pi['pi_users']
+
+        if user_hrn in pi_list:
+            pi_status = True
+        return pi_status
+
+    except Exception,e:
+        print "Exception in actions.py in authority_check_pis %s" % e
+        return None
+
+
+def authority_add_pis(request, authority_hrn,user_hrn):
+    try:
+        # getting pis of the authority of the user
+        pis = authority_get_pis (request, authority_hrn)
+        for pi in pis:
+            pi_list = pi['pi_users']
+   
+        updated_pi_list = pi_list.append(user_hrn) 
+        query = Query.update('authority').filter_by('authority_hrn', '==', authority_hrn).set({'pi_users':pi_list})
+        results = execute_query(request,query)
+        newpis = authority_get_pis (request, authority_hrn)
+        return newpis
+    except Exception,e: 
+        print "Exception in actions.py in authority_add_pis %s" % e
+        return None
+
+
+def authority_remove_pis(request, authority_hrn,user_hrn):
+    try:
+        # getting pis of the authority of the user
+        pis = authority_get_pis (request, authority_hrn)
+        for pi in pis:
+            pi_list = pi['pi_users']
+        updated_pi_list = pi_list.remove(user_hrn) 
+        query = Query.update('authority').filter_by('authority_hrn', '==', authority_hrn).set({'pi_users':pi_list})
+        results = execute_query(request,query)
+        newpis = authority_get_pis (request, authority_hrn)
+        return newpis
+    except Exception,e: 
+        print "Exception in actions.py in authority_remove_pis %s" % e
+        return None
+
+
 def authority_get_pi_emails(request, authority_hrn):
     pi_users = authority_get_pis(request,authority_hrn)
     print "pi_users = %s" % pi_users
@@ -321,9 +396,23 @@ def get_requests(authority_hrns=None):
         pending_slices = PendingSlice.objects.all()
         pending_authorities = PendingAuthority.objects.all()
     else:
-        pending_users  = PendingUser.objects.filter(authority_hrn__in=authority_hrns).all()
-        pending_slices = PendingSlice.objects.filter(authority_hrn__in=authority_hrns).all()
-        pending_authorities = PendingAuthority.objects.filter(authority_hrn__in=authority_hrns).all()
+        pending_users  = PendingUser.objects
+        pending_slices = PendingSlice.objects
+        pending_authorities = PendingAuthority.objects
+        from django.db.models import Q
+        list_user_Q = list()
+        list_slice_Q = list()
+        list_auth_Q = list()
+        for hrn in authority_hrns:
+            list_user_Q.append(Q(authority_hrn__startswith=hrn, status__iexact = 'True'))
+            list_slice_Q.append(Q(authority_hrn__startswith=hrn))
+            list_auth_Q.append(Q(site_authority__startswith=hrn))
+            print "startswith hrn = ",hrn
+        from operator import __or__ as OR
+        pending_users        = pending_users.filter(reduce(OR, list_user_Q))
+        pending_slices       = pending_slices.filter(reduce(OR, list_slice_Q))
+        pending_authorities  = pending_authorities.filter(reduce(OR, list_auth_Q))
+        #pending_authorities  = pending_authorities.all() #filter(reduce(OR, list_Q))
 
     return make_requests(pending_users, pending_slices, pending_authorities)
 
@@ -808,9 +897,9 @@ def iotlab_create_user (wsgi_request, request, namespace = None, as_admin=False)
     import time
     from requests.auth import HTTPBasicAuth
     
-    URL_REST = 'https://devgrenoble.senslab.info/rest/admin/users'
-    LOGIN_ADMIN = "auge"
-    PASSWORD_ADMIN = "k,mfg1+Q"
+    URL_REST = ConfigEngine.default_iotlab_url
+    LOGIN_ADMIN = ConfigEngine.default_iotlab_admin_user
+    PASSWORD_ADMIN = ConfigEngine.default_iotlab_admin_password
 
     auth = HTTPBasicAuth(LOGIN_ADMIN,PASSWORD_ADMIN)
     headers = {'content-type': 'application/json'}