print_function
This commit is contained in:
parent
7dacd6bb1b
commit
a97aa5eea3
2 changed files with 39 additions and 35 deletions
60
client.py
60
client.py
|
@ -8,6 +8,8 @@ Authors : Daniel Stan <daniel.stan@crans.org>
|
||||||
Vincent Le Gallic <legallic@crans.org>
|
Vincent Le Gallic <legallic@crans.org>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import json
|
import json
|
||||||
|
@ -192,7 +194,7 @@ def check_keys():
|
||||||
for (mail, fpr) in keys.values():
|
for (mail, fpr) in keys.values():
|
||||||
if fpr:
|
if fpr:
|
||||||
if VERB:
|
if VERB:
|
||||||
print (u"Checking %s" % (mail)).encode("utf-8")
|
print((u"Checking %s" % (mail)).encode("utf-8"))
|
||||||
corresponds = [key for key in localkeys if key["fingerprint"] == fpr]
|
corresponds = [key for key in localkeys if key["fingerprint"] == fpr]
|
||||||
# On vérifie qu'on possède la clé…
|
# On vérifie qu'on possède la clé…
|
||||||
if len(corresponds) == 1:
|
if len(corresponds) == 1:
|
||||||
|
@ -202,13 +204,13 @@ def check_keys():
|
||||||
meaning, trustvalue = GPG_TRUSTLEVELS[correspond["trust"]]
|
meaning, trustvalue = GPG_TRUSTLEVELS[correspond["trust"]]
|
||||||
# … et qu'on lui fait confiance
|
# … et qu'on lui fait confiance
|
||||||
if not trustvalue:
|
if not trustvalue:
|
||||||
print (u"--> Fail on %s:%s\nLa confiance en la clé est : %s" % (meaning,)).encode("utf-8")
|
print((u"--> Fail on %s:%s\nLa confiance en la clé est : %s" % (meaning,)).encode("utf-8"))
|
||||||
failed = True
|
failed = True
|
||||||
else:
|
else:
|
||||||
print (u"--> Fail on %s:%s\n!! Le fingerprint et le mail ne correspondent pas !" % (fpr, mail)).encode("utf-8")
|
print((u"--> Fail on %s:%s\n!! Le fingerprint et le mail ne correspondent pas !" % (fpr, mail)).encode("utf-8"))
|
||||||
failed = True
|
failed = True
|
||||||
else:
|
else:
|
||||||
print (u"--> Fail on %s:%s\nPas (ou trop) de clé avec ce fingerprint." % (fpr, mail)).encode("utf-8")
|
print((u"--> Fail on %s:%s\nPas (ou trop) de clé avec ce fingerprint." % (fpr, mail)).encode("utf-8"))
|
||||||
failed = True
|
failed = True
|
||||||
return not failed
|
return not failed
|
||||||
|
|
||||||
|
@ -245,8 +247,8 @@ def encrypt(roles, contents):
|
||||||
stdin.close()
|
stdin.close()
|
||||||
out = stdout.read().decode("utf-8")
|
out = stdout.read().decode("utf-8")
|
||||||
if out == '':
|
if out == '':
|
||||||
if VERB:
|
if not QUIET:
|
||||||
print u"Échec de chiffrement".encode("utf-8")
|
print(u"Échec de chiffrement".encode("utf-8"))
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
return out
|
return out
|
||||||
|
@ -265,7 +267,7 @@ def put_password(name, roles, contents):
|
||||||
if NROLES != None:
|
if NROLES != None:
|
||||||
roles = NROLES
|
roles = NROLES
|
||||||
if VERB:
|
if VERB:
|
||||||
print u"Pas de nouveaux rôles".encode("utf-8")
|
print(u"Pas de nouveaux rôles".encode("utf-8"))
|
||||||
if enc_pwd <> None:
|
if enc_pwd <> None:
|
||||||
return put_file(name, roles, enc_pwd)
|
return put_file(name, roles, enc_pwd)
|
||||||
else:
|
else:
|
||||||
|
@ -304,7 +306,7 @@ def editor(texte, annotations=u""):
|
||||||
|
|
||||||
def show_files():
|
def show_files():
|
||||||
"""Affiche la liste des fichiers disponibles sur le serveur distant"""
|
"""Affiche la liste des fichiers disponibles sur le serveur distant"""
|
||||||
print u"Liste des fichiers disponibles :".encode("utf-8")
|
print(u"Liste des fichiers disponibles :".encode("utf-8"))
|
||||||
my_roles = get_my_roles()
|
my_roles = get_my_roles()
|
||||||
files = all_files()
|
files = all_files()
|
||||||
keys = files.keys()
|
keys = files.keys()
|
||||||
|
@ -312,21 +314,21 @@ def show_files():
|
||||||
for fname in keys:
|
for fname in keys:
|
||||||
froles = files[fname]
|
froles = files[fname]
|
||||||
access = set(my_roles).intersection(froles) != set([])
|
access = set(my_roles).intersection(froles) != set([])
|
||||||
print (u" %s %s (%s)" % ((access and '+' or '-'), fname, ", ".join(froles))).encode("utf-8")
|
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")
|
print((u"""--Mes roles: %s""" % (", ".join(my_roles),)).encode("utf-8"))
|
||||||
|
|
||||||
def show_roles():
|
def show_roles():
|
||||||
"""Affiche la liste des roles existants"""
|
"""Affiche la liste des roles existants"""
|
||||||
print u"Liste des roles disponibles".encode("utf-8")
|
print(u"Liste des roles disponibles".encode("utf-8"))
|
||||||
for role in all_roles().keys():
|
for role in all_roles().keys():
|
||||||
if not role.endswith('-w'):
|
if not role.endswith('-w'):
|
||||||
print (u" * " + role ).encode("utf-8")
|
print((u" * " + role ).encode("utf-8"))
|
||||||
|
|
||||||
def show_servers():
|
def show_servers():
|
||||||
"""Affiche la liste des serveurs disponibles"""
|
"""Affiche la liste des serveurs disponibles"""
|
||||||
print u"Liste des serveurs disponibles".encode("utf-8")
|
print(u"Liste des serveurs disponibles".encode("utf-8"))
|
||||||
for server in config.servers.keys():
|
for server in config.servers.keys():
|
||||||
print (u" * " + server).encode("utf-8")
|
print((u" * " + server).encode("utf-8"))
|
||||||
|
|
||||||
old_clipboard = None
|
old_clipboard = None
|
||||||
def saveclipboard(restore=False):
|
def saveclipboard(restore=False):
|
||||||
|
@ -359,7 +361,7 @@ def show_file(fname):
|
||||||
"""Affiche le contenu d'un fichier"""
|
"""Affiche le contenu d'un fichier"""
|
||||||
value = get_file(fname)
|
value = get_file(fname)
|
||||||
if value == False:
|
if value == False:
|
||||||
print u"Fichier introuvable".encode("utf-8")
|
print(u"Fichier introuvable".encode("utf-8"))
|
||||||
return
|
return
|
||||||
(sin, sout) = gpg('decrypt')
|
(sin, sout) = gpg('decrypt')
|
||||||
sin.write(value['contents'].encode("utf-8"))
|
sin.write(value['contents'].encode("utf-8"))
|
||||||
|
@ -390,7 +392,7 @@ def edit_file(fname):
|
||||||
annotations = u""
|
annotations = u""
|
||||||
if value == False:
|
if value == False:
|
||||||
nfile = True
|
nfile = True
|
||||||
print u"Fichier introuvable".encode("utf-8")
|
print(u"Fichier introuvable".encode("utf-8"))
|
||||||
if not confirm(u"Créer fichier ?"):
|
if not confirm(u"Créer fichier ?"):
|
||||||
return
|
return
|
||||||
annotations += u"""Ceci est un fichier initial contenant un mot de passe
|
annotations += u"""Ceci est un fichier initial contenant un mot de passe
|
||||||
|
@ -402,7 +404,7 @@ Enregistrez le fichier vide pour annuler.\n"""
|
||||||
# créateur
|
# créateur
|
||||||
roles = [ r[:-2] for r in roles if r.endswith('-w') ]
|
roles = [ r[:-2] for r in roles if r.endswith('-w') ]
|
||||||
if roles == []:
|
if roles == []:
|
||||||
print u"Vous ne possédez aucun rôle en écriture ! Abandon.".encode("utf-8")
|
print(u"Vous ne possédez aucun rôle en écriture ! Abandon.".encode("utf-8"))
|
||||||
return
|
return
|
||||||
value = {'roles' : roles}
|
value = {'roles' : roles}
|
||||||
else:
|
else:
|
||||||
|
@ -421,13 +423,13 @@ C'est-à-dire pour les utilisateurs suivants :\n%s""" % (
|
||||||
ntexte = editor(texte, annotations)
|
ntexte = editor(texte, annotations)
|
||||||
|
|
||||||
if ntexte == None and not nfile and NROLES == None:
|
if ntexte == None and not nfile and NROLES == None:
|
||||||
print u"Pas de modifications effectuées".encode("utf-8")
|
print(u"Pas de modifications effectuées".encode("utf-8"))
|
||||||
else:
|
else:
|
||||||
ntexte = texte if ntexte == None else ntexte
|
ntexte = texte if ntexte == None else ntexte
|
||||||
if put_password(fname, value['roles'], ntexte):
|
if put_password(fname, value['roles'], ntexte):
|
||||||
print u"Modifications enregistrées".encode("utf-8")
|
print(u"Modifications enregistrées".encode("utf-8"))
|
||||||
else:
|
else:
|
||||||
print u"Erreur lors de l'enregistrement (avez-vous les droits suffisants ?)".encode("utf-8")
|
print(u"Erreur lors de l'enregistrement (avez-vous les droits suffisants ?)".encode("utf-8"))
|
||||||
|
|
||||||
def confirm(text):
|
def confirm(text):
|
||||||
"""Demande confirmation, sauf si on est mode ``FORCED``"""
|
"""Demande confirmation, sauf si on est mode ``FORCED``"""
|
||||||
|
@ -444,19 +446,19 @@ def remove_file(fname):
|
||||||
if not confirm((u'Êtes-vous sûr de vouloir supprimer %s ?' % fname).encode("utf-8")):
|
if not confirm((u'Êtes-vous sûr de vouloir supprimer %s ?' % fname).encode("utf-8")):
|
||||||
return
|
return
|
||||||
if rm_file(fname):
|
if rm_file(fname):
|
||||||
print u"Suppression effectuée".encode("utf-8")
|
print(u"Suppression effectuée".encode("utf-8"))
|
||||||
else:
|
else:
|
||||||
print u"Erreur de suppression (avez-vous les droits ?)".encode("utf-8")
|
print(u"Erreur de suppression (avez-vous les droits ?)".encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
def my_check_keys():
|
def my_check_keys():
|
||||||
"""Vérifie les clés et affiche un message en fonction du résultat"""
|
"""Vérifie les clés et affiche un message en fonction du résultat"""
|
||||||
print u"Vérification que les clés sont valides (uid correspondant au login) et de confiance."
|
print(u"Vérification que les clés sont valides (uid correspondant au login) et de confiance.")
|
||||||
print (check_keys() and u"Base de clés ok" or u"Erreurs dans la base").encode("utf-8")
|
print((check_keys() and u"Base de clés ok" or u"Erreurs dans la base").encode("utf-8"))
|
||||||
|
|
||||||
def my_update_keys():
|
def my_update_keys():
|
||||||
"""Met à jour les clés existantes et affiche le résultat"""
|
"""Met à jour les clés existantes et affiche le résultat"""
|
||||||
print update_keys().encode("utf-8")
|
print(update_keys().encode("utf-8"))
|
||||||
|
|
||||||
def recrypt_files():
|
def recrypt_files():
|
||||||
"""Rechiffre les fichiers"""
|
"""Rechiffre les fichiers"""
|
||||||
|
@ -471,7 +473,7 @@ def recrypt_files():
|
||||||
for (fname, froles) in all_files().iteritems():
|
for (fname, froles) in all_files().iteritems():
|
||||||
if set(roles).intersection(froles) == set([]):
|
if set(roles).intersection(froles) == set([]):
|
||||||
continue
|
continue
|
||||||
print (u"Rechiffrement de %s" % fname).encode("utf-8")
|
print((u"Rechiffrement de %s" % fname).encode("utf-8"))
|
||||||
put_password(fname, froles, get_password(fname))
|
put_password(fname, froles, get_password(fname))
|
||||||
|
|
||||||
def parse_roles(strroles):
|
def parse_roles(strroles):
|
||||||
|
@ -484,10 +486,10 @@ def parse_roles(strroles):
|
||||||
writable = False
|
writable = False
|
||||||
for role in strroles.split(','):
|
for role in strroles.split(','):
|
||||||
if role not in roles.keys():
|
if role not in roles.keys():
|
||||||
print (u"Le rôle %s n'existe pas !" % role).encode("utf-8")
|
print((u"Le rôle %s n'existe pas !" % role).encode("utf-8"))
|
||||||
return False
|
return False
|
||||||
if role.endswith('-w'):
|
if role.endswith('-w'):
|
||||||
print (u"Le rôle %s ne devrait pas être utilisé ! (utilisez %s)"
|
print((u"Le rôle %s ne devrait pas être utilisé ! (utilisez %s)")
|
||||||
% (role, role[:-2])).encode("utf-8")
|
% (role, role[:-2])).encode("utf-8")
|
||||||
return False
|
return False
|
||||||
writable = writable or role in my_roles_w
|
writable = writable or role in my_roles_w
|
||||||
|
@ -565,7 +567,7 @@ if __name__ == "__main__":
|
||||||
parsed.action()
|
parsed.action()
|
||||||
elif parsed.fname == None:
|
elif parsed.fname == None:
|
||||||
if not QUIET:
|
if not QUIET:
|
||||||
print u"Vous devez fournir un nom de fichier avec cette commande".encode("utf-8")
|
print(u"Vous devez fournir un nom de fichier avec cette commande".encode("utf-8"))
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
|
|
14
server.py
14
server.py
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
"""Serveur pour cranspasswords"""
|
"""Serveur pour cranspasswords"""
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
|
@ -163,19 +165,19 @@ if __name__ == "__main__":
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if command == "listroles":
|
if command == "listroles":
|
||||||
print json.dumps(listroles())
|
print(json.dumps(listroles()))
|
||||||
elif command == "listkeys":
|
elif command == "listkeys":
|
||||||
print json.dumps(listkeys())
|
print(json.dumps(listkeys()))
|
||||||
elif command == "listfiles":
|
elif command == "listfiles":
|
||||||
print json.dumps(listfiles())
|
print(json.dumps(listfiles()))
|
||||||
else:
|
else:
|
||||||
if not filename:
|
if not filename:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if command == "getfile":
|
if command == "getfile":
|
||||||
print json.dumps(getfile(filename))
|
print(json.dumps(getfile(filename)))
|
||||||
elif command == "putfile":
|
elif command == "putfile":
|
||||||
print json.dumps(putfile(filename))
|
print(json.dumps(putfile(filename)))
|
||||||
elif command == "rmfile":
|
elif command == "rmfile":
|
||||||
print json.dumps(rmfile(filename))
|
print(json.dumps(rmfile(filename)))
|
||||||
else:
|
else:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue