diff --git a/db/migrations/20180303192411_create_metaGroups.js b/db/migrations/20180303192411_create_metaGroups.js index 90df1a877c7fe944429a21ce190b856bb0ac3cfd..5888122b6b7911c9378fc7fc77f85bc4f96e188c 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 2b00624e6e0e89ca45f467c41887dd104444bb4f..87b8236fd5825fc4bcb82f366d7c2586eb548704 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 c17781bed30d3aba0dde9d0f7cec88f53c3539d7..ceddb63c92c6293bd81ad85e2568386b1dfd480a 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 f0439c85dca44179a5ce869bf0d0df4834d67bb5..4ce9ef80a0c54aa10f9d2015b14a9b189c23ce56 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 9353a6184b946ddef4dd97b7757352bd27434306..7b36a2e22b3932184658f2c12da65c4efdbc0371 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 5a904d0d1baddff6baca774cca6aee50208d799e..0ad6096fe3e598e25b662266c7173153ea39a1cf 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 f1e1c1d93d767bf8f2e44a38fc46bbe8503ad56c..be6faa7551d44ed0f19fdb5682138d4a77e9096e 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 73ff5f66eb096403883e62169a89ea6f829b590c..7d6c24aed82a6032030ead9e81ef8fa89ae6af44 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 e557c632707249399ba1171537aacc7f8b726b40..f931c3a1e181d96ba678fbb82c15b2294baa4b73 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()) {