#! /usr/bin/python2
#-*-coding:utf-8-*-
import sys
import ldap
from scribe.ldapconf import AD_ADDRESS, AD_USER, AD_BASE, AD_PWDFILE
sys.path.append('/usr/share')
from ead2.backend.actions.scribe.tool.etablissements import get_etabs

def get_group(conn, group_name):
    """
    renvoie le DN d'un groupe
    """
    ldb_filter = '(&(objectclass=group)(cn={}))'
    res = conn.search(AD_BASE, ldap.SCOPE_SUBTREE,
                      ldb_filter.format(group_name), ['cn'])
    return conn.result(res)[1][0][0]

def add_group(conn, group_name):
    """
    crée un groupe
    """
    group_dn = 'CN={},CN=Users,{}'.format(group_name, AD_BASE)
    datas = [(('objectClass', 'group')),
             (('cn', group_name)),
             (('description', group_name.capitalize())),
             (('displayName', group_name)),
             (('info', 'EOLE')),
             (('sAMAccountName', group_name)),
            ]
    print('Ajout du groupe {}'.format(group_name))
    conn.add_s(group_dn, datas)
    return group_dn

AD_USERDN = "CN={0},CN=Users,{1}".format(AD_USER, AD_BASE)
AD_PWD = open(AD_PWDFILE).read().strip()
ldap.set_option(ldap.OPT_REFERRALS, 0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
connexion = ldap.initialize('ldaps://{}'.format(AD_ADDRESS))
connexion.simple_bind_s(AD_USERDN, AD_PWD)

eleves = get_group(connexion, 'eleves')
if eleves is None:
    eleves = add_group(connexion, 'eleves')
professeurs = get_group(connexion, 'professeurs')
if professeurs is None:
    professeurs = add_group(connexion, 'professeurs')

eleves_members = []
professeurs_members = ['CN=admin,CN=Users,{}'.format(AD_BASE),]

root, etabs = get_etabs()
for etab in etabs:
    ele = get_group(connexion, 'eleves-{}'.format(etab))
    if ele is None:
        print("Erreur : groupe eleves-{} non trouvé dans AD")
    else:
        eleves_members.append(ele)
    ens = get_group(connexion, 'profs-{}'.format(etab))
    if ens is None:
        print("Erreur : groupe profs-{} non trouvé dans AD")
    else:
        professeurs_members.append(ens)

print('Mise à jour du groupe eleves')
datas = (ldap.MOD_REPLACE, 'member', eleves_members)
connexion.modify_s(eleves, [datas])

print('Mise à jour du groupe professeurs')
datas = (ldap.MOD_REPLACE, 'member', professeurs_members)
connexion.modify_s(professeurs, [datas])

connexion.unbind_s()
