From 4cff4dfca4f4f275c687474b2d0a0ed98a41ed86 Mon Sep 17 00:00:00 2001
From: ManifoldFR <wilson.jallet@gmail.com>
Date: Sun, 2 Sep 2018 00:05:06 +0200
Subject: [PATCH] fix members field resolver in SimpleGroups

---
 src/graphql/{resolvers.js => resolvers.ts}    | 74 ++++++++++---------
 .../resolvers/{groups.js => groups.ts}        |  5 +-
 src/graphql/resolvers/messages.js             |  1 -
 src/ldap/ldap_data.js                         | 19 +++--
 4 files changed, 54 insertions(+), 45 deletions(-)
 rename src/graphql/{resolvers.js => resolvers.ts} (73%)
 rename src/graphql/resolvers/{groups.js => groups.ts} (92%)

diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.ts
similarity index 73%
rename from src/graphql/resolvers.js
rename to src/graphql/resolvers.ts
index 5f3b6ab..19df865 100644
--- a/src/graphql/resolvers.js
+++ b/src/graphql/resolvers.ts
@@ -6,28 +6,32 @@ import _ from 'lodash';
 import { assertBinaryExpression } from 'babel-types';
 import knex from '../../db/knex_router';
 
-import passport from 'passport';
-import './../config_passport';
+import '../config_passport';
 
-import authenticator from '../graphql/authenticator';
+import authenticator from './authenticator';
 
 import * as connectors from './connectors/connectors';
-import * as list_selectors from './connectors/list_selectors';
 import * as authentifiers from './connectors/authentifiers';
 import MessageResolvers from './resolvers/messages';
 import GroupResolvers from './resolvers/groups';
 
 // nouveau test
-
-/** 
+/**
  * @description Résolveurs des différentes requêtes GraphQL
 */
-
-function ChevalierError(err){
-    this.returned_error = err;
-    this.name = "chevalier error";
-    this.message = "Error encountered while running ldap access code : " + err.message;
-    this.toString = () => this.message;
+class ChevalierError {
+    returned_error: any
+    name: String
+    message: String
+    constructor(err) {
+        this.returned_error = err;
+        this.name = "chevalier error";
+        this.message = "Error encountered while running ldap access code : " + err.message;
+    }
+
+    toString(): String {
+        return this.message
+    }
 }
 
 
@@ -37,27 +41,27 @@ export const resolvers = {
 
         // group queries
 
-        allGroups: async function(obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+        allGroups: async function(root, args, context){
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getAllVisibleGroups(user);
         },
 
-        allSimpleGroups: async function (obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+        allSimpleGroups: async function (root, args, context){
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getAllVisibleSimpleGroups(user);
         },
 
-        group: async function(obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+        group: async function(root, args, context) {
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getGroupIfVisible(user, args.uid);
         },
 
         simpleGroup: async function(obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getSimpleGroupIfVisible(user, args.uid);
         },
         metaGroup: async function(obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getMetaGroupIfVisible(user, args.uid);
         },
 
@@ -85,7 +89,7 @@ export const resolvers = {
         // user queries
 
         user: async function(obj, args, context){
-            let user = await authentifiers.anonymous(context.bindUser);
+            let user = await authentifiers.anonymous(context.user);
             return user && connectors.getUser(user,args.uid);
         },
 
@@ -113,15 +117,15 @@ export const resolvers = {
         // member queries
 
         allMembers : async function(obj, args, context){
-            let user = await authentifiers.member(context.bindUser, args.from);
-            return user && connectors.getGroupMemberUsers(context.bindUser, obj.groupUID);
+            let user = await authentifiers.member(context.user, args.from);
+            return user && connectors.getGroupMemberUsers(context.user, obj.groupUID);
         },
 
         // speaker queries
 
         allRequests: async function(obj, args, context){
             let res = [];
-            let user = authentifiers.admin(context.bindUser, args.from);
+            let user = authentifiers.admin(context.user, args.from);
             if(user){
                 res = res.concat(await connectors.getUserJoinGroupRequests(user, args.from));
             }
@@ -148,11 +152,11 @@ export const resolvers = {
     // @rights admin(obj.groupUID)
     UserJoinGroup: {
         user : (obj, args, context) => {
-            return connectors.getUser(context.bindUser, obj.useruid);
-            /*return connectors.getUser(context.bindUser, "quentin.gendre");
+            return connectors.getUser(context.user, obj.useruid);
+            /*return connectors.getUser(context.user, "quentin.gendre");
             if(obj.useruid === "anatole.romon"){
-                return connectors.getUser(context.bindUser, "anatole.romon").then(res => {
-                    return connectors.getUser(context.bindUser, "quentin.gendre");
+                return connectors.getUser(context.user, "anatole.romon").then(res => {
+                    return connectors.getUser(context.user, "quentin.gendre");
                 });
             }else{
                 return new Promise( (resolve, reject) => {
@@ -165,20 +169,20 @@ export const resolvers = {
     // @rights speaker(obj.groupUID)
     GroupJoinEvent : {
         event: (obj, args, context) => {
-            return connectors.getEvent(context.bindUser, obj.eventuid);
+            return connectors.getEvent(context.user, obj.eventuid);
         },
         groupWantingToJoin: (obj, args, context) => {
-            return connectors.getGroup(context.bindUser, obj.senderuid);
+            return connectors.getGroup(context.user, obj.senderuid);
         }
     },
 
     // @rights speaker(obj.groupUID)
     YourGroupHostEvent : {
         event: (obj, args, context) => {
-            return connectors.getEvent(context.bindUser, obj.eventuid);
+            return connectors.getEvent(context.user, obj.eventuid);
         },
         sender: (obj, args, context) => {
-            return connectors.getGroup(context.bindUser, obj.senderuid);
+            return connectors.getGroup(context.user, obj.senderuid);
         }
     },
 
@@ -186,7 +190,7 @@ export const resolvers = {
     User : {
         groups : (obj, args, context) => {
             let result = Promise.all(obj.groups.map((grid) => {
-                return connectors.getSimpleGroup(context.bindUser,grid);
+                return connectors.getSimpleGroup(context.user,grid);
             }));
 
             return result.then(groups => {
@@ -207,14 +211,14 @@ export const resolvers = {
         },
 
         releaseAdminRights : async function(obj, args, context){
-            let user = await authentifiers.superviser(user, args.from);
+            let user = await authentifiers.superviser(context.user, args.from);
             return user && await connectors.releaseAdminRights(user, args.from, user.justification);
         },
 
         // Admin mutations
 
         createSubgroup: async function (obj, args, context){
-            let user = authentifiers.admin(context.bindUser, args.from);
+            let user = authentifiers.admin(context.user, args.from);
             return user && connectors.createSubgroup(user, args);
         },
         login: function (obj, args, context) {
diff --git a/src/graphql/resolvers/groups.js b/src/graphql/resolvers/groups.ts
similarity index 92%
rename from src/graphql/resolvers/groups.js
rename to src/graphql/resolvers/groups.ts
index cf5f798..7e56a74 100644
--- a/src/graphql/resolvers/groups.js
+++ b/src/graphql/resolvers/groups.ts
@@ -23,7 +23,10 @@ const GroupResolvers = {
 
         async members(obj, args, context) {
             let user = await authentifiers.member(context.user, obj.uid);
-            return user.ldap_access.listMembers(context.user, obj.uid);
+            const res: String[] = await user.ldap_access.listMembers(context.user, obj.uid);
+            return res.map(x => {
+                return {uid: x};
+            });
         },
 
         async likers(obj, args, context) {
diff --git a/src/graphql/resolvers/messages.js b/src/graphql/resolvers/messages.js
index e4c3a6b..c0b2a3a 100644
--- a/src/graphql/resolvers/messages.js
+++ b/src/graphql/resolvers/messages.js
@@ -5,7 +5,6 @@ import * as connectors from '../connectors/connectors';
 
 const MessageResolvers = {
     Message: {
-
         __resolveType: function(obj) {
             if (obj.location) {
                 return "Event";
diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js
index 24407ef..dca4424 100644
--- a/src/ldap/ldap_data.js
+++ b/src/ldap/ldap_data.js
@@ -352,13 +352,13 @@ function genererIdNum(attribut, dn) {
  * @method repliquerTOLdesIds permet de retrouver des ids à partir d'infos parcellaires
 */
 class UtilisateurAnonyme {
-    //------------------------------------------------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------------------
     // Fonctions de lecture
-    //------------------------------------------------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------------------
 
-    //------------------------------------------------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------------------
     // Fonctions intermédiaires TBT
-    //------------------------------------------------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------------------
 
     /**
      * @summary Cette fonction teste si un utilisateur est membre d'un groupe.
@@ -404,14 +404,17 @@ class UtilisateurAnonyme {
     /**
      * @summary Fonction qui retrouve la liste des membres d'un groupe.
      * @desc Cette fonction utilise {@link rechercherLDAP} avec un dictionnaire prédéfini dans config.json. Elle utilise LDAPEscape pour éviter les injections.
-     * @arg {string} uid - Identifiant du groupe à interroger (le plus souvent nom du groupe en minuscule)
+     * @arg {string} uid - Identifiant de l'utilisateur interrogeant
+     * @arg {string} gid - Identifiant du groupe à interroger (le plus souvent nom du groupe en minuscule)
      * @return {Promise(String[])} Liste des uid des membres où l'id fournie est membre (noms flat des groupes)
      */
-    listMembers(uid) {
-        let filtered_request = ldapEscape.filter(ldapConfig.key_id + "=${id}," + ldapConfig.dn_groups, { id: uid });
+    listMembers(uid, gid) {
+        // console.log("Listing members of %s", gid);
+        let filtered_request = ldapEscape
+            .filter(ldapConfig.key_id + "=${id}," + ldapConfig.dn_groups, { id: gid });
         // console.log(filtered_request);
         return rechercherLDAP(filtered_request, ldapConfig.group.member)
-            .then(res => res);
+            .then(res => res[0]);
     }
     
     /**
-- 
GitLab