From ff0d77c868bdb224b343af2820755149ddd6f0ab Mon Sep 17 00:00:00 2001
From: hawkspar <quentin.chevalier@polytechnique.edu>
Date: Sat, 2 Feb 2019 13:12:25 +0100
Subject: [PATCH] Reorganisation doc en memos et hists

---
 ldap_config.json                              |  2 +-
 notes/hist.json                               |  7 +++++
 notes/hist.md                                 |  4 +++
 notes/hist_ldap.json                          |  4 +++
 notes/hist_ldap.md                            | 29 +++++++++++++++++++
 notes/hist_rights.json                        |  4 +++
 .../{memo_sigma_rights.md => hist_rights.md}  |  0
 notes/memo_ldap.md                            | 27 +++++------------
 notes/memo_sigma_graphql.json                 |  4 +++
 notes/memos.json                              |  1 +
 notes/memos.md                                |  2 +-
 src/ldap/internal/tools.ts                    |  4 +--
 12 files changed, 64 insertions(+), 24 deletions(-)
 create mode 100644 notes/hist.json
 create mode 100644 notes/hist.md
 create mode 100644 notes/hist_ldap.json
 create mode 100644 notes/hist_ldap.md
 create mode 100644 notes/hist_rights.json
 rename notes/{memo_sigma_rights.md => hist_rights.md} (100%)
 create mode 100644 notes/memo_sigma_graphql.json

diff --git a/ldap_config.json b/ldap_config.json
index 42f1524..9dbd4d1 100644
--- a/ldap_config.json
+++ b/ldap_config.json
@@ -44,7 +44,7 @@
 		"site": "website",
 		"description": "description",
 		"category": "groupCategory",
-		"admins": "memberUid",
+		"admins": "admin",
 		"speakers": "speaker",
 		"members": "member",
 		"followers": "follower",
diff --git a/notes/hist.json b/notes/hist.json
new file mode 100644
index 0000000..c4fdab6
--- /dev/null
+++ b/notes/hist.json
@@ -0,0 +1,7 @@
+{
+    "title": "Historiques",
+    "children": [
+        "hist_ldap",
+        "hist_rights"
+    ]
+}
\ No newline at end of file
diff --git a/notes/hist.md b/notes/hist.md
new file mode 100644
index 0000000..84ddc00
--- /dev/null
+++ b/notes/hist.md
@@ -0,0 +1,4 @@
+Historiques
+===
+
+Le projet sigma a un passif. C'est le travail accumulé de plusieurs promotions qui ont été obligé de faire un certain nombre de choix techniques ou purement esthétiques. Avant de pourrir leur travail conscrit, lis ces quelques lignes. 
\ No newline at end of file
diff --git a/notes/hist_ldap.json b/notes/hist_ldap.json
new file mode 100644
index 0000000..cbe5b98
--- /dev/null
+++ b/notes/hist_ldap.json
@@ -0,0 +1,4 @@
+{
+    "title": "Historique de l'API LDAP",
+    "children": []
+}
\ No newline at end of file
diff --git a/notes/hist_ldap.md b/notes/hist_ldap.md
new file mode 100644
index 0000000..4226fd2
--- /dev/null
+++ b/notes/hist_ldap.md
@@ -0,0 +1,29 @@
+## Sur le LDAP Frankiz
+
+A l'origine Frankiz, le prédécesseur de sigma, avait sa propre base de données qu'il importait toutes les 3h dans un LDAP énorme et sale, qui contenaiit le strict minimum. Ce LDAP s'est révélé très utile à différents sites binets qui ont fait un usage très libre de cette ressource.
+
+De sorte que quand il fallut remplacer Frankiz, la destruction du LDAP n'était pas possible sans revoir plusieurs sites binets (à voir, le CAS était peut-être une solution suffisante). On a donc choisi de tuer la BDD Frankiz, mais seulement après avoir considérablement enrichi le LDAP pour en faire la BDD utilisateurs et groupes principale de sigma.
+
+Une documentation vieillissante est disponible sur le [`wikix`](https://wikibr.binets.fr/Admin:LDAP) par rapport au LDAP de Frankiz.
+
+Le BR2017 a mené un gros travail de réorganisation du LDAP donc beaucoup d'informations sur le wikix ne seront plus valides.
+
+### Idée de nouvelle organisation du LDAP
+
+Le LDAP a été significativement enrichi depuis Frankiz, puisqu'il contient la majeure partie des données utilisateurs et groupes de sigma. Les champs parent et child permettent aux resolvers afférents de faire descendre les admins et remonter les membres, mais n'a pas d'influence à l'intérieur de l'API LDAP.
+
+![newLDAPgr](../assets/LDAPGroup.png "Structure pour les groupes sur le LDAP")
+
+![newLDAPus](../assets/LDAPUser.png "Structure pour les users sur le LDAP")
+
+L'équivalence pratique entre champs du LDAP et champs du code est dans le fichier de configuration [`ldap_config`](../ldap_config.json).
+
+### Etat de l'API
+
+Cette API est voulue comme la plus simple et la plus minimaliste possible ; en effet, elle sera à réimplémenter sur toutes les instances différentes de sigma pour s'adapter aux structures de données des différentes écoles. On peut administrer des  groupes depuis sigma, mais pour s'interfacer d'instances à instances seules deux fonctions sont indispensables ; peek et search.
+
+Cette API est naïve et ne gère pas de problème de récursion.
+
+![LDAPAPI](../assets/LDAP_API_.png "Etat courant de l'API LDAP")
+
+Le détail de chaque fonction est disponible dans la documentation JSDOC : ([`User`](../doc/LDAP.User.html) et [`Group`](../doc/LDAP.Group.html)).
\ No newline at end of file
diff --git a/notes/hist_rights.json b/notes/hist_rights.json
new file mode 100644
index 0000000..0dd1113
--- /dev/null
+++ b/notes/hist_rights.json
@@ -0,0 +1,4 @@
+{
+    "title": "Bilan des droits sur sigma",
+    "children": []
+}
\ No newline at end of file
diff --git a/notes/memo_sigma_rights.md b/notes/hist_rights.md
similarity index 100%
rename from notes/memo_sigma_rights.md
rename to notes/hist_rights.md
diff --git a/notes/memo_ldap.md b/notes/memo_ldap.md
index 38b4f9a..98d6b14 100644
--- a/notes/memo_ldap.md
+++ b/notes/memo_ldap.md
@@ -2,29 +2,16 @@
 
 LDAP signifie Lightweight Directory Access Protocol ; c'est donc un protocole, comme http, et pas une structure de données à proprement parler. Comme http, il fonctionne par chaîne de caractères appelés URI. La structure d'un LDAP est cependant forcément celle d'un arbre, avec une racine à la fin de l'URI et le noeud recherché à la fin. Par exemple "uid=louis.vaneau,ou=eleves,dc=frankiz,dc=net", qui permet d'accéder à la feuille associée à Louis Vaneau dans le LDAP de frankiz.
 
-Il s'agit d'une structure particulièrement rigide mais efficace en lecture. Chaque noeud contient un certain nombre de champs qui ne sont pas nécessairement tous rempli, et qui n'ont pas forcément une seule variable par champ.
+Il s'agit d'une structure particulièrement rigide mais efficace en lecture. Chaque noeud contient un certain nombre de champs qui ne sont pas nécessairement tous remplis, et qui n'ont pas forcément une seule variable par champ. Un LDAP est une structure parfaitement adapté à la réalisation d'un annuaire car pensé pour cela dès l'origine ; très efficace en lecture, il brille moins en écriture.
 
-## Un wrapper sympathique
-
-On accède sur un LDAP¨par des requêtes LDAP, d'où l'intérêt d'une bibliothèque comme [`ldap.js`](http://ldapjs.org/) qui fait office de traducteur javascript/LDAP, un peu comme knex et SQL. On s'intéressera particulièrement à la partie [`client`](http://ldapjs.org/client.html) qui est celle qui permet d'agir sur le LDAP.
-
-## Une interface graphique agréable
-
-Pour explorer un LDAP, vous pouvez utiliser 
-[`JXplorer`](http://jxplorer.org/).
+La technologie est ancienne et bien connue. Le LDAP de Frankiz, OpenLDAP, contient beaucoup de fonctionnalités sympathique comme le hashage inclus des mots de passe avec salt conformément à l'état de l'art.
 
-## Sur le LDAP Frankiz
-
-Une documentation vieillissante est disponible sur le [`wikix`](https://wikibr.binets.fr/Admin:LDAP).
-
-### Idée de nouvelle organisation du LDAP
-
-Les admins descendent et les membres remontent.
+## Un wrapper sympathique
 
-![newLDAPgr](../assets/LDAPGroup.png "Structure pour les groupes sur le LDAP")
+On accède sur un LDAP par des requêtes LDAP, d'où l'intérêt d'une bibliothèque comme [`ldap.js`](http://ldapjs.org/) qui fait office de traducteur javascript/LDAP, un peu comme knex et SQL. On s'intéressera particulièrement à la partie [`client`](http://ldapjs.org/client.html) qui est celle qui permet d'agir sur le LDAP.
 
-![newLDAPus](../assets/LDAPUser.png "Structure pour les users sur le LDAP")
+Cette bibliothèque est reprise et re-wrappée dans la classe [`Basics`](../src/ldap/internal/basics.ts).
 
-### Etat de l'API
+## Une interface graphique agréable
 
-![LDAPAPI](../assets/LDAP_API_.png "Etat courant de l'API LDAP")
\ No newline at end of file
+Pour explorer un LDAP, vous pouvez utiliser [`JXplorer`](http://jxplorer.org/). Il s'agit d'un logiciel OpenSource en Java très iparfait mais qui permet de rapidement parcourir les champs d'un LDAP et de mener des petites recherches dessus.
\ No newline at end of file
diff --git a/notes/memo_sigma_graphql.json b/notes/memo_sigma_graphql.json
new file mode 100644
index 0000000..5b943b1
--- /dev/null
+++ b/notes/memo_sigma_graphql.json
@@ -0,0 +1,4 @@
+{
+    "title": "Memo GraphQL",
+    "children": []
+}
\ No newline at end of file
diff --git a/notes/memos.json b/notes/memos.json
index f3f6c53..be3440d 100644
--- a/notes/memos.json
+++ b/notes/memos.json
@@ -3,6 +3,7 @@
     "children": [
         "memo_knexjs",
         "memo_postgresql",
+        "memo_sigma_graphql",
         "memo_jsdoc",
         "memo_ldap"
     ]
diff --git a/notes/memos.md b/notes/memos.md
index 1f51b82..8aab153 100644
--- a/notes/memos.md
+++ b/notes/memos.md
@@ -1,4 +1,4 @@
 Mémos
 ===
 
-Le projet sigma était assez large et comportant pas mal de facettes avec des technologies pas forcément toujours intuitives ou bien documentées, les mémos de cetten section sont là pour permettre au dev perdu de s'y retrouver rapidement face à une technologie qu'il ne maîtrise pas à fond.
\ No newline at end of file
+Le projet sigma était assez large et comportant pas mal de facettes avec des technologies pas forcément toujours intuitives ou bien documentées, les mémos de cette section sont là pour permettre au dev perdu de s'y retrouver rapidement face à une technologie qu'il ne maîtrise pas à fond.
\ No newline at end of file
diff --git a/src/ldap/internal/tools.ts b/src/ldap/internal/tools.ts
index a2b0f40..6f57fa2 100644
--- a/src/ldap/internal/tools.ts
+++ b/src/ldap/internal/tools.ts
@@ -25,7 +25,7 @@ export class Tools {
     /**
      * @memberof LDAP
      * @summary Fonction qui renvoit toutes les infos relatives à un groupe ou un utilisateur particulier.
-     * @desc Cette fonction utilise {@link LDAP.search} avec des attributs prédéfinis.
+     * @desc Cette fonction utilise {@link LDAP.search} avec des attributs prédéfinis. Elle est naïve et n'opère pas de récursion.
      * @param T - Format renvoyé (en pratique {@link userData} ou {@link groupData})
      * @arg {string} domain - Domaine de la recherche (utilisateur ou groupe)
      * @arg {string} id - Identifiant de la feuille cherchée (uid ou gid)
@@ -327,7 +327,7 @@ export class Tools {
      * @memberof LDAP
      * @summary Fonction qui retrouve les utilisateurs ou groupes respectivement correspondant à un groupe ou un utilisateur de la même catégorie.
      * @desc Cette fonction utilise {@link LDAP.search} et va directement à la feuille de l'utilisateur ou du groupe interrogé.
-     * Pour autant, elle est moins naïve qu'elle en a l'air. Elle gère la descente des admins et la remontée des membres.
+     * Pour autant, elle est moins naïve qu'elle en a l'air. Elle ne gère ni la descente des admins ni la remontée des membres et renvoit une réponse naïve.
      * @param {string} id - Identifiant du groupe ou de l'individu à interroger (supposé valide)
      * @param {"user"|"group"} domain - Arbre à interroger 
      * @param {"admins"|"speakers"|"members"|"followers"} category - Catégorie considérée 
-- 
GitLab