diff --git a/package-lock.json b/package-lock.json index a3573454acae693429fbcc9a3230bfb7127bfc4a..75529fa355afaf009a389b2a98c7ae813fcbda77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1181,6 +1181,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, "crc": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", @@ -2463,7 +2472,6 @@ "debug": { "version": "2.6.8", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -2513,7 +2521,6 @@ "form-data": { "version": "2.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "asynckit": "0.4.0", @@ -2599,7 +2606,6 @@ "har-validator": { "version": "4.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ajv": "4.11.8", @@ -2655,7 +2661,6 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -2724,20 +2729,17 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } }, "mime-db": { "version": "1.27.0", - "bundled": true, - "dev": true + "bundled": true }, "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true, "requires": { "mime-db": "1.27.0" } @@ -2745,20 +2747,17 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "requires": { "brace-expansion": "1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "requires": { "minimist": "0.0.8" } @@ -2766,7 +2765,6 @@ "ms": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "node-pre-gyp": { @@ -2809,19 +2807,16 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "oauth-sign": { "version": "0.8.2", "bundled": true, - "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true }, "once": { @@ -2834,7 +2829,6 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "os-tmpdir": { diff --git a/package.json b/package.json index 84aedce3d6f7a8d49cf85d49b82d521f3d0201af..2227f83fe49302f4c9dbb55c6ff6597f48699132 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "colors": "^1.1.2", "connect-ensure-login": "^0.1.1", "connect-flash": "^0.1.1", + "cors": "^2.8.4", "express": "^4.16.2", "express-session": "^1.15.6", "fs": "0.0.1-security", diff --git a/src/graphql/schema.js b/src/graphql/schema.js index a9316b455239aeff5044a5c4811b3f9d105df6db..c1209010e603e1207bab5e0796236f53137c09b6 100644 --- a/src/graphql/schema.js +++ b/src/graphql/schema.js @@ -1,9 +1,17 @@ +/** + * @file Ce fichier genere le shema utilise par Apollo. C'est ici que les requetes GraphQl sont résolues. + * @author akka vodol +*/ + import knex from '../../db/knex_router'; +// import { listGroups, listMembers } from '../ldap/ldap_data'; import { makeExecutableSchema } from 'graphql-tools'; +import { request } from 'https'; const typeDefs = ` type Query { - groups: [Group]! + allGroups: [Group] + group(id: ID) : [Group] } type Group { @@ -16,9 +24,25 @@ const typeDefs = ` } `; +const getAllVisibleGroups = (user) => { + // let group_ids = listGroups(user.id); + return knex.select().from('groups')/*.whereIn('id', group_ids)*/; +}; + +const getGroupIfVisible = (user, id) => { + return getAllVisibleGroups(user)/*.where('id', id).then(function(table) { + console.log(JSON.stringify(table,null,2))*/; +}; + const resolvers = { Query: { - groups: () => knex.select().from('groups') + allGroups: (obj, args, context) => { + return getAllVisibleGroups(context.user); + }, + group: (obj, args, context) => { + console.log(args.id); + return getGroupIfVisible(context.user, args.id); + } } }; diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js index 6abfba2df89c3e5932dae37d19f9aebd491f18f3..3d87b65234baa02835f9e96b66dd24734ceae383 100644 --- a/src/ldap/ldap_data.js +++ b/src/ldap/ldap_data.js @@ -16,7 +16,7 @@ var ldapEscape = require('ldap-escape');*/ var ensureLoggedin = require('connect-ensure-login').ensureLoggedIn; // Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement -let config = JSON.parse(fs.readFileSync('../../config.json', 'utf8')); +let config = JSON.parse(fs.readFileSync('./config.json', 'utf8')); // Connection au serveur LDAP avec des temps de timeout arbitraires var client = ldap.createClient({ url: config.ldap.server}); @@ -230,4 +230,4 @@ function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9=" /* Partage pour le reste du monde ; même remarque synthaxe que pour l'import */ export { listGroups, listMembers, TOL }; -/*module.exports ={ listGroups, listMembers, TOL };*/ \ No newline at end of file +/*module.exports ={ listGroups, listMembers, TOL };*/ diff --git a/src/server.js b/src/server.js index 87f08aed5ea51e0dddb2d41295d317464f5dbbe3..a40a9c57dcb4903ef9a11707f386f2ca50bdc5e4 100644 --- a/src/server.js +++ b/src/server.js @@ -6,6 +6,7 @@ import bodyParser from 'body-parser'; import favicon from 'serve-favicon'; import morgan from 'morgan'; import path from 'path'; +import cors from 'cors'; import schema from './graphql/schema'; import { graphqlExpress, graphiqlExpress } from 'graphql-server-express'; import flash from 'connect-flash'; @@ -15,7 +16,7 @@ const server = express(); // on sait pas a quoi ca sert mais il parait que c'est utile server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ - extended: false + extended: true })); // setting up view engine for pug @@ -31,10 +32,24 @@ server.use(favicon(path.resolve('./','assets','favicon.ico'))); server.use(morgan('dev')); // Charge le middleware express pour GraphQL -server.use('/graphql', bodyParser.json(), graphqlExpress({schema})); +server.use('/graphql', bodyParser.json(), cors(), + graphqlExpress(req => { + let uid; + + try { + uid = req.session.id; + } catch (err) { + uid = "1"; + } + + return { + schema : schema, + context : {user : {id : uid}} + }; + })); // GraphiQL est une console interactive pour faire des requêtes au schéma GraphQL -server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'})); +server.use('/graphiql', graphiqlExpress({endpointURL: '/graphql'})); // connect-flash is middleware for flashing messages server.use(flash());