diff --git a/enigmail/.config b/enigmail/.config index 39dc49b..b9845a6 100644 --- a/enigmail/.config +++ b/enigmail/.config @@ -1,4 +1,9 @@ -smtp_server = smtp.gmail.com -smtp_port = 587 -smtp_login = equal_mailadress_or_different_login +smtp_server = smtp.gmail.com +smtp_port = 587 + +imap_server = imap.gmail.com +imap_port = 993 + mail_address = test@mail.com + +login = equal_mailadress_or_different_login diff --git a/enigmail/enigmail.sh b/enigmail/enigmail.sh index a0ac77c..48c601b 100644 --- a/enigmail/enigmail.sh +++ b/enigmail/enigmail.sh @@ -2,24 +2,38 @@ path=$(readlink -f $(dirname $0)) -if [ $# -eq 1 ] -then # si 1 paramètre +if [ $# -ge 1 ] +then # si 1 paramètre au moins + + if [ $# -ge 2 ] # si au moins 2 paramètres + then + param=$2; + else + param=""; + fi; + case $1 in 'help') cat "$path/source/help"|less;; 'init') # initialise le contenu du fichier de config - echo "smtp_server = smtp.gmail.com" > "$path/.config" - echo "smtp_port = 587" >> "$path/.config" - echo "smtp_login = equal_mailadress_or_different_login" >> "$path/.config" + echo "smtp_server = smtp.gmail.com" > "$path/.config" + echo "smtp_port = 587" >> "$path/.config" + echo "" >> "$path/.config" + echo "imap_server = imap.gmail.com" >> "$path/.config" + echo "imap_port = 993" >> "$path/.config" + echo "" >> "$path/.config" echo "mail_address = test@mail.com" >> "$path/.config" + echo "" >> "$path/.config" + echo "login = equal_mailadress_or_different_login" >> "$path/.config" ;; 'config') nano "$path/.config";; # ouvre en modification le fichier de config 'write') nano "$path/bucket-file";; # ouvre en modification le bucket file 'empty') echo "">"$path/bucket-file";; # vide le bucket file # ouvre en lecture le bucket file - 'read') echo "\n======================================="; cat "$path/bucket-file"|less; echo "\n=======================================";; - 'encode') python "$path/source/encode.py";; - 'decode') python "$path/source/decode.py";; - 'send') python "$path/source/send.py";; + 'read') echo "\n======================================="; cat "$path/bucket-file"; echo "\n=======================================";; + 'encode') python "$path/source/encode.py" $param;; + 'decode') python "$path/source/decode.py" $param;; + 'receive') python "$path/source/receive.py" $param;; + 'send') python "$path/source/send.py" $param;; *) echo "Erreur"; esac; else diff --git a/enigmail/source/decode.py b/enigmail/source/decode.py index 264d6b6..c300c8e 100644 --- a/enigmail/source/decode.py +++ b/enigmail/source/decode.py @@ -6,6 +6,10 @@ import getpass, sys, os # RECUPERATION DU CHEMIN ABSOLU path = os.path.abspath( os.path.dirname(sys.argv[0]) ) + + + + # OUVERTURE ET LECTURE DU FICHIER inFile = open(path + '/../bucket-file', 'r'); m = inFile.read().decode('utf-8'); @@ -15,8 +19,10 @@ inFile.close(); # DEFINITION DE L'ALPHABET SIGMA = getSigma(); -# CHOIX DE LA CLE -userkey = int( raw_input('Cle (hex ou int): '), 0); +if( len(sys.argv) >= 2 ): # si clé en argument + userkey = int( sys.argv[1], 0 ); +else: # sinon saisie + userkey = int( raw_input('Cle (hex ou int): '), 0 ); # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) LEVEL = calcLevel(userkey, SIGMA); diff --git a/enigmail/source/encode.py b/enigmail/source/encode.py index bfa8848..343d00e 100644 --- a/enigmail/source/encode.py +++ b/enigmail/source/encode.py @@ -15,8 +15,10 @@ inFile.close(); # DEFINITION DE L'ALPHABET SIGMA = getSigma(); -# CHOIX DE LA CLE -userkey = int( raw_input('Cle (hex ou int): '), 0); +if( len(sys.argv) >= 2 ): # si clé en argument + userkey = int( sys.argv[1], 0 ); +else: # sinon saisie + userkey = int( raw_input('Cle (hex ou int): '), 0 ); # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) LEVEL = calcLevel(userkey, SIGMA); diff --git a/enigmail/source/enigmail.py b/enigmail/source/enigmail.py index c864cbd..bef8b0d 100644 --- a/enigmail/source/enigmail.py +++ b/enigmail/source/enigmail.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +import email +import imaplib import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText @@ -16,11 +18,14 @@ def getConf(pPath): conf = {}; for i in lines: - confKey = i[:i.index('=')].replace(' ', ''); - confVal = i[i.index('=')+1:].replace(' ', '').replace('\n', ''); - conf[confKey] = confVal; + try: + confKey = i[:i.index('=')].replace(' ', ''); + confVal = i[i.index('=')+1:].replace(' ', '').replace('\n', ''); + conf[confKey] = confVal; + except ValueError: + pass; - if( len(conf) == 4 ): # si le fichier de config est bien récupéré et qu'il est complet + if( len(conf) == 6 ): # si le fichier de config est bien récupéré et qu'il est complet return conf; else: return False; @@ -34,7 +39,7 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage): pMsg = MIMEMultipart(); pMsg['From'] = pConf['mail_address']; pMsg['To'] = pTo; - pMsg['Subject'] = pSubject; + pMsg['Subject'] = "[ENIGMAIL] "+pSubject; pMsg.attach( MIMEText(pMessage.encode('utf-8')) ); @@ -44,7 +49,7 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage): srv.starttls(); srv.ehlo(); - srv.login(pConf['smtp_login'], pPass); + srv.login(pConf['login'], pPass); srv.sendmail( pConf['mail_address'], pTo, pMsg.as_string() ); print "> Mail envoye !"; @@ -53,6 +58,27 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage): finally: srv.quit(); +# cette fonction récupère les mails +def getMail(pConf, pPass): + mail = imaplib.IMAP4_SSL(pConf['imap_server'], pConf['imap_port']); + mail.login(pConf['login'], pPass); # identification + + mail.list(); + mail.select("inbox"); # On choisit le dossier INBOX. + + result, data = mail.uid('search', None, '(HEADER Subject "[ENIGMAIL]")'); # on cherche les mails contenant [ENIGMAIL] dans le sujet + latest_email_uid = data[0].split()[-1]; + result, data = mail.uid('fetch', latest_email_uid, '(RFC822)'); + m = data[0][-1]; + + # Pour le dernier mail contenant [ENIGMAIL] dans le sujet, on met le contenu dans bucket file + body = ''; + b = email.message_from_string(m); + if( b.is_multipart() ): + for p in b.get_payload(): + body += p.get_payload() + return body; + # fonction qui renvoie l'alphabet diff --git a/enigmail/source/enigmail.pyc b/enigmail/source/enigmail.pyc new file mode 100644 index 0000000..b92c335 Binary files /dev/null and b/enigmail/source/enigmail.pyc differ diff --git a/enigmail/source/receive.py b/enigmail/source/receive.py new file mode 100644 index 0000000..df3d248 --- /dev/null +++ b/enigmail/source/receive.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from enigmail import * +import getpass, sys, os + +# RECUPERATION DU CHEMIN ABSOLU +path = os.path.abspath( os.path.dirname(sys.argv[0]) ); + +# paramètres utilisateurs +conf = getConf(path); + +if( conf == False ): # si manque des paramètres + print "parametres manquants"; + raise SystemExit(0); + +Pass = str( getpass.getpass('Mot de passe : ') ); +print '...'; + +# si il existe bien un mail et qu'il n'y a pas d'erreurs +body = getMail(conf, Pass); +if( body != '' ): + # ECRITURE FICHIER + outFile = open(path + '/../bucket-file', 'w'); + outFile.write( body ); + outFile.close(); +else: + print "Erreur"; \ No newline at end of file