From 300f13b2363996c33ae2f3c508067e8746c0eac0 Mon Sep 17 00:00:00 2001
From: Vincent Le Gallic <legallic@crans.org>
Date: Tue, 30 Jul 2013 06:15:27 +0200
Subject: [PATCH] =?UTF-8?q?On=20n'a=20plus=20besoin=20de=20la=20variable?=
 =?UTF-8?q?=20de=20conf=20'user'=20sur=20le=20client,=20le=20serveur=20la?=
 =?UTF-8?q?=20renvoie=20dans=20le=20r=C3=B4le=20whoami.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Du coup, évidemment, il ne faut pas définir un rôle "whoami".
Si le serveur en trouve un, il lèvera une exception.
---
 client.py               | 8 ++++++--
 clientconfig.example.py | 9 ---------
 server.py               | 9 +++++++--
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/client.py b/client.py
index dd1edbe..25197a9 100755
--- a/client.py
+++ b/client.py
@@ -300,7 +300,8 @@ def rm_file(filename):
 def get_my_roles(options):
     """Retourne la liste des rôles de l'utilisateur, et également la liste des rôles dont il possède le role-w."""
     allroles = all_roles(options)
-    my_roles = [r for (r, users) in allroles.iteritems() if options.serverdata['user'] in users]
+    distant_username = allroles.pop("whoami")
+    my_roles = [r for (r, users) in allroles.iteritems() if distant_username in users]
     my_roles_w = [r[:-2] for r in my_roles if r.endswith("-w")]
     return (my_roles, my_roles_w)
 
@@ -415,6 +416,7 @@ def get_recipients_of_roles(options, roles):
     """Renvoie les destinataires d'une liste de rôles"""
     recipients = set()
     allroles = all_roles(options)
+    allroles.pop("whoami")
     for role in roles:
         for recipient in allroles[role]:
             recipients.add(recipient)
@@ -513,7 +515,9 @@ def show_files(options):
 def show_roles(options):
     """Affiche la liste des roles existants"""
     print(u"Liste des roles disponibles".encode("utf-8"))
-    for (role, usernames) in all_roles(options).iteritems():
+    allroles =  all_roles(options)
+    allroles.pop("whoami")
+    for (role, usernames) in allroles.iteritems():
         if not role.endswith('-w'):
             print((u" * %s : %s" % (role, ", ".join(usernames))).encode("utf-8"))
 
diff --git a/clientconfig.example.py b/clientconfig.example.py
index 1f87fed..6df14b8 100755
--- a/clientconfig.example.py
+++ b/clientconfig.example.py
@@ -17,26 +17,17 @@ server_path = '/usr/local/bin/%s-server' % (cmd_name,)
 #: Commande à exécuter sur le serveur après y être entré en ssh
 distant_cmd = "sudo %s" % (server_path,)
 
-#: Username utilisé pour se loguer sur le serveur.
-#: Par défaut, prend la valeur de l'username sur le client,
-#: il faut donc le remplacer pour ceux qui n'ont pas le même username
-#: sur le client et le serveur.
-username = os.getenv('USER')
-
 #: Liste des serveurs sur lesquels ont peut récupérer des mots de passe.
 #: 
 #: Sans précision du paramètre --server, la clé ``'default'`` sera utilisée.
 #: 
 #: * ``'server_cmd'`` : La commande exécutée sur le client pour appeler
 #:   le script sur le serveur distant.
-#: * ``'user'``: L'username sur le serveur
 servers = {
     'default': {
         'server_cmd': [ssh_path, 'vert.adm.crans.org', distant_cmd],
-        'user' : username
     },
     'ovh': {
         'server_cmd': [ssh_path, 'ovh.crans.org', distant_cmd],
-        'user' : username
     }
 }
diff --git a/server.py b/server.py
index 4b30203..63cd1a5 100755
--- a/server.py
+++ b/server.py
@@ -48,8 +48,13 @@ def writefile(filename, contents):
     f.close()
 
 def listroles():
-    """Liste des roles existant et de leurs membres"""
-    return serverconfig.ROLES
+    """Liste des roles existant et de leurs membres.
+       Renvoie également un rôle particulier ``"whoami"``, contenant l'username de l'utilisateur qui s'est connecté."""
+    d = serverconfig.ROLES
+    if d.has_key("whoami"):
+        raise ValueError('La rôle "whoami" ne devrait pas exister')
+    d["whoami"] = MYUID
+    return d
 
 def listkeys():
     """Liste les usernames et les (mail, fingerprint) correspondants"""
-- 
GitLab