From 02ae104da2108351cce2ff92ebc90d0a44c4c7bd Mon Sep 17 00:00:00 2001 From: poka Date: Sat, 21 Nov 2020 23:26:52 +0100 Subject: [PATCH] Apply Vit advices about .env and few stuff --- .env.template | 4 +++ .gitignore | 1 - dialog.py | 64 +++++++++++++++++++++++------------------- lib/cesiumMessaging.py | 11 ++++++-- requirements.txt | 1 + userEnv.py.template | 4 --- 6 files changed, 48 insertions(+), 37 deletions(-) create mode 100644 .env.template delete mode 100644 userEnv.py.template diff --git a/.env.template b/.env.template new file mode 100644 index 0000000..5063635 --- /dev/null +++ b/.env.template @@ -0,0 +1,4 @@ +DUNIKEY="" # Chemin de la clé privé Ḡ1 de l'émetteur, au format PubSec +#POD="https://g1.data.duniter.fr" # Adresse du pod Cesium ou Gchange à utiliser +POD="https://g1.data.le-sou.org" # Adresse du pod Cesium de secours +#POD="https://data.gchange.fr" # Adresse du pod ḠChange à utiliser \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7d8f797..3b72af0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .env -userEnv.py __pycache__ diff --git a/dialog.py b/dialog.py index 3ba1750..74d420d 100755 --- a/dialog.py +++ b/dialog.py @@ -1,18 +1,24 @@ #!/usr/bin/env python3 -import argparse, os, sys +import argparse, sys, os +from os.path import join, dirname from shutil import copyfile -if not os.path.isfile("userEnv.py"): - copyfile("userEnv.py.template", "userEnv.py") -try: - from userEnv import dunikey, pod - if dunikey == "": - raise ValueError("Dunikey is empty") -except: - sys.stderr.write("Please fill the path to your private key (PubSec), and a Cesium ES address in userEnv.py\n") - sys.exit(1) +from dotenv import load_dotenv from lib.cesiumMessaging import ReadFromCesium, SendToCesium, DeleteFromCesium +# Get varriables environment +if not os.path.isfile('.env'): + copyfile(".env.template", ".env") +dotenv_path = join(dirname(__file__), '.env') +load_dotenv(dotenv_path) + +dunikey = os.getenv('DUNIKEY') +pod = os.getenv('POD') +if not dunikey or not pod: + sys.stderr.write("Please fill the path of your private key (PubSec), and a Cesium ES address in .env file\n") + sys.exit(1) + + # Parse arguments parser = argparse.ArgumentParser() @@ -22,9 +28,9 @@ 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'): - sys.stderr.write("Veuillez indiquer une commande valide:\n\n") - parser.print_help() - sys.exit(1) + sys.stderr.write("Veuillez indiquer une commande valide:\n\n") + parser.print_help() + sys.exit(1) read_cmd.add_argument('-n', '--number',type=int, default=3, help="Affiche les NUMBER derniers messages") read_cmd.add_argument('-o', '--outbox', action='store_true', help="Lit les messages envoyés") @@ -43,23 +49,23 @@ args = parser.parse_args() # Build cesiumMessaging class if sys.argv[1] == "read": - messages = ReadFromCesium(dunikey, pod) - messages.read(args.number, args.outbox) + messages = ReadFromCesium(dunikey, pod) + messages.read(args.number, args.outbox) elif sys.argv[1] == "send": - if args.fichier: - with open(args.fichier, 'r') as f: - titre = f.readline() - msg = ''.join(f.read().splitlines(True)[0:]) - elif args.titre and args.message: - titre = args.titre - msg = args.message - 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) + if args.fichier: + with open(args.fichier, 'r') as f: + titre = f.readline() + msg = ''.join(f.read().splitlines(True)[0:]) + elif args.titre and args.message: + titre = args.titre + msg = args.message + 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 = DeleteFromCesium(dunikey, pod, args.outbox) + messages.delete(args.id) diff --git a/lib/cesiumMessaging.py b/lib/cesiumMessaging.py index a13eac8..1c62376 100755 --- a/lib/cesiumMessaging.py +++ b/lib/cesiumMessaging.py @@ -6,13 +6,14 @@ from hashlib import sha256 from datetime import datetime from termcolor import colored +PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}" class ReadFromCesium: def __init__(self, dunikey, pod): # Get my pubkey from my private key try: self.dunikey = dunikey - if dunikey == "": + if not dunikey: raise ValueError("Dunikey is empty") except: sys.stderr.write("Please fill the path to your private key (PubSec)\n") @@ -21,7 +22,7 @@ class ReadFromCesium: self.recipient = get_privkey(dunikey, "pubsec").pubkey self.pod = pod - if not re.match(r"(?![OIl])[1-9A-Za-z]{42,45}", self.recipient): + if not re.match(PUBKEY_REGEX, self.recipient) or len(self.recipient) > 45: sys.stderr.write("La clé publique n'est pas au bon format.\n") sys.exit(1) @@ -117,6 +118,8 @@ class SendToCesium: # Get my pubkey from my private key try: self.dunikey = dunikey + if not dunikey: + raise ValueError("Dunikey is empty") except: sys.stderr.write("Please fill the path to your private key (PubSec)\n") sys.exit(1) @@ -132,7 +135,7 @@ class SendToCesium: nonce.append(random.choice(string.ascii_letters + string.digits)) self.nonce = base64.b64decode(''.join(nonce)) - if not re.match(r"(?![OIl])[1-9A-Za-z]{42,45}", recipient): + if not re.match(PUBKEY_REGEX, recipient) or len(recipient) > 45: sys.stderr.write("La clé publique n'est pas au bon format.\n") sys.exit(1) @@ -200,6 +203,8 @@ class DeleteFromCesium: # Get my pubkey from my private key try: self.dunikey = dunikey + if not dunikey: + raise ValueError("Dunikey is empty") except: sys.stderr.write("Please fill the path to your private key (PubSec)\n") sys.exit(1) diff --git a/requirements.txt b/requirements.txt index 730ac11..bf25335 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ base58 pybase64 duniterpy termcolor +python-dotenv diff --git a/userEnv.py.template b/userEnv.py.template deleted file mode 100644 index 6cf72d2..0000000 --- a/userEnv.py.template +++ /dev/null @@ -1,4 +0,0 @@ -dunikey = "" # Chemin de la clé privé Ḡ1 de l'émetteur, au format PubSec -#pod = "https://g1.data.duniter.fr" # Adresse du pod Cesium à utiliser -pod = "https://g1.data.le-sou.org" # Adresse du pod Cesium de secours -#pod = "https://data.gchange.fr" # Adresse du pod GChange à utiliser