Apply Vit advices about .env and few stuff

This commit is contained in:
poka 2020-11-21 23:26:52 +01:00
parent dea707babf
commit 02ae104da2
6 changed files with 48 additions and 37 deletions

4
.env.template Normal file
View File

@ -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

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
.env
userEnv.py
__pycache__

View File

@ -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)

View File

@ -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)

View File

@ -3,3 +3,4 @@ base58
pybase64
duniterpy
termcolor
python-dotenv

View File

@ -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