[cranspasswords] On envoit les notifs via la commande sendmail
This commit is contained in:
parent
492d9f664a
commit
fe9ba118ed
2 changed files with 14 additions and 11 deletions
22
server.py
22
server.py
|
@ -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():
|
||||||
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):
|
||||||
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):
|
||||||
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):
|
||||||
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.
|
||||||
#: 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,)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue