From 1c214f3eddf70c4b5fc5f972a15c12f1c85a1718 Mon Sep 17 00:00:00 2001 From: Maxime Bombar <bombar@crans.org> Date: Sat, 27 Nov 2021 09:17:22 +0000 Subject: [PATCH] Porting commit c17458fc3286491b55cd479d230e0bf1591a7b3f to python3 version: Allows to display qrcode of the secret --- CHANGELOG | 4 ++++ cpasswords/client.py | 29 +++++++++++++++++++++++++---- setup.py | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ce2f222..490106b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,10 @@ cranspasswords possède plusieurs branches. * 0.1, 0.2,… : anciennes versions (si vieux serveur), ça n'intègre plus de nouvelles fonctionnalités, seulement d'éventuels bugfix. +=== 0.3.0 === + +Permet d'afficher le secret dans un qrcode. + === 0.2.0 === La configuration du client a changé de format, diff --git a/cpasswords/client.py b/cpasswords/client.py index 0e9e448..8fd6928 100755 --- a/cpasswords/client.py +++ b/cpasswords/client.py @@ -395,17 +395,20 @@ def show_file(options): old_clipboard = None # Essaie de planquer le mot de passe + secret = None for line in texte.split('\n'): catch_pass = None # On essaie de trouver le pass pour le cacher dans le clipboard # si ce n'est déjà fait et si c'est voulu - if not is_hidden and options.clipboard: + if not is_hidden and (options.clipboard or options.qrencode): catch_pass = pass_regexp.match(line) if catch_pass is not None: is_hidden = True - # On met le mdp dans le clipboard en mémorisant son ancien contenu - old_clipboard = saveclipboard() - pyperclip.copy(catch_pass.group(1)) + secret = catch_pass.group(1) + if options.clipboard: + # On met le mdp dans le clipboard en mémorisant son ancien contenu + old_clipboard = saveclipboard() + pyperclip.copy(secret) # Et donc on override l'affichage line = "[Le mot de passe a été mis dans le presse papier]" filtered += line + '\n' @@ -434,6 +437,8 @@ def show_file(options): pub_file.flush() subprocess.check_call(['ssh-add', '-d', pub_file.name]) + elif options.qrencode and secret is not None: + showqr(secret) else: # Le binaire à utiliser showbin = "cat" if is_hidden else "less" @@ -447,6 +452,15 @@ def show_file(options): if old_clipboard is not None: saveclipboard(restore=True, old_clipboard=old_clipboard) +def showqr(secret): + qrencode = subprocess.Popen(['/usr/bin/qrencode', '-o', '-'], + stdin=subprocess.PIPE, stdout=subprocess.PIPE) + feh = subprocess.Popen(['/usr/bin/feh', '--zoom', 'fill' '-'], + stdin=qrencode.stdout) + qrencode.stdin.write(secret.encode('utf-8')) + qrencode.stdin.flush() + qrencode.stdin.close() + feh.wait() @need_filename def show_minimal(options): @@ -760,6 +774,13 @@ def main(): dest='clipboard', help=_("do not try to store password in clipboard"), ) + parser.add_argument( + '--qr', + action='store_true', + default=None, + dest='qrencode', + help=_("display a qrcode containing the secret"), + ) parser.add_argument( '-f', '--force', action='store_true', diff --git a/setup.py b/setup.py index 8740212..73cbc80 100755 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ def compile_messages(): setup( name="cpasswords", - version="0.2.0", + version="0.3.0", description="Group password manager based on GPG", long_description=open('README.rst', encoding='utf-8').read(), author="CRANS", -- GitLab