Merge branch 'master' of https://gitlab.crans.org/nounous/cranspasswords
This commit is contained in:
commit
a395d23bea
2 changed files with 50 additions and 0 deletions
19
client.py
19
client.py
|
@ -365,6 +365,12 @@ def all_files(options):
|
||||||
"""Récupère les fichiers du serveur distant"""
|
"""Récupère les fichiers du serveur distant"""
|
||||||
return remote_command(options, "listfiles")
|
return remote_command(options, "listfiles")
|
||||||
|
|
||||||
|
@simple_memoize
|
||||||
|
def restore_all_files(options):
|
||||||
|
"""Récupère les fichiers du serveur distant"""
|
||||||
|
return remote_command(options, "restorefiles")
|
||||||
|
|
||||||
|
|
||||||
def get_files(options, filenames):
|
def get_files(options, filenames):
|
||||||
"""Récupère le contenu des fichiers distants"""
|
"""Récupère le contenu des fichiers distants"""
|
||||||
return remote_command(options, "getfiles", stdin_contents=filenames)
|
return remote_command(options, "getfiles", stdin_contents=filenames)
|
||||||
|
@ -602,6 +608,16 @@ def show_files(options):
|
||||||
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 restore_files(options):
|
||||||
|
"""Restore les fichiers corrompues sur le serveur distant"""
|
||||||
|
print(u"Fichier corrompus :".encode("utf-8"))
|
||||||
|
files = restore_all_files(options)
|
||||||
|
keys = files.keys()
|
||||||
|
keys.sort()
|
||||||
|
for fname in keys:
|
||||||
|
print((u" %s (%s)" % ( fname, files[fname])).encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
def show_roles(options):
|
def show_roles(options):
|
||||||
"""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"))
|
||||||
|
@ -985,6 +1001,9 @@ if __name__ == "__main__":
|
||||||
action_grp.add_argument('-l', '--list', action='store_const', dest='action',
|
action_grp.add_argument('-l', '--list', action='store_const', dest='action',
|
||||||
default=show_file, const=show_files,
|
default=show_file, const=show_files,
|
||||||
help="Lister les fichiers")
|
help="Lister les fichiers")
|
||||||
|
action_grp.add_argument('-r', '--restore', action='store_const', dest='action',
|
||||||
|
default=show_file, const=restore_files,
|
||||||
|
help="Restorer les fichiers corrompues")
|
||||||
action_grp.add_argument('--check-keys', action='store_const', dest='action',
|
action_grp.add_argument('--check-keys', action='store_const', dest='action',
|
||||||
default=show_file, const=my_check_keys,
|
default=show_file, const=my_check_keys,
|
||||||
help="Vérifier les clés")
|
help="Vérifier les clés")
|
||||||
|
|
31
server.py
31
server.py
|
@ -157,6 +157,37 @@ def listfiles():
|
||||||
files[fname] = file_dict["roles"]
|
files[fname] = file_dict["roles"]
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
@server_command('restorefiles')
|
||||||
|
def restorefiles():
|
||||||
|
"""Si un fichier a été corrompu, on restore son dernier backup valide"""
|
||||||
|
os.chdir(serverconfig.STORE)
|
||||||
|
|
||||||
|
filenames = glob.glob('*.json')
|
||||||
|
files = {}
|
||||||
|
for filename in filenames:
|
||||||
|
file_dict = json.loads(open(filename).read())
|
||||||
|
if not ('-----BEGIN PGP MESSAGE-----' in file_dict["contents"]):
|
||||||
|
fname = filename[:-5].decode('utf-8')
|
||||||
|
with open(fname+'.bak') as f:
|
||||||
|
line = f.readline()
|
||||||
|
backup = ''
|
||||||
|
while not (line==''):
|
||||||
|
try:
|
||||||
|
line_dict = json.loads(line)
|
||||||
|
if ('-----BEGIN PGP MESSAGE-----' in line_dict["contents"]):
|
||||||
|
backup = line
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
line = f.readline()
|
||||||
|
if not (backup == ''):
|
||||||
|
files[fname] = 'restored'
|
||||||
|
with open(fname+'.json','w') as f2:
|
||||||
|
f2.write(backup)
|
||||||
|
else:
|
||||||
|
files[fname] = 'not restored'
|
||||||
|
return files
|
||||||
|
|
||||||
|
|
||||||
@server_command('getfile')
|
@server_command('getfile')
|
||||||
def getfile(filename):
|
def getfile(filename):
|
||||||
"""Récupère le fichier ``filename``"""
|
"""Récupère le fichier ``filename``"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue