Correction de bugs et mise en prod .
This commit is contained in:
parent
407c1e4799
commit
edfdd8ccc6
1 changed files with 55 additions and 17 deletions
|
@ -28,6 +28,12 @@ if '--dry-run' in sys.argv[1:]:
|
|||
else:
|
||||
DRY_RUN = False
|
||||
|
||||
# Exécuter le script en mode débug
|
||||
if '--debug' in sys.argv[1:]:
|
||||
DEBUG = True
|
||||
print("Mode débug\n")
|
||||
else:
|
||||
DEBUG = False
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 0) Initialisation de LDAP,objets + fcts utiles
|
||||
|
@ -40,11 +46,14 @@ else:
|
|||
MAX_CHAR = 160
|
||||
|
||||
# Connexion à la base LDAP
|
||||
ldap = shortcuts.lc_ldap_test()
|
||||
ldap = shortcuts.lc_ldap_admin()
|
||||
|
||||
# Serveur boite aux lettres
|
||||
MAILBOX_SERVER = 'zamok.crans.org'
|
||||
|
||||
if DEBUG:
|
||||
log_file = open(os.getenv('HOME')+'/alertsms.log', mode='w')
|
||||
|
||||
# Serveurs pouvant distribuer les mails de manière légitime
|
||||
TRUSTED_SERVERS = [ (
|
||||
name.replace('freebox.crans.org','titanic.crans.org'),
|
||||
|
@ -115,6 +124,8 @@ def get_trusted_servers_v6():
|
|||
"""
|
||||
return [(name,adm_name,ip_dict['ipv6']) for name,adm_name,ip_dict in TRUSTED_SERVERS ]
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 0 : OK\n'])
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 1) Lire le mail dans le flux stdin
|
||||
|
@ -137,14 +148,21 @@ by_chain = get_all_by_info(msg)
|
|||
mail_subject = msg['Subject']
|
||||
mail_content = msg.get_payload().replace('\n',' ')
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 1 : OK\n'])
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2) Ce message est-il destiné à être envoyé par SMS ?
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
if '[SMS]' not in mail_subject:
|
||||
print("Message non destiné au service SMS")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Message non destiné au service SMS"])
|
||||
sys.exit(200)
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 2 : OK\n'])
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 3) Analyse de la chaine de réception du message
|
||||
#-------------------------------------------------------------------------------
|
||||
|
@ -153,15 +171,18 @@ if '[SMS]' not in mail_subject:
|
|||
# Il faut aussi vérifier qui a distribué le mail
|
||||
|
||||
if len(received_chain) < 2:
|
||||
print("La chaine de réception n'est pas assez longue")
|
||||
if DEBUG:
|
||||
log_file.writelines(["La chaine de réception n'est pas assez longue"])
|
||||
sys.exit(300)
|
||||
|
||||
if by_chain[0] != MAILBOX_SERVER:
|
||||
print("La boîte aux lettres est suspecte :\
|
||||
{0} au lieu de {1}".format(repr(by_chain[0]),MAILBOX_SERVER))
|
||||
if DEBUG:
|
||||
log_file.writelines(["La boîte aux lettres est suspecte :\
|
||||
{0} au lieu de {1}".format(repr(by_chain[0]),MAILBOX_SERVER)])
|
||||
sys.exit(301)
|
||||
|
||||
print("Boîte aux lettres : " + MAILBOX_SERVER)
|
||||
if DEBUG:
|
||||
log_file.writelines(["Boîte aux lettres : " + MAILBOX_SERVER])
|
||||
|
||||
trusted_server = False
|
||||
sender,real_sender,ipv4,ipv6 = received_chain[0]
|
||||
|
@ -174,15 +195,19 @@ elif ipv6:
|
|||
trusted_server = server in get_trusted_servers_v6()
|
||||
|
||||
if not trusted_server:
|
||||
print("Le serveur de distribution du courrier est suspect")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Le serveur de distribution du courrier est suspect"])
|
||||
sys.exit(302)
|
||||
|
||||
print("Serveur de distribution : " + repr(server) + "\n")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Serveur de distribution : " + repr(server) + "\n"])
|
||||
|
||||
# On fait confiance à la boîte aux lettres et au serveur de distribution
|
||||
# Le serveur de distribution est le premier serveur Crans à recevoir le mail
|
||||
# Au-delà, on a aucun contrôle : On est obligé de faire confiance
|
||||
|
||||
log_file.writelines(['Phase 3 : OK\n'])
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 4) Vérifier l'identité de l'expéditeur
|
||||
#-------------------------------------------------------------------------------
|
||||
|
@ -204,14 +229,16 @@ if not special_auth:
|
|||
sender_ip = sender_ipv6
|
||||
f = filter.human_to_ldap('ip6HostNumber=' + sender_ipv6)
|
||||
else:
|
||||
print("Identification impossible : L'expéditeur n'a ni IPv4 ni IPv6")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Identification impossible : L'expéditeur n'a ni IPv4 ni IPv6"])
|
||||
sys.exit(402)
|
||||
|
||||
sender = ldap.search(f)
|
||||
|
||||
# --> Si il n'y a aucun résultat, on quitte le script
|
||||
if not sender:
|
||||
print('Aucun résultat pour l\'expéditeur dans la base LDAP')
|
||||
if DEBUG:
|
||||
log_file.writelines(['Aucun résultat pour l\'expéditeur dans la base LDAP'])
|
||||
sys.exit(400)
|
||||
|
||||
sender = sender[0]
|
||||
|
@ -235,10 +262,12 @@ if not special_auth:
|
|||
|
||||
# On quitte le script si on a pas l'autorisation
|
||||
if not is_authorized:
|
||||
print("Impossible d'envoyer le SMS (Autorisation refusée)")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Impossible d'envoyer le SMS (Autorisation refusée)"])
|
||||
sys.exit(401)
|
||||
|
||||
print(u"Expéditeur : " + pseudo + " [" + sender_ip + "]" + "\n")
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 4 : OK\n'])
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 5) Contacter le démon sms
|
||||
|
@ -251,9 +280,12 @@ if not DRY_RUN:
|
|||
|
||||
except GSMError:
|
||||
# On quitte si l'initialisation a échoué
|
||||
print("Impossible de contacter le démon SMS")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Impossible de contacter le démon SMS"])
|
||||
sys.exit(500)
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 5 : OK\n'])
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6) Ecrire le SMS
|
||||
#-------------------------------------------------------------------------------
|
||||
|
@ -272,7 +304,7 @@ tel_pattern = re.compile('^((336)|(337)|(06)|(07))[0-9]{8}$')
|
|||
|
||||
# On vérifie que ce soit un numéro de téléphone mobile valide
|
||||
if not tel_pattern.match(number):
|
||||
print("Numéro du destinataire invalide")
|
||||
log_file.writelines(["Numéro du destinataire invalide"])
|
||||
sys.exit(600)
|
||||
|
||||
# Si le numéro commence par l'indicatif 33, on rajoute le +
|
||||
|
@ -287,9 +319,12 @@ message = {
|
|||
'SMSC' : { 'Location' : 1 },
|
||||
'Number' : number,
|
||||
}
|
||||
print(u"Destinataire : " + user)
|
||||
print(u"Contenu du message : " + text + "\n")
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines([u"Destinataire : " + user])
|
||||
log_file.writelines([u"Contenu du message : " + text + "\n"])
|
||||
|
||||
log_file.writelines(['Phase 6 : OK\n'])
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7) L'envoyer
|
||||
#-------------------------------------------------------------------------------
|
||||
|
@ -300,6 +335,9 @@ if not DRY_RUN:
|
|||
daemon.InjectSMS([message])
|
||||
|
||||
except GSMError:
|
||||
print("Le message n'a pas pu être placé dans la file d'attente")
|
||||
if DEBUG:
|
||||
log_file.writelines(["Le message n'a pas pu être placé dans la file d'attente"])
|
||||
sys.exit(700)
|
||||
|
||||
if DEBUG:
|
||||
log_file.writelines(['Phase 7 : OK\n'])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue