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