Outils pour utilisateurs

Outils du site


admin:services:re2o

Ceci est une ancienne révision du document !


Re2o

Migration depuis l'ancien ldap

Les anciennes données étaient dans l'ancien ldap sur dodecagon, il a été nécessaire de transéferer tout le monde.

On utilise python3-ldap3 pour chercher et trouver les informations dans le ldap.

Pour info, voici comment on a procédé :

Transfert des users

from ldap3 import Server,Connection,ALL_ATTRIBUTES, ALL

conn = Connection(server, 'cn=admin,dc=federez,dc=net', 'pkop', auto_bind=True)

conn.search('ou=users,dc=federez,dc=net', '(objectclass=inetOrgPerson)', attributes=ALL_ATTRIBUTES)

entries = conn.entries

In [79]: from users.models import Adherent, ListShell

In [78]: for en in ent:
    ...:     adh = Adherent()
    ...:     adh.pseudo = str(en.cn)
    ...:     if len(str(en.displayName).split())>1:
    ...:         adh.surname = str(en.displayName).split()[1]
    ...:         adh.name = str(en.displayName).split()[0]
    ...:     else:
    ...:         adh.surname = str(en.displayName)
    ...:         adh.name = str(en.displayName)  
    ...:     adh.email = str(en.mail)
    ...:     if hasattr(en, 'loginShell'):
    ...:         adh.shell, created = ListShell.objects.get_or_create(shell=str(en.loginShell))
    ...:     if hasattr(en, 'uidNumber'):
    ...:         adh.uid_number = str(en.uidNumber)
    ...:     if hasattr(en, 'sambaNTPassword'):
    ...:         adh.sambaNTPassword = en.sambaNTPassword
    ...:     if hasattr(en, 'userPassword'):
    ...:         adh.password = str(en.userPassword.value.decode("utf-8")[:6]) + '$' + str(en.userPassword.value.decode("utf-8")[6:])
    ...:     adh.save()
    

Transfert des services-users (bind ldap pour les services)

conn.search('ou=service-users,dc=federez,dc=net', '(objectclass=simpleSecurityObject)', attributes=ALL_ATTRIBUTES)

entries = conn.entries

In [87]: for en in entries:
    ...:     s = ServiceUser()
    ...:     s.pseudo = str(en.cn)
    ...:     s.password = str(en.userPassword.value.decode("utf-8")[:6]) + '$' + str(en.userPassword.value.decode("utf-8")[6:])
    ...:     s.save()

Transfert des assos

A la main, il n'y en avait pas 150

Transfert des groupes/liens users-asssos

Plus compliqué, il a fallu extraire le pseudo depuis l'objet member of dans les groupes, les jointures n'existant évidemment pas en ldap.

from users.models import User, Adherent, Club
conn.search('ou=associations,dc=federez,dc=net', '(objectclass=groupOfUniqueNames)', attributes=ALL_ATTRIBUTES)

entries = conn.entries

In [1]: for ent in entries:                       
   ...:     club_instance = Club.objects.get(pseudo=str(ent.o))
   ...:     if hasattr(ent, 'owner'):
   ...:         for own in ent.owner:
   ...:             uid = conn.search('ou=users,dc=federez,dc=net', '(%s)' % str(own.split(',')[0]), attributes=ALL_ATTRIBUTES)
   ...:             user = conn.entries[0]
   ...:             user_instance = Adherent.objects.get(pseudo=str(user.cn))
   ...:             club_instance.administrators.add(user_instance)
   ...:     if hasattr(ent, 'uniqueMember'):
   ...:         for memb in ent.uniqueMember:
   ...:             uid = conn.search('ou=users,dc=federez,dc=net', '(%s)' % str(memb.split(',')[0]), attributes=ALL_ATTRIBUTES)
   ...:             user = conn.entries[0]
   ...:             user_instance = Adherent.objects.get(pseudo=str(user.cn))
   ...:             club_instance.members.add(user_instance)
admin/services/re2o.1511160918.txt.gz · Dernière modification : 2017/11/20 07:55 de chirac

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki