From 5a4eaa0e5268c427100747f902503d250de29389 Mon Sep 17 00:00:00 2001 From: ManifoldFR <wilson.jallet@gmail.com> Date: Tue, 8 May 2018 02:42:33 +0200 Subject: [PATCH] Moar seeds in db --- .../20180303192411_create_metaGroups.js | 2 +- db/seeds/01_create_groups.js | 50 +++++++++++++++---- db/seeds/02_make_posts.js | 8 --- db/seeds/07_make_event.js | 29 +++++++++-- src/graphql/authenticator.js | 13 +++-- src/graphql/connectors/connectors.js | 20 +------- src/graphql/resolvers.js | 6 +++ src/graphql/typeDefs/actions.js | 11 +++- src/server.js | 1 + 9 files changed, 91 insertions(+), 49 deletions(-) diff --git a/db/migrations/20180303192411_create_metaGroups.js b/db/migrations/20180303192411_create_metaGroups.js index 90df1a8..5888122 100644 --- a/db/migrations/20180303192411_create_metaGroups.js +++ b/db/migrations/20180303192411_create_metaGroups.js @@ -1,7 +1,7 @@ /* Une mutation pour rajouter dans la BDD les types SimpleGroup et MetaGroup -(cf la documentation de l'interface GraphQL) +(cf la documentation de l'API GraphQL) Les objets qui étaient jusqu''à présent stoqués dans la table groups sont déplacés dans la table simple_groups En cas de rollback, le déplacement se fait dans l'autre sens diff --git a/db/seeds/01_create_groups.js b/db/seeds/01_create_groups.js index 2b00624..87b8236 100644 --- a/db/seeds/01_create_groups.js +++ b/db/seeds/01_create_groups.js @@ -17,6 +17,7 @@ exports.seed = function(knex, Promise) { },{ name: 'JTX', uid: 'jtx', + description: "Le Journal Télévisé de l'X te fait revivre les évènements promo en images et expose régulièrement ses créations.", website: 'binet-jtx.com', school: 'polytechnique', parentuid: 'kes', @@ -25,14 +26,15 @@ exports.seed = function(knex, Promise) { name: 'Faërix', uid: 'faerix', website: 'faerix.net', + description: "Faërix est le binet de jeux de l'école : jeux de cartes, de plateau, de rôles... Le binet organise chaque année, sur un week-end, une convention de jeux de rôles, les Rencontres Rôlistes de l'X.", school: 'polytechnique', parentuid: 'kes', type : 'simple' },{ name: 'Bôbar', uid: 'bob', - description : "Viens. On est bien", - website: 'bôbar.binet.fr', + description: "Le bar de l'École polytechnique, tenu par et pour les X. Le BôBar t'enkhûle avec affection", + website: 'http://tdb.bobar.pro/', school: 'polytechnique', parentuid: 'kes', type : 'simple' @@ -55,8 +57,7 @@ exports.seed = function(knex, Promise) { website: 'laserwave.fr', school: 'supoptique', type : 'simple' - }, - { + },{ name: 'WikiX', uid: 'wikix', website: 'https://wikix.polytechnique.org/', @@ -69,23 +70,52 @@ exports.seed = function(knex, Promise) { website: 'http://bde.ensta-paristech.fr/', school: 'ensta', type : 'simple' - }, - { + },{ name: "X-Chine", uid: "x-chine", - website: "", school: "polytechnique", description: `X-Chine est le binet qui rassemble les amoureux et les curieux de l'Empire du Milieu, qu'ils soient chinois ou non !`, type: "simple" - }, - { + },{ name: 'Subaïsse', uid: 'subaisse', description: 'Le Binet de ceux qui subissent', school: 'polytechnique', parentuid: 'kes', type : 'simple' - }, + },{ + name: 'X-Broadway', + uid: 'xbroadway', + website: 'https://xbroadway.binets.fr/', + description: "Créé par la promotion 2012, le binet X-Broadway prépare pendant une année une comédie musicale qu'il joue durant le tronc commun de la promo suivante. Chaque année, le bureau est composé de multiples pôles : comédie, danse, manute, musique, et prez'. Une fois le bureau constitué, il recrute sa troupe parmi les étudiants du plateau de Saclay.", + school: "polytechnique", + parentuid: 'kes', + type: 'simple' + },{ + name: 'Œnologie', + uid: 'oenologie', + website: 'oenologie.binets.fr', + description: "Le binet de la Finesse et du Bon Goût par excellence. Cours d'initiation, dégustations, soirées Vins & Fromages, voyages chez les producteurs : le Binet Œnologie est là pour partager la passion du vin avec tous, néophytes ou connaisseurs.", + school: "polytechnique", + parentuid: "kes", + type: "simple" + },{ + name: "Tribunes de l'X", + uid: 'politix', + website: 'https://www.facebook.com/Tribunes-de-lX-250533552110256/', + description: "Le binet Tribunes de l'X a pour but d'intéresser les élèves à la \"vie de la cité\" en organisant des conférences ou débats, autour de grandes sujets d'actualité et d'enjeux fondamentaux pour le débat public, avec des personnalités diverses, hommes politiques ou intellectuels. Cette association est la tribune étudiante de l'X.", + school: "polytechnique", + parentuid: "kes", + type: 'simple' + },{ + name: "X-Finance", + uid: 'politix', + description: "X Finance gère un fonds d'investissement étudiant au profit de la FX en partenariat avec Edmond de Rothschild. Nous développons également des modèles algorithmiques pour gérer le risque. Le binet organise également des événements de networking en partenariat avec des écoles françaises et européeennes.", + school: "polytechnique", + parentuid: "kes", + type: "simple" + } + ]; return knex('simple_groups').insert(simple_groups); diff --git a/db/seeds/02_make_posts.js b/db/seeds/02_make_posts.js index c17781b..ceddb63 100644 --- a/db/seeds/02_make_posts.js +++ b/db/seeds/02_make_posts.js @@ -11,14 +11,6 @@ exports.seed = function(knex, Promise) { title: "Proj'et Promotion", content: "La nouvelle proj' du JTX arrive !", authors: ['br'] - },{ - title: "Fête de la Lune", - content: "C'est bientôt la fête de la Lune ! Inscrivez-vous pour un dîner-spectacle dans le Grand Hall !", - authors: ['x-chine'] - },{ - title: "Formation Web", - content: "Envie d'apprendre à faire un site Web en Django ? Alors viens en amphi Sauvy ce jeudi à 20h !", - authors: ['br'] }]; return knex('posts').insert(posts); diff --git a/db/seeds/07_make_event.js b/db/seeds/07_make_event.js index f0439c8..4ce9ef8 100644 --- a/db/seeds/07_make_event.js +++ b/db/seeds/07_make_event.js @@ -6,13 +6,34 @@ exports.seed = function(knex, Promise) { // Inserts seed entries return knex('events').insert([ { - id : 42, - title : "coder sigma", - content : "Tous ensemble pour faire du Dev. Que demander de plus ? (a part du sommeil)", + title : "Fête de la lune", + content : "La fête de la lune, c'est bientôt dans le grand hall !", start_time : knex.fn.now(), end_time : knex.fn.now(), - authors : [], + authors : ["x-chine"], is_announcement : false + },{ + title: "Perm BR du mardi soir", + content: "La perm' BR c'est maintenant!", + start_time: knex.fn.now(), + end_time: knex.fn.now(), + authors : ["br"], + is_announcement : true + },{ + title: "Formation Git", + content: "Aujourd'hui, on va parler du système de contrôle de versions Git, qui est particulièrement utile pour travailler à plusieurs sur des projets informatiques: PSC, code de PI ou de projet de MAP, site binet, quoi que ce soit!", + start_time: knex.fn.now(), + end_time: knex.fn.now(), + authors: ["br"], + is_announcement: false + },{ + title: "Formation Web", + content: "Envie d'apprendre à faire un site Web en Django ? Alors viens en amphi Sauvy ce jeudi à 20h !", + authors: ['br'], + start_time: knex.fn.now(), + end_time: knex.fn.now(), + authors: ['br'], + is_announcement: false } ]); }); diff --git a/src/graphql/authenticator.js b/src/graphql/authenticator.js index 9353a61..7b36a2e 100644 --- a/src/graphql/authenticator.js +++ b/src/graphql/authenticator.js @@ -2,19 +2,22 @@ import passport from 'passport'; import '../config_passport'; import jwt from 'jsonwebtoken'; +// JSON web token secret key const SECRET_KEY = "boom shakalaka"; +// Returns a promise wherein we try to authenticate the user +// against the LDAP using passportjs +// The promise will fail if no user is returned in the passport.authenticate +// callback. function loginResolverFunc({ username, password, req }) { - return new Promise((resolve, reject) => { passport.authenticate('ldapauth', (err, user, info) => { if (err) { reject(err); } if (!user) { reject('Invalid credentials.'); } - req.login(user, () => { - const token = jwt.sign({uid: user.uid}, SECRET_KEY); - resolve(token); - }); + // Sign a new JSON web token with the user's uid against the secret key + const token = jwt.sign({ uid: user.uid }, SECRET_KEY); + resolve(token); })({ body: { username, password } }); }); } diff --git a/src/graphql/connectors/connectors.js b/src/graphql/connectors/connectors.js index 5a904d0..0ad6096 100644 --- a/src/graphql/connectors/connectors.js +++ b/src/graphql/connectors/connectors.js @@ -25,7 +25,7 @@ export { utilisateur }; Commençons par un rappel sur le fonctionnement des droits. Chaque utilisateur a un certain niveau de droit sur chaque groupe. Ce niveau de droit indique ce qu'il a le droit de savoir et de faire. Chaque niveau est inclus dans les niveaus supérieur. - Les différends niveaux sont : + Les différents niveaux sont : none - aucun droit viewer : l'utilisateur a visibilité sur le groupe. Il sait que le groupe existe, et a accès à un certain nombre d'infos. member : l'utilisateur est membre du groupe @@ -55,24 +55,6 @@ export { utilisateur }; Les fonctions qui ne modifient pas la BDD et ne renvoient pas de données sur la BDD n'ont pas de rights. */ - - - -/** - * @summary Génère une promise. - * @function - * @desc Les fonctions ici sont toutes supposées renvoyer une promise. - * Si on veut renvoyer une valeur directement, cette fonction permet de construire - * une Promise qui renvoie cette valeur facilement. - * @arg {Object} val - La valeur qu'on veut renvoyer. - * @return {Promise(Object)} Une promise qui renvoi val - */ -const quickPromise = (val) => { - return new Promise( (resolve, reject) => { - resolve(val); - }); -}; - /** * @summary Renvoie le nom de la table dans laquelle il faut chercher en fonction de ce qu'on veut * @desc a remplir diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js index f1e1c1d..be6faa7 100644 --- a/src/graphql/resolvers.js +++ b/src/graphql/resolvers.js @@ -203,6 +203,12 @@ export const resolvers = { return user && connectors.createSubgroup(user, args); }, + postEvent: async function(obj, args, context) { + const { from, title, date } = args; + let user = authentifiers.admin(context.bindUser,args.from); + + }, + login: function(obj, args, context) { const {username, password} = args; diff --git a/src/graphql/typeDefs/actions.js b/src/graphql/typeDefs/actions.js index 73ff5f6..7d6c24a 100644 --- a/src/graphql/typeDefs/actions.js +++ b/src/graphql/typeDefs/actions.js @@ -87,9 +87,16 @@ const RootTypes = ` school: String ): Group - # Speaker mutations + # Creates a new event. + postEvent( + # ID of the organizing group. + from: ID!, + # Title of the event. + title: String, + # Date of event. + date: String + ): Event - postEvent(from : String!, name: String, date: String): Event answerEventRequest(from : String, request: ID, accept : Boolean): Request # Log user into the API diff --git a/src/server.js b/src/server.js index e557c63..f931c3a 100644 --- a/src/server.js +++ b/src/server.js @@ -223,6 +223,7 @@ app.use('/graphql', console.log("Responding to graphql request..."); console.log(`| User: ${req.user ? req.user.uid : "none"}`); + console.log(`| Authorization: ${req.headers.authorization}`); console.log("| User is authenticated:",req.isAuthenticated()); if(req.isAuthenticated()) { -- GitLab