From 78722237ca100575fd7a5407ccd870e3d7d71e0d Mon Sep 17 00:00:00 2001 From: anatole <anatole.romon@polytechnique.edu> Date: Tue, 1 May 2018 11:39:51 +0200 Subject: [PATCH] I dont know what this does actually --- src/graphql/connectors/authentifiers.js | 28 ++++++++++++-------- src/graphql/connectors/connectors.js | 34 ++++++++++++++----------- src/graphql/resolvers.js | 12 ++++++++- src/graphql/typeDefs/objects.js | 5 +++- 4 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/graphql/connectors/authentifiers.js b/src/graphql/connectors/authentifiers.js index 79f950f..47fc848 100644 --- a/src/graphql/connectors/authentifiers.js +++ b/src/graphql/connectors/authentifiers.js @@ -21,17 +21,19 @@ function User(user, ldap_access){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ -export function anonymous(user){ +export async function anonymous(user){ return new User(user, new UtilisateurAnonyme()); } /** * @summary Authentifie un utilisateur comme viewer(groupUID) - * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export function loggedIn(user, groupUID){ @@ -41,7 +43,8 @@ export function loggedIn(user, groupUID){ /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export function viewer(user, groupUID){ @@ -51,7 +54,8 @@ export function viewer(user, groupUID){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function member(user, groupUID){ @@ -65,7 +69,8 @@ export async function member(user, groupUID){ /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function speaker(user, groupUID){ @@ -75,18 +80,21 @@ export async function speaker(user, groupUID){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function admin(user, groupUID){ let adminList = await list_selectors.usersWithAdminRights(user, groupUID); - return (typeof adminList != "undefined" && adminList.indexOf(user.uid) != -1); + if (typeof adminList != "undefined" && adminList.indexOf(user.uid) != -1) + return new User(user, AdministrateurConnecte()); } /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(uid)} L'utilisateur possède-t-il les droits de superviseur ? Si oui, renvoie la justification. Sinon, renvoie false. + * @return {Promise(uid)} L'utilisateur possède-t-il les droits de superviseur ? + * Si oui, renvoie la justification. Sinon, renvoie false. * Attention : renvoie true si l'utilisateur a les droits mais sans justification. * @rights user */ diff --git a/src/graphql/connectors/connectors.js b/src/graphql/connectors/connectors.js index 90fbd8f..baea096 100644 --- a/src/graphql/connectors/connectors.js +++ b/src/graphql/connectors/connectors.js @@ -13,6 +13,10 @@ import ldap_bind_user from '../../../ldap_connexion_config.json'; const utilisateur = new ldap.UtilisateurAnonyme(); export { utilisateur }; +/* Ce n'est pas comme ça qu'on est censé fonctionner. Toute utilisation de utilisateur + a vocation à être temporaire, et sera remplacé par l'usage des fonctions + d'authentification correctes +*/ /* Le tag @rights est la gestion des autorisations. @@ -345,7 +349,7 @@ export async function getAnnouncement(user, messageID){ return res[0]; } res = await knex.select().from('events').where('id', messageID) - .whereIn('id', await selectors.visibleEvents(user)); + .whereIn('id', await selectors.visibleEvents(user)); if(res[0]){ res[0].type = 'Announcement'; return res[0]; @@ -355,7 +359,7 @@ export async function getAnnouncement(user, messageID){ export async function getEvent(user, messageID){ let res = await knex.select().from('events').where('id', messageID) - .whereIn('id', await selectors.visibleEvents(user)); + .whereIn('id', await selectors.visibleEvents(user)); if(res[0]){ res[0].type = 'Event'; return res[0]; @@ -365,7 +369,7 @@ export async function getEvent(user, messageID){ export async function getPrivatePost(user, messageID){ let res = await knex.select().from('private_posts').where('id', messageID) - .whereIn('id', await selectors.visiblePrivatePosts(user)); + .whereIn('id', await selectors.visiblePrivatePosts(user)); if(res[0]){ res[0].type = 'PrivatePost'; return res[0]; @@ -462,29 +466,29 @@ export async function visibleMessages(user, messageID){ export async function getMessageAuthor(user, messageID){ let GroupAuthors = await getGroupsFromCallbacks(user, qb => { return qb.select({uid: 'group'}).from('group_message_relationships') - .where('message', messageID).whereIn('status', ['host', 'publish']) - }) - let authorObject = Object() + .where('message', messageID).whereIn('status', ['host', 'publish']); + }); + let authorObject = Object(); if(GroupAuthors.length == 1) - authorObject.singleGroup = GroupAuthors[0] + authorObject.singleGroup = GroupAuthors[0]; else - authorObject.multipleGroups = GroupAuthors + authorObject.multipleGroups = GroupAuthors; - return authorObject + return authorObject; } export async function getMessageRecipient(user, messageID){ let GroupReciepients = await getGroupsFromCallbacks(user, qb => { return qb.select({uid: 'group'}).from('group_message_relationships') - .where('message', messageID).where('status', 'recieve') - }) - let recipientObject = Object() + .where('message', messageID).where('status', 'recieve'); + }); + let recipientObject = Object(); if(GroupReciepients.length == 1) - recipientObject.singleGroup = GroupReciepients[0] + recipientObject.singleGroup = GroupReciepients[0]; else - authorObject.multipleGroups = GroupReciepients + recipientObject.multipleGroups = GroupReciepients; - return recipientObject + return recipientObject; } /** diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js index d61fa74..b336be3 100644 --- a/src/graphql/resolvers.js +++ b/src/graphql/resolvers.js @@ -324,7 +324,17 @@ export const resolvers = { // @rights viewer(obj.uid) SimpleGroup: { - members: (obj, args, context) => { + admins: async function(obj, args, context){ + let user = await authentifiers.member(context.user, obj.uid); + return user.ldap_access.listMembers(context.user,obj.uid); + }, + + members: async function(obj, args, context){ + let user = await authentifiers.member(context.user, obj.uid); + return user.ldap_access.listMembers(context.user,obj.uid); + }, + + likers: async function(obj, args, context){ return connectors.utilisateur.listMembers(context.user,obj.uid); } }, diff --git a/src/graphql/typeDefs/objects.js b/src/graphql/typeDefs/objects.js index 02166d2..673466e 100644 --- a/src/graphql/typeDefs/objects.js +++ b/src/graphql/typeDefs/objects.js @@ -64,8 +64,11 @@ const Group = ` createdAt: String! updatedAt: String! - # Membres du groupe + # Admin, membres, sympathisants du groupe + admins: [User] members: [User] + likers: [User] + description: String # École d'origine du groupe school: String -- GitLab