Validation: update manifold user status to 2=validated
[myslice.git] / portal / actions.py
index d161be5..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 
@@ -55,6 +55,14 @@ 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)
@@ -146,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)
@@ -166,22 +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 ?
 
@@ -226,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 }
 
@@ -269,15 +308,35 @@ def portal_validate_request(wsgi_request, request_ids):
 
                 sfa_add_slice(wsgi_request, sfa_slice_params)
                 #sfa_add_user_to_slice(wsgi_request, user_hrn, sfa_slice_params)
-
-                # XXX Remove from database
-
-            
                 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