Commit e8ea0074 authored by Pierre-Elliott Bécue's avatar Pierre-Elliott Bécue

Le texte retourné quand on édite peut être vide.

 * Par exemple, si le fichier n'est pas chiffré pour ma clef.
parent 58b5bf90
......@@ -298,7 +298,7 @@ def remote_command(options, command, arg=None, stdin_contents=None):
commande"""
detail = options.verbose and not options.quiet
keep_alive = options.serverdata.get('keep-alive', False)
if keep_alive:
conn = get_keep_alive_connection(options)
args = filter(None, [arg, stdin_contents])
......@@ -396,9 +396,9 @@ def gen_password():
def update_keys(options):
"""Met à jour les clés existantes"""
keys = all_keys(options)
_, stdout = gpg(options, "receive-keys", [key for _, key in keys.values() if key])
return stdout.read().decode("utf-8")
......@@ -427,7 +427,7 @@ def _check_encryptable(key):
def check_keys(options, recipients=None, quiet=False):
"""Vérifie les clés, c'est-à-dire, si le mail est présent dans les identités du fingerprint,
et que la clé est de confiance (et non expirée/révoquée).
* Si ``recipients`` est fourni, vérifie seulement ces recipients.
Renvoie la liste de ceux qu'on n'a pas droppés.
* Si ``options.force=False``, demandera confirmation pour dropper un recipient dont la clé est invalide.
......@@ -510,7 +510,7 @@ def get_dest_of_roles(options, roles):
def encrypt(options, roles, contents):
"""Chiffre le contenu pour les roles donnés"""
allkeys = all_keys(options)
recipients = get_recipients_of_roles(options, roles)
recipients = check_keys(options, recipients=recipients, quiet=True)
......@@ -520,7 +520,7 @@ def encrypt(options, roles, contents):
if fpr:
fpr_recipients.append("-r")
fpr_recipients.append(fpr)
stdin, stdout = gpg(options, "encrypt", fpr_recipients)
stdin.write(contents.encode("utf-8"))
stdin.close()
......@@ -565,7 +565,7 @@ def editor(texte, annotations=u""):
""" Lance $EDITOR sur texte.
Renvoie le nouveau texte si des modifications ont été apportées, ou None
"""
# Avoid syntax hilight with ".txt". Would be nice to have some colorscheme
# for annotations ...
f = tempfile.NamedTemporaryFile(suffix='.txt')
......@@ -573,7 +573,7 @@ def editor(texte, annotations=u""):
if annotations:
annotations = "# " + annotations.replace("\n", "\n# ")
# Usually, there is already an ending newline in a text document
if texte[-1] != '\n':
if texte and texte[-1] != '\n':
annotations = '\n' + annotations
else:
annotations += '\n'
......@@ -599,7 +599,7 @@ def show_files(options):
access = set(my_roles).intersection(froles) != set([])
print((u" %s %s (%s)" % ((access and '+' or '-'), fname, ", ".join(froles))).encode("utf-8"))
print((u"""--Mes roles: %s""" % (", ".join(my_roles),)).encode("utf-8"))
def show_roles(options):
"""Affiche la liste des roles existants"""
print(u"Liste des roles disponibles".encode("utf-8"))
......@@ -746,15 +746,15 @@ Enregistrez le fichier vide pour annuler.\n"""
message = message % (", ".join(r[:-2] for r in my_roles if '-w' in r),)
if not confirm(options, message):
return
annotations += u"""Ce fichier sera chiffré pour les rôles suivants :\n%s\n
C'est-à-dire pour les utilisateurs suivants :\n%s""" % (
', '.join(new_roles),
'\n'.join(' %s' % rec for rec in get_dest_of_roles(options, new_roles))
)
ntexte = editor(texte, annotations)
if ((not nfile and ntexte in [u'', texte] # pas nouveau, vidé ou pas modifié
and set(new_roles) == set(passfile['roles'])) # et on n'a même pas touché à ses rôles,
or (nfile and ntexte == u'')): # ou alors on a créé un fichier vide.
......@@ -809,7 +809,7 @@ def recrypt_files(options, strict=False):
if rechiffre_roles == None:
# Sans précisions, on prend tous les roles qu'on peut
rechiffre_roles = my_roles_w
# La liste des fichiers
allfiles = all_files(options)
......@@ -861,9 +861,9 @@ def parse_roles(options, cast=False):
vaut None, alors on considère cette valeur comme valide.
Cependant, si ``cast`` est vraie, cette valeur est remplacée par
tous les roles en écriture (*-w) de l'utilisateur.
Renvoie ``False`` si au moins un de ces rôles pose problème.
poser problème, c'est :
* être un role-w (il faut utiliser le role sans le w)
* ne pas exister dans la config du serveur
......@@ -966,10 +966,10 @@ if __name__ == "__main__":
parser.add_argument('fname', nargs='?', default=None,
type=lambda x: x.decode('utf-8'),
help="Nom du fichier à afficher")
# On parse les options fournies en commandline
options = parser.parse_args(sys.argv[1:])
## On calcule les options qui dépendent des autres.
## C'est un peu un hack, peut-être que la méthode propre serait de surcharger argparse.ArgumentParser
## et argparse.Namespace, mais j'ai pas réussi à comprendre commenr m'en sortir.
......@@ -991,11 +991,11 @@ if __name__ == "__main__":
# Il faudrait ptêtre faire ça plus proprement, en attendant, je ducktape.
if options.action != show_servers:
options.roles = parse_roles(options)
# Si l'utilisateur a demandé une action qui nécessite un nom de fichier,
# on vérifie qu'il a bien fourni un nom de fichier.
if options.action in NEED_FILENAME:
insult_on_nofilename(options, parser)
# On exécute l'action demandée
options.action(options)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment