Merge branch 'fibre' of ssh://git.onelab.eu/git/myslice into fibre
authorRezende & Pedro & Carlos & Raphael <rezende@land.ufrj.br>
Thu, 18 Sep 2014 21:19:26 +0000 (18:19 -0300)
committerRezende & Pedro & Carlos & Raphael <rezende@land.ufrj.br>
Thu, 18 Sep 2014 21:19:26 +0000 (18:19 -0300)
1  2 
portal/actions.py

diff --combined portal/actions.py
@@@ -57,7 -57,7 +57,7 @@@ def clear_user_creds(request, user_emai
      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 user_id from the session
          for user_detail in user_details:
              user_id = user_detail['user_id']
@@@ -234,7 -234,6 +234,7 @@@ def make_request_user(user)
      request['public_key']    = user.public_key
      request['private_key']   = user.private_key
      request['username']            = user.login
 +    request['reasons']       = user.reasons
      return request
  
  def make_request_slice(slice):
@@@ -566,6 -565,7 +566,7 @@@ def sfa_create_user(wsgi_request, reque
  
      query = Query.create('user').set(sfa_user_params).select('user_hrn')
      results = execute_query(wsgi_request, query)
      if not results:
          raise Exception, "Could not create %s. Already exists ?" % sfa_user_params['user_hrn']
      else:
@@@ -578,40 -578,55 +579,55 @@@ def ls_create_user(wsgi_request, reques
      organization = request['username'].split('@')[1]
      lsClient = LaboraSchedulerClient( organization )
  
-     org_gidnumber = lsClient.get_testbed_info()['gidnumber']
-     user_homedirectory = "/home/" + organization + "/" + request['username'].split('@')[0]
-     user_homedirectory = user_homedirectory.encode('utf-8')
+     orgGIDNumber = lsClient.get_testbed_info()['gidnumber']
+     userHomeDirectory = "/home/" + organization + "/" + request['username'].split('@')[0]
+     userHomeDirectory = userHomeDirectory.encode('utf-8')
      
-     user_data = {
+     userData = {
          'username'      : request['username'],
          'email'         : request['email'].encode('utf-8'),
          'password'      : request['password'].encode('utf-8'),
          'name'          : str( request['first_name'].encode('latin1') ) + ' ' + str( request['last_name'].encode('latin1') ),
-         'gidnumber'     : org_gidnumber,
-         'homedirectory' : user_homedirectory
+         'gidnumber'     : orgGIDNumber,
+         'homedirectory' : userHomeDirectory,
+         'created_by'    : "myslice"
      }
      
-     # Add user in the island:
-     add_user = lsClient.add_user( user_data )
+     # Add user in the island.
+     addUser = lsClient.add_user( userData )
+     
+     # User successfully created, upload user public key.
+     if addUser:
+         ls_update_public_key( wsgi_request, request, lsClient, addUser )
      
-     return add_user
+     return addUser
  
  def ls_validate_user(wsgi_request, request):
      organization = request['username'].split('@')[1]
      lsClient = LaboraSchedulerClient( organization )
      
-     user_id = lsClient.get_user_id_by_username( { 'username': str(request['username']) } )
+     userId = lsClient.get_user_id_by_username( { 'username': str( request['username'] ) } )
      
      validate = False
-     if user_id:
-         user_data = {
-             'user_id'       : user_id,
+     if userId:
+         userData = {
+             'user_id'       : userId,
              'new_user_data' : { 'enable': 'TRUE' }
          }
          
-         validate = lsClient.update_user( user_data )
+         validate = lsClient.update_user( userData )
          
-     return validate
+     return validate and addUserPublicKey
+ def ls_update_public_key( wsgi_request, request, lsClient, userId ):
+     userPbKey = {
+         'user_id'       : userId,
+         'public_key'    : request['public_key']
+     }
+     
+     addUserPublicKey = lsClient.add_user_public_key( userPbKey )
+     
+     return addUserPublicKey
  
  def create_user(wsgi_request, request):
      
          ls_validate_user( wsgi_request, request )
      except Exception, e:
          "Error to validate the user in Labora Scheduler."
+ def create_user_in_ldap(wsgi_request, request, user_detail):
+     """
+     """
+    
+     # saves the user to django auth_user table [needed for password reset]
+     user = User.objects.create_user(request['username'], request['email'], request['password'])
+     # Creating a manifold user
+     user_id = manifold_add_user(wsgi_request, request)
+     # Creating a Manifold account on the MySlice platform
+     # Note the JSON representation of public and private keys already includes quotes
+     account_config = {
+         'user_hrn'          : request['user_hrn'],
+         'user_public_key'   : request['public_key'],
+     }
+     if request['private_key']:
+         account_config['user_private_key'] = request['private_key']
+     user_id = user_detail['user_id'] + 1 # the user_id for the newly created user in local:user
+     # XXX TODO: Require a myslice platform
+     # ALERT: this will disapear with ROUTERV2 of Manifold
+     # We have to consider the case where several registries can be used
+     # Removed hardcoded platform = 5
+     # This platform == 'myslice' is a TMP FIX !!
+     try:
+         reg_platform_query = Query().get('local:platform') \
+             .filter_by('platform', '==', 'myslice')           \
+             .select('platform_id')
+         reg_platform = execute_admin_query(wsgi_request, reg_platform_query)
+         reg_platform_id = reg_platform[0]['platform_id']
+         account_params = {
+             'platform_id'   : reg_platform_id, # XXX ALERT !!
+             'user_id'       : user_id, 
+             'auth_type'     : request['auth_type'], 
+             'config'        : json.dumps(account_config),
+         }
+         manifold_add_account(wsgi_request, account_params)
+     except Exception, e:
+        print "Failed creating manifold account on platform %s for user: %s" % ('myslice', request['email'])
+     # XXX This has to be stored centrally
+     USER_STATUS_ENABLED = 2
+     # Update Manifold user status
+     manifold_update_user(wsgi_request, request['username'], {'status': USER_STATUS_ENABLED})
+     # Add reference accounts for platforms
+     manifold_add_reference_user_accounts(wsgi_request, request)
      
+     from sfa.util.xrn import Xrn 
+     auth_pi = request.get('pi', None)
+     auth_pi = list([auth_pi]) if auth_pi else list()
+     # We create a user request with Manifold terminology
+     sfa_user_params = {
+         'user_hrn'          : request['user_hrn'],
+         'user_email'        : request['email'],
+         'user_urn'          : Xrn(request['user_hrn'], request['type']).get_urn(),
+         'user_type'         : request['type'],
+         'keys'              : request['public_key'],
+         'user_first_name'   : request['first_name'],
+         'user_last_name'    : request['last_name'],
+         'pi_authorities'    : auth_pi,
+         'user_enabled'      : True
+     }
+     print request['user_hrn']
+     print request['email']
+     print request['first_name']
+     print request['last_name']
+     print request['type']
+     print request['public_key']
+     query = Query.create('user').set(sfa_user_params).select('user_hrn')
+     print query
+     results = execute_admin_query(wsgi_request, query)
+     print results
+     if not results:
+         raise Exception, "Could not create %s. Already exists ?" % sfa_user_params['user_hrn']
+     else:
+         subject = 'User validated'
+         msg = 'A manager of your institution has validated your account. You have now full user access to the portal.'
+         send_mail(subject, msg, 'support@fibre.org.br',[request['email']], fail_silently=False)       
+     return results
  def create_pending_user(wsgi_request, request, user_detail):
      """
      """