diff --git a/.gitignore b/.gitignore
index 484c800c57b4432fa1877114a6f2e3d34806497b..b773762a23dbfa45703bc3768e67918b0504aa9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,4 +68,5 @@ typings/
 
 # Generated files
 doc/
-build/
\ No newline at end of file
+build/
+ldap_config.json
\ No newline at end of file
diff --git a/ldap_config.json b/ldap_config.json
deleted file mode 100644
index c2070a2acfdb805f40bffc1d70473fdeb8722568..0000000000000000000000000000000000000000
--- a/ldap_config.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-	"connexion": {
-		"dn": "uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net",
-		"passwd": "Ie42fds'eaJm1"
-	},
-	"ldap": {
-		"server": "ldap://frankiz.eleves.polytechnique.fr:389",
-		"searchBase": "ou=eleves,dc=frankiz,dc=net",
-		"searchFilter": "(uid={{username}})"
-	},
-	"dn_groups":"ou=groups,dc=frankiz,dc=net",
-	"dn_users": "ou=eleves,dc=frankiz,dc=net",
-	"key_id": "uid",
-	"filter_id": "(uid=${id})",
-	"filter_lg": "(restrictedMemberUid=${id})",
-	"attributes_id": ["uid"],
-	"attributes_al": ["memberUid"],
-	"attributes_lm":["restrictedMemberUid"],
-	"attributes_lg":["brMemberOf"],
-	"attributes_all": ["jpegPhoto","givenName", "sn", "brBirthdate", "brPromo","telephoneNumber","mail","brRoom","brIP","brMemberOf"],
-	"search_attributes_tol": ["givenName", "sn", "displayName", "country", "brMemberOf", "brPromo", "brMemberOf", "brMemberOf", "brMemberOf", "telephoneNumber","mail","brRoom","brIP"],
-	"sessionSecret":"change this"
-}
\ No newline at end of file
diff --git a/src/graphql/schema.js b/src/graphql/schema.js
index d3534530ed29d3c8c989830a024a0aafdfa918ae..d46a4c1635ae7f865d289f8b5ff00466236e6755 100644
--- a/src/graphql/schema.js
+++ b/src/graphql/schema.js
@@ -13,7 +13,7 @@ const typeDefs = `
     type Query {
         allGroups: [Group]
         group(uid: ID) : Group
-        user(uid: ID) : User
+        user(uid: ID) : [User]
     }
 
     type Group {
@@ -30,8 +30,9 @@ const typeDefs = `
     type User {
         givenName: String!
         lastName: String!
-        uid: ID!,
-        birthdate: String!
+        uid: ID!
+        birthdate: String
+        groups: [String]
     }
 
     type Mutation {
@@ -127,6 +128,9 @@ const createGroupIfLegal = (user, args) => {
     });
 };
 
+/** 
+ * @description Résolveurs des différentes requêtes GraphQL
+*/
 const resolvers = {
     Query: {
         allGroups: (obj, args, context) => {
@@ -140,7 +144,8 @@ const resolvers = {
                 return {
                     lastName: data.sn,
                     givenName: data.givenName,
-                    birthdate: data.brBirthdate
+                    birthdate: data.brBirthdate,
+                    groups: data.brMemberOf
                 };
             };
 
@@ -150,7 +155,7 @@ const resolvers = {
                     return result;
                 });
                 console.log(refactData);
-                return refactData[0];
+                return refactData;
             });
             console.log(result);
             return result;
diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js
index 75303a6391133d42bb14ad542e4c0e51f952cccb..50cc46bc04a1cc00ac6f4728e69fdc6822d3fbe5 100644
--- a/src/ldap/ldap_data.js
+++ b/src/ldap/ldap_data.js
@@ -134,7 +134,7 @@ function listAdmins(gid) {
  * @summary Fonction qui interroge le LDAP au sujet d'un uid particulier et qui renvoit toutes ses infos.
  * @desc Cette fonction utilise rechercheLDAP avec un dictionnaire prédéfini dans config.json. Il faut l'appeler selon un schéma `rens(...).then((res) => { truc avec res });`
  * @arg {string} uid - Identifiant de l'utilisateur
- * @return {string[]} Informations recueillies ; même quand dans TOL voir config.json.
+ * @return {Object} Informations recueillies ; rennvoit une liste de dictionnaire avec les mêmes clés que dans le TOL, voir config.json.
  */
 function rens(uid) {
     return new Promise(function(resolve, reject) {
@@ -144,7 +144,7 @@ function rens(uid) {
 
 /**
  * @summary Fonction qui interroge le LDAP et retrouve juste les uid des paxs validant les critères de recherche. Première étape vers vrai TOL (Trombino On Line).
- * @desc Accepte des champs exacts ou incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma `TOL(uid).then((res) => { truc avec res });`. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues.
+ * @desc Accepte des champs exacts ou incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma `TOL(uid).then((res) => { truc avec res });`. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues. Renvoit aussi une liste de dictionnaire.
  * @arg {string} c0 - Prénom
  * @arg {string} c1 - Nom
  * @arg {string} c2 - Surnom
@@ -183,7 +183,7 @@ function idTOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9
 
 /**
  * @summary Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche. Bien mais vite inutilisable car demande trop au LDAP et renvoie des erreurs de type size limit. Préférer idTOL puis stalk au cas par cas.
- * @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma `TOL(uid).then((res) => { truc avec res });`. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues.
+ * @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma `TOL(uid).then((res) => { truc avec res });`. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end). MEF Timeout pour des recherches trop vagues. Renvoit aussi une liste de dictionnaire.
  * @arg {string} c0 - Prénom
  * @arg {string} c1 - Nom
  * @arg {string} c2 - Surnom
@@ -256,10 +256,8 @@ function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="
 //------------------------------------------------------------------------------------------------------------------------
 
 /**
- * @summary Fonction qui va plonger dans le LDAP et modifier un certain jeu de valeur en argument.
+ * @summary Fonction qui permet de créer un groupe sur le LDAP.
  * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande avec ldapjs (voir [`Client API`](http://ldapjs.org/client.html) méthode search). Il faut l'appeler suivant un schéma `modifierLDAP(...).then((res) => { truc avec res });`. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans `dic` et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
- * @arg {string} name - DN de l'emplacement de la requête
- * @arg {string} op - Deux types ; "replace" ou "add", "add" pouvant rajouter un champ, "replace" sans modification étant une suppression
  * @arg {Object} mod - Dictionnaire contenant les attributs à modifier et les modifications
  * @return {boolean} `true` si la modification s'est bien déroulée, false sinon
  */
@@ -283,6 +281,19 @@ function modifierLDAP(name, op, mod) {
     });
 }
 
+/**
+ * @summary Fonction qui va plonger dans le LDAP et modifier un certain jeu de valeur en argument.
+ * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande avec ldapjs (voir [`Client API`](http://ldapjs.org/client.html) méthode search). Il faut l'appeler suivant un schéma `modifierLDAP(...).then((res) => { truc avec res });`. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans `dic` et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
+ * @arg {Object} param - Dictionnaire contenant les attributs à modifier et les modifications
+ * @return {boolean} `true` si la modification s'est bien déroulée, false sinon
+ */
+function creerGroupe(param) {
+    return new Promise(resolve, reject) {
+        reject(false);
+    }
+} 
+
+
 //modifierLDAP("uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","replace", {"displayName": ["hawkspar"]}).then(res => console.log(res));
 //rechercheLDAP("uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","(displayName=${cn})",{ cn: "Sire hawkspar" }, ["jpegPhoto"]).then(res => console.log(res));
 
diff --git a/src/server.js b/src/server.js
index d8cc4d152f920c2200fbdbbaa87782090f332802..ebd31dd48cccac3b9b3dfd5e4415a064166366e1 100644
--- a/src/server.js
+++ b/src/server.js
@@ -21,12 +21,11 @@ server.use(bodyParser.urlencoded({
 
 // setting up view engine for pug
 let viewpath = path.resolve('./','src','views');
-console.log(viewpath);
 server.set('views', viewpath);
 server.set('view engine', 'pug');
 
 // favicon: capital sigma symbol
-server.use(favicon(path.resolve('./','assets','favicon.ico')));
+server.use(favicon(path.resolve('./','assets','logo_sigma.png')));
 
 // Morgan is middleware for logging requests
 server.use(morgan('dev'));
diff --git a/src/views/login.pug b/src/views/login.pug
index f12abe9374f090ff021ef7598ae49d899c2a9ff8..516e5dec19648c10b09cefb3578f7a3c98bbca37 100644
--- a/src/views/login.pug
+++ b/src/views/login.pug
@@ -2,7 +2,7 @@ extends layout.pug
 
 block content
     h1 Sigma backend API
-    img(src="/assets/logo_sigma.png", alt="")
+    img(src="/assets/logo_sigma.png", alt="Logo sigma")
     p Veuillez vous connecter.
     p Please log in.
     p #{errorMessage}