From 555b6c4c0abfe6ef152daee84b27ad25f7936ef3 Mon Sep 17 00:00:00 2001
From: Vincent Le Gallic <legallic@crans.org>
Date: Sun, 28 Jul 2013 01:58:07 +0200
Subject: [PATCH] Revert "Unicodification : fix; gestion de messages d'erreur;
 ajout du CA"

This reverts commit bbc6cb73f6c9ef6724213f11df0bb18cd58e3a25.

Conflicts:
	serverconfig.example.py
---
 cranspasswords.py       | 59 ++++++++++++++++++++---------------------
 server.py               | 53 +++++++++++++++++++-----------------
 serverconfig.example.py | 29 ++++----------------
 3 files changed, 62 insertions(+), 79 deletions(-)

diff --git a/cranspasswords.py b/cranspasswords.py
index 827fffb..663e3a0 100755
--- a/cranspasswords.py
+++ b/cranspasswords.py
@@ -55,7 +55,7 @@ GPG_TRUSTLEVELS = {
 VERB = False
 #: Par défaut, place-t-on le mdp dans le presse-papier ?
 CLIPBOARD = bool(os.getenv('DISPLAY')) and os.path.exists('/usr/bin/xclip')
-#: Mode «ne pas demander confirmation»
+#: Mode «ne pas demaner confirmation»
 FORCED = False
 #: Droits à définir sur le fichier en édition
 NROLES = None
@@ -264,10 +264,8 @@ def put_password(name, roles, contents):
 
 def get_password(name):
     """Récupère le mot de passe donné par name"""
-    gotit, remotefile = get_file(name)
-    if gotit:
-        remotefile = decrypt(remotefile['contents'])
-    return [gotit, remotefile]
+    remotefile = get_file(name)
+    return decrypt(remotefile['contents'])
 
 ######
 ## Interface
@@ -291,7 +289,9 @@ def editor(texte, annotations=u""):
     ntexte = f.read().decode("utf-8")
     f.close()
     ntexte = u'\n'.join(filter(lambda l: not l.startswith('#'), ntexte.split('\n')))
-    return ntexte
+    if texte != ntexte:
+        return ntexte
+    return None
 
 def show_files():
     """Affiche la liste des fichiers disponibles sur le serveur distant"""
@@ -309,9 +309,9 @@ def show_files():
 def show_roles():
     """Affiche la liste des roles existants"""
     print u"Liste des roles disponibles".encode("utf-8")
-    for (role, usernames) in all_roles().iteritems():
+    for role in all_roles().keys():
         if not role.endswith('-w'):
-            print (u" * %s : %s" % (role, ", ".join(usernames))).encode("utf-8")
+            print (u" * " + role ).encode("utf-8")
 
 def show_servers():
     """Affiche la liste des serveurs disponibles"""
@@ -348,9 +348,9 @@ def clipboard(texte):
 
 def show_file(fname):
     """Affiche le contenu d'un fichier"""
-    gotit, value = get_file(fname)
-    if not gotit:
-        print value.encode("utf-8") # value contient le message d'erreur
+    value = get_file(fname)
+    if value == False:
+        print u"Fichier introuvable".encode("utf-8")
         return
     (sin, sout) = gpg('decrypt')
     sin.write(value['contents'].encode("utf-8"))
@@ -376,13 +376,13 @@ def show_file(fname):
         
 def edit_file(fname):
     """Modifie/Crée un fichier"""
-    gotit, value = get_file(fname)
+    value = get_file(fname)
     nfile = False
     annotations = u""
-    if not gotit and not "pas les droits" in value:
+    if value == False:
         nfile = True
         print u"Fichier introuvable".encode("utf-8")
-        if not confirm(u"Créer fichier ?"):
+        if not confirm("Créer fichier ?"):
             return
         annotations += u"""Ceci est un fichier initial contenant un mot de passe
 aléatoire, pensez à rajouter une ligne "login: ${login}"
@@ -396,16 +396,13 @@ Enregistrez le fichier vide pour annuler.\n"""
             print u"Vous ne possédez aucun rôle en écriture ! Abandon.".encode("utf-8")
             return
         value = {'roles' : roles}
-    elif not gotit:
-        print value.encode("utf-8") # value contient le message d'erreur
-        return
     else:
         (sin, sout) = gpg('decrypt')
         sin.write(value['contents'].encode("utf-8"))
         sin.close()
         texte = sout.read().decode("utf-8")
     value['roles'] = NROLES or value['roles']
-    
+
     annotations += u"""Ce fichier sera chiffré pour les rôles suivants :\n%s\n
 C'est-à-dire pour les utilisateurs suivants :\n%s""" % (
            ', '.join(value['roles']),
@@ -413,20 +410,21 @@ C'est-à-dire pour les utilisateurs suivants :\n%s""" % (
         )
         
     ntexte = editor(texte, annotations)
-    
-    if ((not nfile and ntexte in [u'', texte] and NROLES == None) or # Fichier existant vidé ou inchangé
-        (nfile and ntexte == u'')):                                  # Nouveau fichier créé vide
-        print u"Pas de modification effectuée".encode("utf-8")
+
+    if ntexte == None and not nfile and NROLES == None:
+        print u"Pas de modifications effectuées".encode("utf-8")
     else:
         ntexte = texte if ntexte == None else ntexte
-        success, message = put_password(fname, value['roles'], ntexte)
-        print message.encode("utf-8")
+        if put_password(fname, value['roles'], ntexte):
+            print u"Modifications enregistrées".encode("utf-8")
+        else:
+            print u"Erreur lors de l'enregistrement (avez-vous les droits suffisants ?)".encode("utf-8")
 
 def confirm(text):
     """Demande confirmation, sauf si on est mode ``FORCED``"""
     if FORCED: return True
     while True:
-        out = raw_input((text + u' (O/N)').encode("utf-8")).lower()
+        out = raw_input((text + ' (O/N)').encode("utf-8")).lower()
         if out == 'o':
             return True
         elif out == 'n':
@@ -434,10 +432,12 @@ def confirm(text):
 
 def remove_file(fname):
     """Supprime un fichier"""
-    if not confirm(u'Êtes-vous sûr de vouloir supprimer %s ?' % fname):
+    if not confirm((u'Êtes-vous sûr de vouloir supprimer %s ?' % fname).encode("utf-8")):
         return
-    message = rm_file(fname)
-    print message.encode("utf-8")
+    if rm_file(fname):
+        print u"Suppression effectuée".encode("utf-8")
+    else:
+        print u"Erreur de suppression (avez-vous les droits ?)".encode("utf-8")
 
 
 def my_check_keys():
@@ -462,8 +462,7 @@ def recrypt_files():
         if set(roles).intersection(froles) == set([]):
             continue
         print (u"Rechiffrement de %s" % fname).encode("utf-8")
-        _, password = get_password(fname)
-        put_password(fname, froles, password)
+        put_password(fname, froles, get_password(fname))
 
 def parse_roles(strroles):
     """Interprête une liste de rôles fournie par l'utilisateur"""
diff --git a/server.py b/server.py
index 829e337..5316d1c 100755
--- a/server.py
+++ b/server.py
@@ -66,10 +66,10 @@ def getfile(filename):
     try:
         obj = json.loads(open(filepath).read())
         if not validate(obj['roles']):
-	        return [False, u"Vous n'avez pas les droits de lecture sur le fichier %s." % filename]
-        return [True, obj]
+	        return False
+        return obj
     except IOError:
-        return [False, u"Le fichier %s n'existe pas." % filename]
+        return False
      
 
 def putfile(filename):
@@ -81,38 +81,41 @@ def putfile(filename):
         roles = parsed_stdin['roles']
         contents = parsed_stdin['contents']
     except KeyError:
-        return [False, u"Entrée invalide"]
+        return False
     
-    gotit, old = getfile(filename)
-    if not gotit:
+    try:
+        old = getfile(filename)
+        oldroles = old['roles']
+    except TypeError:
         old = u"[Création du fichier]"
         pass
     else:
-        oldroles = old['roles']
-        if not validate(oldroles, 'w'):
-            return [False, u"Vous n'avez pas le droit d'écriture sur %s." % filename]
-    
-    corps = u"Le fichier %s a été modifié par %s." % (filename, MYUID)
-    backup(corps, filename, old)
-    notification(u"Modification de %s" % filename, corps, filename, old)
+        if not validate(oldroles,'w'):
+            return False
+        
+        corps = u"Le fichier %s a été modifié par %s." % (filename, MYUID)
+        backup(corps, filename, old)
+        notification(u"Modification de %s" % filename, corps, filename, old)
     
     writefile(filepath, json.dumps({'roles': roles, 'contents': contents}))
-    return [True, u"Modification effectuée."]
+    return True
 
 def rmfile(filename):
     """Supprime le fichier filename après avoir vérifié les droits sur le fichier"""
-    gotit, old = getfile(filename)
-    if not gotit:
-        return old # contient le message d'erreur
-    roles = old['roles']
-    if validate(roles, 'w'):
-        corps = u"Le fichier %s a été supprimé par %s." % (filename, MYUID)
-        backup(corps, filename, old)
-        notification(u"Suppression de %s" % filename, corps, filename, old)
-        os.remove(getpath(filename))
+    try:
+        old = getfile(filename)
+        roles = old['roles']
+    except TypeError:
+        return True
     else:
-        return u"Vous n'avez pas les droits d'écriture sur le fichier %s." % filename
-    return u"Suppression effectuée"
+        if validate(roles,'w'):
+            corps = u"Le fichier %s a été supprimé par %s." % (filename, MYUID)
+            backup(corps, filename, old)
+            notification(u"Suppression de %s" % filename, corps, filename, old)
+            os.remove(getpath(filename))
+        else:
+            return False
+    return True
 
 def backup(corps, fname, old):
     """Backupe l'ancienne version du fichier"""
diff --git a/serverconfig.example.py b/serverconfig.example.py
index 769db06..cfc703f 100755
--- a/serverconfig.example.py
+++ b/serverconfig.example.py
@@ -67,12 +67,12 @@ KEYS = {
 
 #: Les variables suivantes sont utilisées pour définir le dictionnaire des
 #: rôles.
-RTC = [
-    "samir"
+RTC=[
+    "iffrig"
     ]
 
 #: Liste des usernames des nounous
-NOUNOUS = RTC + [
+NOUNOUS=RTC+[
     "blockelet",
     "becue",
     "dstan",
@@ -85,33 +85,14 @@ NOUNOUS = RTC + [
     "parret-freaud",
     "cauderlier",
     "maioli",
-    "iffrig",
+    "samir",
     "boilard",
     "legallic",
     ]
 
 # Autogen:
 #: Liste des usernames des apprentis
-APPRENTIS = [
-    'grande',
-    'bonaque',
-    'moisy-mabille',
-    'baste',
-    'duplouy',
-    'besson',
-    'pvincent',
-    'quelennec',
-    'pommeret',
-    'guiraud',
-    'serrano',
-    'kherouf',
-    'randazzo',
-    'tilquin',
-    'lasseri',
-    'epalle',
-    'soret',
-    'gstalter',
-    'kviard']
+APPRENTIS=['grande', 'bonaque', 'moisy-mabille', 'baste', 'duplouy', 'besson', 'pvincent', 'quelennec', 'pommeret', 'guiraud', 'serrano', 'kherouf', 'randazzo', 'tilquin', 'lasseri', 'epalle', 'soret', 'gstalter', 'kviard']
 
 #: Liste des usernames des membres du CA
 CA = [
-- 
GitLab