forked from axiom-team/jaklis
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 shutil import copyfile
|
||||
from dotenv import load_dotenv
|
||||
from lib.cesiumMessaging import ReadFromCesium, SendToCesium, DeleteFromCesium
|
||||
from lib.cesiumMessaging import ReadFromCesium, SendToCesium, DeleteFromCesium, VERSION
|
||||
|
||||
# Get varriables environment
|
||||
if not os.path.isfile('.env'):
|
||||
|
@ -21,13 +21,14 @@ if not dunikey or not pod:
|
|||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-v', '--version', action='store_true', help="Affiche la version actuelle du programme")
|
||||
|
||||
subparsers = parser.add_subparsers()
|
||||
read_cmd = subparsers.add_parser('read', help="Lecture des messages")
|
||||
send_cmd = subparsers.add_parser('send', help="Envoi 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")
|
||||
parser.print_help()
|
||||
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('-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é")
|
||||
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.version:
|
||||
print(VERSION)
|
||||
sys.exit(0)
|
||||
|
||||
# Build cesiumMessaging class
|
||||
if sys.argv[1] == "read":
|
||||
messages = ReadFromCesium(dunikey, pod)
|
||||
|
@ -62,10 +66,11 @@ elif sys.argv[1] == "send":
|
|||
else:
|
||||
titre = input("Indiquez le titre du message: ")
|
||||
msg = input("Indiquez le contenu du message: ")
|
||||
|
||||
messages = SendToCesium(dunikey, pod, args.destinataire, args.outbox)
|
||||
messages.send(titre, msg)
|
||||
|
||||
elif sys.argv[1] == "delete":
|
||||
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 termcolor import colored
|
||||
|
||||
VERSION = "0.1-dev"
|
||||
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:
|
||||
def __init__(self, dunikey, pod):
|
||||
# Get my pubkey from my private key
|
||||
|
@ -69,41 +77,63 @@ class ReadFromCesium:
|
|||
}
|
||||
|
||||
# Send JSON document and get JSON result
|
||||
result = requests.post('{0}/message/{1}/_search'.format(self.pod, boxType), headers=headers, data=document).json()["hits"]
|
||||
return result
|
||||
result = requests.post('{0}/message/{1}/_search'.format(self.pod, boxType), headers=headers, data=document)
|
||||
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
|
||||
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
|
||||
rows = int(os.popen('stty size', 'r').read().split()[1])
|
||||
|
||||
self.total = msgJSON["total"]
|
||||
infoTotal = " Nombre de messages: " + str(nbrMsg) + "/" + str(self.total) + " "
|
||||
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.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) + " "
|
||||
totalMsg = msgJSON["total"]
|
||||
if nbrMsg > totalMsg:
|
||||
nbrMsg = totalMsg
|
||||
|
||||
print('-'.center(rows, '-'))
|
||||
print(colored(headerMsg, "blue").center(rows+9, '-'))
|
||||
print('-'.center(rows, '-'))
|
||||
print("Objet: " + self.title)
|
||||
print(self.content)
|
||||
if totalMsg == 0:
|
||||
print(colored("Aucun message à afficher.", 'yellow'))
|
||||
return True
|
||||
else:
|
||||
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):
|
||||
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.exit(1)
|
||||
else:
|
||||
print(colored("Message envoyé avec succès !", "green"))
|
||||
print("ID: " + result.text)
|
||||
return result
|
||||
|
||||
if result.status_code == 200:
|
||||
print(colored("Message envoyé avec succès !", "green"))
|
||||
print("ID: " + result.text)
|
||||
return result
|
||||
else:
|
||||
sys.stderr.write("Erreur inconnue.")
|
||||
|
||||
def send(self, title, msg):
|
||||
finalDoc = self.configDoc(self.encryptMsg(title), self.encryptMsg(msg)) # Configure JSON document to send
|
||||
|
@ -239,7 +271,7 @@ class DeleteFromCesium:
|
|||
|
||||
return finalDoc
|
||||
|
||||
def sendDocument(self, document):
|
||||
def sendDocument(self, document, idMsg):
|
||||
headers = {
|
||||
'Content-type': 'application/json',
|
||||
}
|
||||
|
@ -249,14 +281,20 @@ class DeleteFromCesium:
|
|||
result = requests.post('{0}/history/delete'.format(self.pod), headers=headers, data=document)
|
||||
if result.status_code == 404:
|
||||
raise ValueError("Message introuvable")
|
||||
elif result.status_code == 403:
|
||||
raise ValueError("Vous n'êtes pas l'auteur de ce message.")
|
||||
except Exception as e:
|
||||
sys.stderr.write("Impossible de supprimer le message:\n" + str(e) + "\n")
|
||||
sys.exit(1)
|
||||
sys.stderr.write(colored("Impossible de supprimer le message {0}:\n".format(idMsg), 'red') + str(e) + "\n")
|
||||
return False
|
||||
else:
|
||||
print(colored("Message supprimé avec succès !", "green"))
|
||||
return result
|
||||
if result.status_code == 200:
|
||||
print(colored("Message {0} supprimé avec succès !".format(idMsg), "green"))
|
||||
return result
|
||||
else:
|
||||
sys.stderr.write("Erreur inconnue.")
|
||||
|
||||
def delete(self, idMsg):
|
||||
finalDoc = self.configDoc(idMsg)
|
||||
self.sendDocument(finalDoc)
|
||||
def delete(self, idsMsgList):
|
||||
for idMsg in idsMsgList:
|
||||
finalDoc = self.configDoc(idMsg)
|
||||
self.sendDocument(finalDoc, idMsg)
|
||||
|
||||
|
|
Loading…
Reference in New Issue