#!/usr/bin/env python # -*- coding: utf-8 -*- # # CRANS_UTILS.PY-- Utils for Cr@ns gestion # # Copyright (c) 2010, Cr@ns # Author: Antoine Durand-Gasselin # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Cr@ns nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import netaddr, time, smtplib import config from unicodedata import normalize def ip_of_mid(mid): """Convertit un mid en son IP associée""" for net, plage in config.mid.items(): if mid >= plage[0] and mid <= plage[1]: break else: raise ValueError("Mid dans aucune plage: %d" % mid) return netaddr.IPAddress(netaddr.IPNetwork(config.NETs[net]).first + mid - plage[0]) def strip_accents(a): """ Supression des accents de la chaîne fournie""" res = normalize('NFKD', a).encode('ASCII', 'ignore') return res.replace(' ', '_').replace("'", '') def mailexist(mail): """Vérifie si une adresse mail existe ou non grace à la commande vrfy du serveur mail """ mail = mail.split('@', 1)[0] try: s = smtplib.SMTP(config.smtpserv) s.putcmd("vrfy", mail) r = s.getreply()[0] in [250, 252] s.close() except: raise ValueError(u'Serveur de mail injoignable') return r def format_mac(mac): u""" Formatage des adresses mac Transforme une adresse pour obtenir la forme xx:xx:xx:xx:xx:xx Retourne la mac formatée. """ netaddr.EUI(mac, dialect='mac_unix') if not mac: raise ValueError(u"MAC nulle interdite\nIl doit être possible de modifier l'adresse de la carte.") return mac