Commit fe9ba118 authored by Pierre-Elliott Bécue's avatar Pierre-Elliott Bécue

[cranspasswords] On envoit les notifs via la commande sendmail

parent 492d9f66
...@@ -10,9 +10,9 @@ import os ...@@ -10,9 +10,9 @@ import os
import pwd import pwd
import sys import sys
import json import json
import smtplib
import datetime import datetime
import socket import socket
import subprocess
from email.mime.text import MIMEText from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
...@@ -137,7 +137,7 @@ def listkeys(): ...@@ -137,7 +137,7 @@ def listkeys():
def listfiles(): def listfiles():
"""Liste les fichiers dans l'espace de stockage, et les roles qui peuvent y accéder""" """Liste les fichiers dans l'espace de stockage, et les roles qui peuvent y accéder"""
os.chdir(serverconfig.STORE) os.chdir(serverconfig.STORE)
filenames = glob.glob('*.json') filenames = glob.glob('*.json')
files = {} files = {}
for filename in filenames: for filename in filenames:
...@@ -158,7 +158,7 @@ def getfile(filename): ...@@ -158,7 +158,7 @@ def getfile(filename):
return [True, obj] return [True, obj]
except IOError: except IOError:
return [False, u"Le fichier %s n'existe pas." % filename] return [False, u"Le fichier %s n'existe pas." % filename]
@server_command('getfiles', stdin_input=True) @server_command('getfiles', stdin_input=True)
def getfiles(filenames): def getfiles(filenames):
"""Récupère plusieurs fichiers, lit la liste des filenames demandés sur stdin""" """Récupère plusieurs fichiers, lit la liste des filenames demandés sur stdin"""
...@@ -175,11 +175,11 @@ def _putfile(filename, roles, contents): ...@@ -175,11 +175,11 @@ def _putfile(filename, roles, contents):
oldroles = old['roles'] oldroles = old['roles']
if not validate(oldroles, 'w'): if not validate(oldroles, 'w'):
return [False, u"Vous n'avez pas le droit d'écriture sur %s." % filename] return [False, u"Vous n'avez pas le droit d'écriture sur %s." % filename]
corps = u"Le fichier %s a été modifié par %s." % (filename, MYUID) corps = u"Le fichier %s a été modifié par %s." % (filename, MYUID)
backup(corps, filename, old) backup(corps, filename, old)
notification(u"Modification de %s" % filename, corps, filename, old) notification(u"Modification de %s" % filename, corps, filename, old)
filepath = getpath(filename) filepath = getpath(filename)
if type(contents) != unicode: if type(contents) != unicode:
return [False, u"Erreur: merci de patcher votre cpasswords !" return [False, u"Erreur: merci de patcher votre cpasswords !"
...@@ -241,25 +241,25 @@ def backup(corps, fname, old): ...@@ -241,25 +241,25 @@ def backup(corps, fname, old):
back.write((u'* %s: %s\n' % (str(datetime.datetime.now()), corps)).encode("utf-8")) back.write((u'* %s: %s\n' % (str(datetime.datetime.now()), corps)).encode("utf-8"))
back.close() back.close()
# TODO monter plus haut
def notification(subject, corps, fname, old): def notification(subject, corps, fname, old):
"""Envoie par mail une notification de changement de fichier""" """Envoie par mail une notification de changement de fichier"""
conn = smtplib.SMTP('localhost')
frommail = serverconfig.CRANSP_MAIL frommail = serverconfig.CRANSP_MAIL
tomail = serverconfig.DEST_MAIL tomail = serverconfig.DEST_MAIL
msg = MIMEMultipart(_charset="utf-8") msg = MIMEMultipart(_charset="utf-8")
msg['Subject'] = subject msg['Subject'] = subject
msg['X-Mailer'] = serverconfig.cmd_name.decode() msg['X-Mailer'] = serverconfig.cmd_name.decode()
msg['From'] = serverconfig.CRANSP_MAIL msg['From'] = frommail
msg['To'] = serverconfig.DEST_MAIL msg['To'] = tomail
msg.preamble = u"%s report" % (serverconfig.cmd_name.decode(),) msg.preamble = u"%s report" % (serverconfig.cmd_name.decode(),)
info = MIMEText(corps + info = MIMEText(corps +
u"\nLa version précédente a été sauvegardée." + u"\nLa version précédente a été sauvegardée." +
u"\n\nModification effectuée sur %s." % socket.gethostname() + u"\n\nModification effectuée sur %s." % socket.gethostname() +
u"\n\n-- \nCranspasswords.py", _charset="utf-8") u"\n\n-- \nCranspasswords.py", _charset="utf-8")
msg.attach(info) msg.attach(info)
conn.sendmail(frommail, tomail, msg.as_string()) mailProcess = subprocess.Popen([serverconfig.sendmail_cmd, "-t"], stdin=subprocess.PIPE)
conn.quit() mailProcess.communicate(msg.as_string())
if __name__ == "__main__": if __name__ == "__main__":
argv = sys.argv[0:] argv = sys.argv[0:]
......
...@@ -13,6 +13,9 @@ Dans le futur, pourra être remplacé par une connexion ldap. ...@@ -13,6 +13,9 @@ Dans le futur, pourra être remplacé par une connexion ldap.
#: Pour override le nom si vous voulez renommer la commande #: Pour override le nom si vous voulez renommer la commande
cmd_name = 'cranspasswords' cmd_name = 'cranspasswords'
#: Chemin vers la commande sendmail
sendmail_cmd = '/usr/lib/sendmail'
#: Répertoire de stockage des mots de passe #: Répertoire de stockage des mots de passe
STORE = '/var/lib/%s/db/' % (cmd_name,) STORE = '/var/lib/%s/db/' % (cmd_name,)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment