Improve catching errors
This commit is contained in:
parent
d4ad7928d6
commit
931ed64481
15
dialog.py
15
dialog.py
|
@ -4,7 +4,7 @@ import argparse, sys, os
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from lib.cesiumMessaging import ReadFromCesium, SendToCesium, DeleteFromCesium
|
from lib.cesiumMessaging import ReadFromCesium, SendToCesium, DeleteFromCesium, VERSION
|
||||||
|
|
||||||
# Get varriables environment
|
# Get varriables environment
|
||||||
if not os.path.isfile('.env'):
|
if not os.path.isfile('.env'):
|
||||||
|
@ -21,13 +21,14 @@ if not dunikey or not pod:
|
||||||
|
|
||||||
# Parse arguments
|
# Parse arguments
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-v', '--version', action='store_true', help="Affiche la version actuelle du programme")
|
||||||
|
|
||||||
subparsers = parser.add_subparsers()
|
subparsers = parser.add_subparsers()
|
||||||
read_cmd = subparsers.add_parser('read', help="Lecture des messages")
|
read_cmd = subparsers.add_parser('read', help="Lecture des messages")
|
||||||
send_cmd = subparsers.add_parser('send', help="Envoi d'un message")
|
send_cmd = subparsers.add_parser('send', help="Envoi d'un message")
|
||||||
delete_cmd = subparsers.add_parser('delete', help="Supression d'un message")
|
delete_cmd = subparsers.add_parser('delete', help="Supression d'un message")
|
||||||
|
|
||||||
if len(sys.argv) <= 1 or not sys.argv[1] in ('read','send','delete'):
|
if len(sys.argv) <= 1 or not sys.argv[1] in ('read','send','delete','-v','--version'):
|
||||||
sys.stderr.write("Veuillez indiquer une commande valide:\n\n")
|
sys.stderr.write("Veuillez indiquer une commande valide:\n\n")
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -41,12 +42,15 @@ send_cmd.add_argument('-m', '--message', help="Message à envoyer")
|
||||||
send_cmd.add_argument('-f', '--fichier', help="Envoyer le message contenu dans le fichier 'FICHIER'")
|
send_cmd.add_argument('-f', '--fichier', help="Envoyer le message contenu dans le fichier 'FICHIER'")
|
||||||
send_cmd.add_argument('-o', '--outbox', action='store_true', help="Envoi le message sur la boite d'envoi")
|
send_cmd.add_argument('-o', '--outbox', action='store_true', help="Envoi le message sur la boite d'envoi")
|
||||||
|
|
||||||
delete_cmd.add_argument('-i', '--id', required=True, help="ID du message à supprimer")
|
delete_cmd.add_argument('-i', '--id', action='append', nargs='+', required=True, help="ID(s) du/des message(s) à supprimer")
|
||||||
delete_cmd.add_argument('-o', '--outbox', action='store_true', help="Suppression d'un message envoyé")
|
delete_cmd.add_argument('-o', '--outbox', action='store_true', help="Suppression d'un message envoyé")
|
||||||
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.version:
|
||||||
|
print(VERSION)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
# Build cesiumMessaging class
|
# Build cesiumMessaging class
|
||||||
if sys.argv[1] == "read":
|
if sys.argv[1] == "read":
|
||||||
messages = ReadFromCesium(dunikey, pod)
|
messages = ReadFromCesium(dunikey, pod)
|
||||||
|
@ -62,10 +66,11 @@ elif sys.argv[1] == "send":
|
||||||
else:
|
else:
|
||||||
titre = input("Indiquez le titre du message: ")
|
titre = input("Indiquez le titre du message: ")
|
||||||
msg = input("Indiquez le contenu du message: ")
|
msg = input("Indiquez le contenu du message: ")
|
||||||
|
|
||||||
messages = SendToCesium(dunikey, pod, args.destinataire, args.outbox)
|
messages = SendToCesium(dunikey, pod, args.destinataire, args.outbox)
|
||||||
messages.send(titre, msg)
|
messages.send(titre, msg)
|
||||||
|
|
||||||
elif sys.argv[1] == "delete":
|
elif sys.argv[1] == "delete":
|
||||||
messages = DeleteFromCesium(dunikey, pod, args.outbox)
|
messages = DeleteFromCesium(dunikey, pod, args.outbox)
|
||||||
messages.delete(args.id)
|
messages.delete(args.id[0])
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,16 @@ from hashlib import sha256
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from termcolor import colored
|
from termcolor import colored
|
||||||
|
|
||||||
|
VERSION = "0.1-dev"
|
||||||
PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}"
|
PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}"
|
||||||
|
|
||||||
|
def pp_json(json_thing, sort=True, indents=4):
|
||||||
|
if type(json_thing) is str:
|
||||||
|
print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
|
||||||
|
else:
|
||||||
|
print(json.dumps(json_thing, sort_keys=sort, indent=indents))
|
||||||
|
return None
|
||||||
|
|
||||||
class ReadFromCesium:
|
class ReadFromCesium:
|
||||||
def __init__(self, dunikey, pod):
|
def __init__(self, dunikey, pod):
|
||||||
# Get my pubkey from my private key
|
# Get my pubkey from my private key
|
||||||
|
@ -69,41 +77,63 @@ class ReadFromCesium:
|
||||||
}
|
}
|
||||||
|
|
||||||
# Send JSON document and get JSON result
|
# Send JSON document and get JSON result
|
||||||
result = requests.post('{0}/message/{1}/_search'.format(self.pod, boxType), headers=headers, data=document).json()["hits"]
|
result = requests.post('{0}/message/{1}/_search'.format(self.pod, boxType), headers=headers, data=document)
|
||||||
return result
|
if result.status_code == 200:
|
||||||
|
return result.json()["hits"]
|
||||||
|
else:
|
||||||
|
sys.stderr.write("Echec de l'envoi du document de lecture des messages...\n" + result.text)
|
||||||
|
|
||||||
# Parse JSON result and display messages
|
# Parse JSON result and display messages
|
||||||
def readMessages(self, msgJSON, nbrMsg):
|
def readMessages(self, msgJSON, nbrMsg, outbox):
|
||||||
|
def decrypt(msg):
|
||||||
|
msg64 = base64.b64decode(msg)
|
||||||
|
return box_decrypt(msg64, get_privkey(self.dunikey, "pubsec"), self.issuer, nonce).decode()
|
||||||
|
|
||||||
# Get terminal size
|
# Get terminal size
|
||||||
rows = int(os.popen('stty size', 'r').read().split()[1])
|
rows = int(os.popen('stty size', 'r').read().split()[1])
|
||||||
|
|
||||||
self.total = msgJSON["total"]
|
totalMsg = msgJSON["total"]
|
||||||
infoTotal = " Nombre de messages: " + str(nbrMsg) + "/" + str(self.total) + " "
|
if nbrMsg > totalMsg:
|
||||||
print(colored(infoTotal.center(rows, '#'), "yellow"))
|
nbrMsg = totalMsg
|
||||||
for hits in msgJSON["hits"]:
|
|
||||||
self.idMsg = hits["_id"]
|
|
||||||
msgSrc = hits["_source"]
|
|
||||||
self.issuer = msgSrc["issuer"]
|
|
||||||
nonce = msgSrc["nonce"]
|
|
||||||
nonce = base58.b58decode(nonce)
|
|
||||||
self.title = base64.b64decode(msgSrc["title"])
|
|
||||||
self.title = box_decrypt(self.title, get_privkey(self.dunikey, "pubsec"), self.issuer, nonce).decode()
|
|
||||||
self.content = base64.b64decode(msgSrc["content"])
|
|
||||||
self.content = box_decrypt(self.content, get_privkey(self.dunikey, "pubsec"), self.issuer, nonce).decode()
|
|
||||||
self.dateS = msgSrc["time"]
|
|
||||||
date = datetime.fromtimestamp(self.dateS).strftime(", le %d/%m/%Y à %H:%M ")
|
|
||||||
headerMsg = " De " + self.issuer + date + "(ID: {})".format(self.idMsg) + " "
|
|
||||||
|
|
||||||
print('-'.center(rows, '-'))
|
if totalMsg == 0:
|
||||||
print(colored(headerMsg, "blue").center(rows+9, '-'))
|
print(colored("Aucun message à afficher.", 'yellow'))
|
||||||
print('-'.center(rows, '-'))
|
return True
|
||||||
print("Objet: " + self.title)
|
else:
|
||||||
print(self.content)
|
infoTotal = " Nombre de messages: " + str(nbrMsg) + "/" + str(totalMsg) + " "
|
||||||
|
print(colored(infoTotal.center(rows, '#'), "yellow"))
|
||||||
|
for hits in msgJSON["hits"]:
|
||||||
|
self.idMsg = hits["_id"]
|
||||||
|
msgSrc = hits["_source"]
|
||||||
|
self.issuer = msgSrc["issuer"]
|
||||||
|
nonce = msgSrc["nonce"]
|
||||||
|
nonce = base58.b58decode(nonce)
|
||||||
|
self.dateS = msgSrc["time"]
|
||||||
|
date = datetime.fromtimestamp(self.dateS).strftime(", le %d/%m/%Y à %H:%M ")
|
||||||
|
if outbox:
|
||||||
|
startHeader = " À " + msgSrc["recipient"]
|
||||||
|
else:
|
||||||
|
startHeader = " De " + self.issuer
|
||||||
|
headerMsg = startHeader + date + "(ID: {})".format(self.idMsg) + " "
|
||||||
|
|
||||||
|
print('-'.center(rows, '-'))
|
||||||
|
print(colored(headerMsg, "blue").center(rows+9, '-'))
|
||||||
|
print('-'.center(rows, '-'))
|
||||||
|
try:
|
||||||
|
self.title = decrypt(msgSrc["title"])
|
||||||
|
self.content = decrypt(msgSrc["content"])
|
||||||
|
except Exception as e:
|
||||||
|
sys.stderr.write(colored(str(e), 'red') + '\n')
|
||||||
|
pp_json(hits)
|
||||||
|
continue
|
||||||
|
print("Objet: " + self.title)
|
||||||
|
print(self.content)
|
||||||
|
# pp_json(hits)
|
||||||
|
|
||||||
|
|
||||||
def read(self, nbrMsg, outbox):
|
def read(self, nbrMsg, outbox):
|
||||||
jsonMsg = self.sendDocument(nbrMsg, outbox)
|
jsonMsg = self.sendDocument(nbrMsg, outbox)
|
||||||
self.readMessages(jsonMsg, nbrMsg)
|
self.readMessages(jsonMsg, nbrMsg, outbox)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,10 +211,12 @@ class SendToCesium:
|
||||||
sys.stderr.write("Impossible d'envoyer le message:\n" + str(e))
|
sys.stderr.write("Impossible d'envoyer le message:\n" + str(e))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print(colored("Message envoyé avec succès !", "green"))
|
if result.status_code == 200:
|
||||||
print("ID: " + result.text)
|
print(colored("Message envoyé avec succès !", "green"))
|
||||||
return result
|
print("ID: " + result.text)
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
sys.stderr.write("Erreur inconnue.")
|
||||||
|
|
||||||
def send(self, title, msg):
|
def send(self, title, msg):
|
||||||
finalDoc = self.configDoc(self.encryptMsg(title), self.encryptMsg(msg)) # Configure JSON document to send
|
finalDoc = self.configDoc(self.encryptMsg(title), self.encryptMsg(msg)) # Configure JSON document to send
|
||||||
|
@ -239,7 +271,7 @@ class DeleteFromCesium:
|
||||||
|
|
||||||
return finalDoc
|
return finalDoc
|
||||||
|
|
||||||
def sendDocument(self, document):
|
def sendDocument(self, document, idMsg):
|
||||||
headers = {
|
headers = {
|
||||||
'Content-type': 'application/json',
|
'Content-type': 'application/json',
|
||||||
}
|
}
|
||||||
|
@ -249,14 +281,20 @@ class DeleteFromCesium:
|
||||||
result = requests.post('{0}/history/delete'.format(self.pod), headers=headers, data=document)
|
result = requests.post('{0}/history/delete'.format(self.pod), headers=headers, data=document)
|
||||||
if result.status_code == 404:
|
if result.status_code == 404:
|
||||||
raise ValueError("Message introuvable")
|
raise ValueError("Message introuvable")
|
||||||
|
elif result.status_code == 403:
|
||||||
|
raise ValueError("Vous n'êtes pas l'auteur de ce message.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
sys.stderr.write("Impossible de supprimer le message:\n" + str(e) + "\n")
|
sys.stderr.write(colored("Impossible de supprimer le message {0}:\n".format(idMsg), 'red') + str(e) + "\n")
|
||||||
sys.exit(1)
|
return False
|
||||||
else:
|
else:
|
||||||
print(colored("Message supprimé avec succès !", "green"))
|
if result.status_code == 200:
|
||||||
return result
|
print(colored("Message {0} supprimé avec succès !".format(idMsg), "green"))
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
sys.stderr.write("Erreur inconnue.")
|
||||||
|
|
||||||
def delete(self, idMsg):
|
def delete(self, idsMsgList):
|
||||||
finalDoc = self.configDoc(idMsg)
|
for idMsg in idsMsgList:
|
||||||
self.sendDocument(finalDoc)
|
finalDoc = self.configDoc(idMsg)
|
||||||
|
self.sendDocument(finalDoc, idMsg)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue