-def ldap_create_user(wsgi_request, request, user_detail):
- """
- Populating LDAP withuser data - Edelberto 10/03/2014
- """
- # import needed modules
- import ldap
- import ldap.modlist as modlist
-
- # Open a connection
- # XXX We need to create this in settings
- # ldap.open is deprecated!
- #l = ldap.open("127.0.0.1")
- l = ldap.initialize('ldap://127.0.0.1:389')
-
- # you should set this to ldap.VERSION2 if you're using a v2 directory
- l.protocol_version = ldap.VERSION3
-
- # Bind/authenticate with a user with apropriate rights to add objects
- # XXX Now we set the force rootd but after we need to set this in settings file for could change the dn and password of root
- l.simple_bind_s("cn=Manager,dc=br","fibre")
-
- # The dn of our new entry/object
- #dn="uid=addtest@uff.br,ou=people,o=uff,dc=br"
-
- # we need to create the dn entry
- # Receiving an email address, how can we split and mount it in DN format?
- #mail = "debora@uff.br"
- mail = request['email']
- login = mail.split('@')[0]
- org = mail.split('@')[1]
- o = org.split('.')[-2]
- dc = org.split('.')[-1]
-
- # DN format to authenticate - IMPORTANT!
- #FIBRE-BR format
- dn = "uid="+mail+",ou=people,o="+o+",dc="+dc
-
- # DEBUG
- print "dn:"+dn
- print request['password']
-
- # Creating a unique uidNumber - Necessary for experiments
- # Was defined to began in 100000
- unique = int(user_detail['user_id']) + 100000
- #unique = int(unique)
- print unique
-
- # A dict to help build the "body" of the object
- attrs = {}
- attrs['objectclass'] = ['person','inetOrgPerson','posixAccount','eduPerson','brPerson','schacPersonalCharacteristics','fibre', 'ldapPublicKey']
- # XXX Converting all unicodes to string
- attrs['uid'] = mail.encode('utf-8')
- attrs['cn'] = request['first_name'].encode('latin1')
- attrs['sn'] = request['last_name'].encode('latin1')
- # XXX we need to set a unique uidNumber. How?
- attrs['uidNumber'] = str(unique)
- attrs['gidNumber'] = '500'
- attrs['homeDirectory'] = "/home/"+org+"/"+mail
- attrs['homeDirectory'] = attrs['homeDirectory'].encode('utf-8')
- attrs['mail'] = mail.encode('utf-8')
- attrs['eppn'] = mail.encode('utf8')
- attrs['userPassword'] = request['password'].encode('utf-8')
- attrs['sshPublicKey'] = request['public_key'].encode('utf-8')
- # XXX We really set TRUE for those attributes?
- #attrs['userEnable'] = 'TRUE'
- # set FALSE and change after when the user is validated
- attrs['userEnable'] = 'FALSE'
- attrs['omfAdmin'] = 'TRUE'
-
- # Convert our dict to nice syntax for the add-function using modlist-module
- ldif = modlist.addModlist(attrs)
-
- # DEBUG
- print attrs['userPassword']
- print attrs['cn']
- print attrs['sn']
- print attrs['homeDirectory']
- #print ldif
-
- # Do the actual synchronous add-operation to the ldapserver
- l.add_s(dn,ldif)
-
- # Its nice to the server to disconnect and free resources when done
- l.unbind_s()
-
- return ldif
-
-def ldap_modify_user(wsgi_request, request):
- #Modify entries in an LDAP Directory
-
- #Synchrounous modify
- # import needed modules
- import ldap
- import ldap.modlist as modlist
-
- # Open a connection
- l = ldap.initialize("ldap://localhost:389/")
-
- # Bind/authenticate with a user with apropriate rights to add objects
- l.simple_bind_s("cn=Manager,dc=br","fibre")
-
- # we need to create the dn entry
- # Receiving an email address, how can we split and mount it in DN format?
- #mail = "debora@uff.br"
- mail = request['email']
- login = mail.split('@')[0]
- org = mail.split('@')[1]
- o = org.split('.')[-2]
- dc = org.split('.')[-1]
-
- # DN format to authenticate - IMPORTANT!
- #FIBRE-BR format
- dn = "uid="+mail+",ou=people,o="+o+",dc="+dc
-
- # The dn of our existing entry/object
- #dn="uid=mario@uff.br,ou=people,o=uff,dc=br"
-
- # Some place-holders for old and new values
- old = {'userEnable':'FALSE'}
- new = {'userEnable':'TRUE'}
-
- # Convert place-holders for modify-operation using modlist-module
- ldif = modlist.modifyModlist(old,new)
-
- # Do the actual modification
- l.modify_s(dn,ldif)
-
- # Its nice to the server to disconnect and free resources when done
- l.unbind_s()
-
- return ldif
+def ls_create_user(wsgi_request, request, user_detail):
+ organization = request['username'].split('@')[1]
+ lsClient = LaboraSchedulerClient( organization )
+
+ orgGIDNumber = lsClient.get_testbed_info()['gidnumber']
+ userHomeDirectory = "/home/" + organization + "/" + request['username'].split('@')[0]
+ userHomeDirectory = userHomeDirectory.encode('utf-8')
+
+ 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' : orgGIDNumber,
+ 'homedirectory' : userHomeDirectory,
+ 'created_by' : "myslice"
+ }
+
+ # 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 addUser
+
+def ls_validate_user(wsgi_request, request):
+ organization = request['username'].split('@')[1]
+ lsClient = LaboraSchedulerClient( organization )
+
+ userId = lsClient.get_user_id_by_username( { 'username': str( request['username'] ) } )
+
+ validate = False
+ if userId:
+ userData = {
+ 'user_id' : userId,
+ 'new_user_data' : { 'enable': 'TRUE' }
+ }
+
+ validate = lsClient.update_user( userData )
+
+ 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