#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ldap
import re
import smtplib
from email.mime.text import MIMEText
from email.Header import Header

mail_server = smtplib.SMTP('mail.ncc.unesp.br')
#mail_server = smtplib.SMTP('localhost')

l = ldap.initialize('ldap://ldap.ncc.unesp.br')
groups = l.search_s('ou=research,ou=groups,dc=ncc,dc=unesp,dc=br', ldap.SCOPE_ONELEVEL, '(objectClass=posixGroup)', ['cn','memberUid','description'])

for g in groups:
    # The old format in LDAP: "name" <email>
    name = re.findall('\"(.*)\" <.*>', g[1]['description'][0])[0]
    email = l.search_s(g[0], ldap.SCOPE_ONELEVEL, '(cn=coordinator)', ['mail'])[0][1]['mail'][0]

    users = []
    if g[1].has_key('memberUid'):
        for u in g[1]['memberUid']:
            user = l.search_s('ou=people,dc=ncc,dc=unesp,dc=br', ldap.SCOPE_ONELEVEL, '(uid=%s)' % u, ['cn','mail','uid'])[0][1]
            users.append((user['cn'][0].decode('utf-8'), user['uid'][0], user['mail'][0]))
    else:
        #Project empty
        continue

    #print "Project: %s <%s>" % (name, email)
    #for i in users:
    #    print "  User:%s <%s>" % i

    msg = u"Prezado Coordenador,\n\n Visando a segurança de nossos sistemas pedimos que você revise a lista de usuários que estão cadastrados em seu projeto. Responda a esse email apenas se observar que algum usuário deva ser removido, mantendo apenas o nome dos usuários que devem ser *descadastrados*.\n\n Atenciosamente,\n  Equipe Técnica GridUNESP\n\n\n"
    for i in users:
        msg += u"  %s (%s) <%s>\n" % i
 
    print "Sending email to project %s" % name 
    mail = MIMEText(msg.encode('UTF-8'), 'plain', 'UTF-8')
    mail['Subject'] = Header('Limpeza do cadastro dos usuários', 'UTF-8')
    mail['From'] = 'Support GridUNESP <support@ncc.unesp.br>'
    mail['To'] = 'winckler@ncc.unesp.br'
    mail_server.sendmail('Support GridUNESP <support@ncc.unesp.br>', 'winckler@ncc.unesp.br', mail.as_string())
    #mail_server.sendmail('Support GridUNESP <support@ncc.unesp.br>', email, msg)

