Validation: update manifold user status to 2=validated
[myslice.git] / portal / actions.py
index 97b8ac8..f57dc46 100644 (file)
@@ -1,7 +1,7 @@
 from django.http                 import HttpResponse
 from manifold.core.query         import Query
 from manifold.manifoldapi        import execute_query,execute_admin_query
-from portal.models               import PendingUser, PendingSlice
+from portal.models               import PendingUser, PendingSlice, PendingAuthority
 import json
 
 # Thierry: moving this right into the code so 
@@ -42,6 +42,12 @@ def sfa_add_user(request, user_params):
         raise Exception, "Could not create %s. Already exists ?" % user_params['hrn']
     return results
 
+def sfa_update_user(request, user_hrn, user_params):
+    # user_params: keys [public_key] 
+    query = Query.update('user').filter_by('user_hrn', '==', user_hrn).set(user_params).select('user_hrn')
+    results = execute_query(request,query)
+    return results
+
 def sfa_add_slice(request, slice_params):
     query = Query.create('slice').set(slice_params).select('slice_hrn')
     results = execute_query(request, query)
@@ -49,6 +55,21 @@ def sfa_add_slice(request, slice_params):
         raise Exception, "Could not create %s. Already exists ?" % slice_params['hrn']
     return results
 
+def sfa_add_authority(request, authority_params):
+    query = Query.create('authority').set(authority_params).select('authority_hrn')
+    results = execute_query(request, query)
+    print "sfa_add_auth results=",results
+    if not results:
+        raise Exception, "Could not create %s. Already exists ?" % authority_params['hrn']
+    return results
+
+def sfa_add_user_to_slice(request, user_hrn, slice_params):
+    query = Query.update('slice').filter_by('user_hrn', '==', user_hrn).set(slice_params).select('slice_hrn')
+    results = execute_query(request, query)
+    if not results:
+        raise Exception, "Could not create %s. Already exists ?" % slice_params['hrn']
+    return results
+
 # Propose hrn
 
 def manifold_add_user(request, user_params):
@@ -60,10 +81,10 @@ def manifold_add_user(request, user_params):
     result, = results
     return result['email']
 
-def manifold_update_user(request, user_params):
+def manifold_update_user(request, email, user_params):
     # user_params: password, config e.g., 
-    query = Query.update('local:user').filter_by('email', '==', request.user.email).set(user_params).select('email')
-    results = execute_query(request,query)
+    query = Query.update('local:user').filter_by('email', '==', email).set(user_params).select('email')
+    results = execute_admin_query(request,query)
     # NOTE: results remains empty and goes to Exception. However, it updates the manifold DB.
     # That's why I commented the exception part. -- Yasin 
     #if not results:
@@ -124,6 +145,7 @@ def make_request_slice(slice):
     request = {}
     request['type'] = 'slice'
     request['id'] = slice.id
+    request['user_email'] = slice.user_email
     request['timestamp'] = slice.created
     request['authority_hrn'] = slice.authority_hrn
     request['slice_name'] = slice.slice_name
@@ -132,19 +154,39 @@ def make_request_slice(slice):
     request['purpose'] = slice.purpose
     return request
 
-def make_requests(pending_users, pending_slices):
-    print "pending users =", pending_users
-    print "pending slices =", pending_slices
+def make_request_authority(authority):
+    request = {}
+    request['type']                  = 'authority'
+    request['id']                    = authority.id
+    request['site_name']             = authority.site_name
+    request['site_latitude']         = authority.site_latitude
+    request['site_longitude']        = authority.site_longitude
+    request['site_url']              = authority.site_url
+    request['site_authority']        = authority.site_authority
+    request['site_abbreviated_name'] = authority.site_abbreviated_name
+    request['address_line1']         = authority.address_line1
+    request['address_line2']         = authority.address_line2
+    request['address_line3']         = authority.address_line3
+    request['address_city']          = authority.address_city
+    request['address_postalcode']    = authority.address_postalcode
+    request['address_state']         = authority.address_state
+    request['address_country']       = authority.address_country
+    request['authority_hrn']         = authority.authority_hrn
+    request['timestamp']             = authority.created
+    return request
 
+def make_requests(pending_users, pending_slices, pending_authorities):
     requests = []
     for user in pending_users:
         requests.append(make_request_user(user))
     for slice in pending_slices:
         requests.append(make_request_slice(slice))
+    for authority in pending_authorities:
+        requests.append(make_request_authority(authority))
     return requests   
 
 def get_request_by_id(ids):
-    sorted_ids = { 'user': [], 'slice': [] }
+    sorted_ids = { 'user': [], 'slice': [], 'authority': [] }
     for type__id in ids:
         type, id = type__id.split('__')
         sorted_ids[type].append(id)
@@ -152,21 +194,26 @@ def get_request_by_id(ids):
     if not ids:
         pending_users  = PendingUser.objects.all()
         pending_slices = PendingSlice.objects.all()
+        pending_authorities = PendingAuthority.objects.all()
     else:
         pending_users  = PendingUser.objects.filter(id__in=sorted_ids['user']).all()
         pending_slices = PendingSlice.objects.filter(id__in=sorted_ids['slice']).all()
+        pending_authorities = PendingAuthority.objects.filter(id__in=sorted_ids['authority']).all()
 
-    return make_requests(pending_users, pending_slices)
+    return make_requests(pending_users, pending_slices, pending_authorities)
 
 def get_request_by_authority(authority_hrns):
+    print "get_request_by_authority auth_hrns = ", authority_hrns
     if not authority_hrns:
         pending_users  = PendingUser.objects.all()
         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()
 
-    return make_requests(pending_users, pending_slices)
+    return make_requests(pending_users, pending_slices, pending_authorities)
     
 # XXX Is it in sync with the form fields ?
 
@@ -189,7 +236,9 @@ def portal_validate_request(wsgi_request, request_ids):
         if request['type'] == 'user':
 
             try:
-                hrn = "%s.%s" % (request['authority_hrn'], request['login'])
+                # XXX tmp user_hrn inside the keypair column of pendiguser table
+                hrn = json.loads(request['keypair'])['user_hrn']
+                #hrn = "%s.%s" % (request['authority_hrn'], request['login'])
                 # XXX tmp sfa dependency
                 from sfa.util.xrn import Xrn 
                 urn = Xrn(hrn, request['type']).get_urn()
@@ -209,10 +258,17 @@ def portal_validate_request(wsgi_request, request_ids):
                 }
                 # ignored in request: id, timestamp, password
 
+                # UPDATE user status = 2 = validated
+                user_query  = Query().get('local:user').select('config','email','status').filter_by('email', '==', request['email'])
+                user_details = execute_admin_query(request, user_query)
+                print user_details[0]
+                manifold_user_params = {
+                    'status': 2
+                }
+                manifold_update_user(request, request['email'], manifold_user_params) 
                 sfa_add_user(wsgi_request, sfa_user_params)
-
-                # XXX Remove from database
-
+               # XXX Remove from database
 
                 request_status['SFA user'] = {'status': True }
 
@@ -251,15 +307,36 @@ def portal_validate_request(wsgi_request, request_ids):
                 # ignored in request: id, timestamp,  number_of_nodes, type_of_nodes, purpose
 
                 sfa_add_slice(wsgi_request, sfa_slice_params)
-
-                # XXX Remove from database
-
-            
+                #sfa_add_user_to_slice(wsgi_request, user_hrn, sfa_slice_params)
                 request_status['SFA slice'] = {'status': True }
 
             except Exception, e:
                 request_status['SFA slice'] = {'status': False, 'description': str(e)}
 
+        elif request['type'] == 'authority':
+            try:
+                #hrn = "%s.%s" % (request['authority_hrn'], request['site_authority'])
+                hrn = request['site_authority']
+                # XXX tmp sfa dependency
+                from sfa.util.xrn import Xrn 
+                urn = Xrn(hrn, request['type']).get_urn()
+
+                sfa_authority_params = {
+                    'hrn'        : hrn,
+                    'urn'        : urn,
+                    'type'       : request['type'],
+                    #'pi'        : None,
+                    'enabled'    : True
+                }
+                print "ADD Authority"
+                sfa_add_authority(wsgi_request, sfa_authority_params)
+                request_status['SFA authority'] = {'status': True }
+
+            except Exception, e:
+                request_status['SFA authority'] = {'status': False, 'description': str(e)}
+
+        # XXX Remove from Pendings in database
+
         status['%s__%s' % (request['type'], request['id'])] = request_status
 
     return status