From b33ec4424e8de6dbd184d4ad8e7268a60d6dd12d Mon Sep 17 00:00:00 2001
From: ManifoldFR <wilson.jallet@gmail.com>
Date: Fri, 2 Mar 2018 14:07:01 +0100
Subject: [PATCH] Updated GraphQL and updated admin page

---
 src/css/style.css       | 18 ++++++++++-------
 src/graphql/schema.js   |  6 +++---
 src/graphql/typeDefs.js | 41 +++++++++++++++++++++++---------------
 src/index.js            |  2 +-
 src/server.js           | 44 ++++++++++++++++++++++++++++++++++-------
 src/views/home.pug      |  9 ++++-----
 6 files changed, 81 insertions(+), 39 deletions(-)

diff --git a/src/css/style.css b/src/css/style.css
index 2b530ac..f3c1710 100644
--- a/src/css/style.css
+++ b/src/css/style.css
@@ -37,27 +37,31 @@ input.form-control:focus {
 }
 
 .button {
+    margin-top: 0.7em;
+    margin-bottom: 0.7em;
     display: block;
     color: white;
-    min-width: 120px;
+    min-width: 100px;
     height: 30px;
     background-color: rgba(0, 2, 138, 0.767);
     border: solid 1px rgba(117, 117, 117, 0.226);
     border-radius: 4px;
 }
 
-div.button {
+a.button {
     display: block;
     text-align: center;
-    font-size: 11pt;
-    width: 120px;
-}
-
-button a {
+    font-size: 10pt;
     color: white;
     text-decoration: none;
 }
 
+.button-small {
+    width: 100px;
+}
+
+
+
 .form-group button {
     margin-top: 0;
     margin-left: 0.6em
diff --git a/src/graphql/schema.js b/src/graphql/schema.js
index 4eabbfa..feef764 100644
--- a/src/graphql/schema.js
+++ b/src/graphql/schema.js
@@ -133,7 +133,7 @@ const createSubgroup = (user, args) => {
             return getGroupIfVisible(user, rasUID);
         });
     })); 
-}
+};
 
 /**
  * @summary Créé un groupe si les arguments sont tous valides et l'utilisateur est authorisé
@@ -205,9 +205,9 @@ const resolvers = {
     AdminMutation: {
     
         isAdmin: (obj, args, context) => {
-        return true;
+            return true;
         
-    },
+        },
         createSubgroup: (obj, args, context) => {
             args.parentuid = obj.groupUID;
             return createSubgroup(context.user, args);
diff --git a/src/graphql/typeDefs.js b/src/graphql/typeDefs.js
index aed9237..f3cd927 100644
--- a/src/graphql/typeDefs.js
+++ b/src/graphql/typeDefs.js
@@ -5,6 +5,7 @@ const RootTypes = `
         group(uid: ID) : Group
         user(uid: ID) : [User]
         allEvents: [Event]
+        allPosts: [Post]
     }
 
     type Mutation {
@@ -83,36 +84,44 @@ const Group = `
         uid: ID
         name: String
         website: String
-        createdAt: String
-        updatedAt: String
+        createdAt: String!
+        updatedAt: String!
         description: String
         school: String
         parentuid: String
     }
 `;
 
+const Post = `
+    # Publications
+    interface Post {
+        id: ID!
+        title: String!
+        createdAt: String!
+        updatedAt: String!
+        # Auteurs de la publication
+        author: [Group]
+        description: String
+    }
+`;
+
 const Event = `
     # Événements
-    type Event {
+    type Event implements Post {
+        id: ID!
         # Intitulé de l'événement
         title: String!
         # Lieu de l'événement
         location: String
-        datetime: String!
-        # Groupes organisateurs
-        groups: [Group]
+        createdAt: String!
+        updatedAt: String!
+        startTime: String!
+        endTime: String!
+        # Organisateurs
+        author: [Group]
         # Personnes qui y participent
         participants: [User]
-    }
-`;
-
-const Post = `
-    # Publication
-    type Post {
-        title: String!
-        uid: ID!
-        # Groupe auteur de la publication
-        author: Group
+        description: String
     }
 `;
 
diff --git a/src/index.js b/src/index.js
index f67d6bc..7b1ad75 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,5 +1,5 @@
 /**
- * @file Entry point de webpack
+ * @file Point d'entrée de webpack
  */
 import server from './server';
 import colors from 'colors';
diff --git a/src/server.js b/src/server.js
index bb26e72..a87bc02 100644
--- a/src/server.js
+++ b/src/server.js
@@ -2,16 +2,19 @@
  * @file Cree le serveur express avec tous les middleware qui vont bien
 */
 import express from 'express';
+import schema from './graphql/schema';
+import { express as graphqlVoyager } from 'graphql-voyager/middleware';
+import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
+import flash from 'connect-flash';
+import passport from 'passport';
+import LdapStrategy from 'passport-ldapauth';
+import fs from 'fs';
+import session from 'express-session';
 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 setupLdapAuth from './ldap/ldap_auth';
-import { express as graphqlVoyager } from 'graphql-voyager/middleware';
-import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
-import flash from 'connect-flash';
 
 const server = express();
 
@@ -24,7 +27,34 @@ server.use(bodyParser.urlencoded({
 /**
  * @description Configuration authentification
  */
-setupLdapAuth(server);
+let configPath = path.resolve('./', 'ldap_config.json');
+let config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
+
+passport.use(new LdapStrategy({
+    server: {
+        url: config.ldap.server,
+        searchBase: config.ldap.searchBase,
+        searchFilter: config.ldap.searchFilter
+    }
+}
+));
+
+// Définit les paramètres de stockage des sessions.
+server.use(session({
+    secret: config.sessionSecret,
+    resave: true,
+    saveUninitialized: false
+}));
+server.use(passport.initialize());
+server.use(passport.session());
+
+passport.serializeUser(function (user, done) {
+    done(null, user);
+});
+
+passport.deserializeUser(function (user, done) {
+    done(null, user);
+});
 
 /**
  * @description Cache le fait que l'application tourne sous Express dans le header HTTP.
@@ -53,7 +83,7 @@ server.use('/graphql', bodyParser.json(), cors(),
             uid = req.session.passport.user.uid;
             password = "mythe";
         } catch (err) {
-            uid = "anonymous";
+            uid = "quentin.chevalier";
             password = "";
         }
 
diff --git a/src/views/home.pug b/src/views/home.pug
index 23b7f16..ef24d0b 100644
--- a/src/views/home.pug
+++ b/src/views/home.pug
@@ -14,13 +14,12 @@ block content
             input.form-control(type="search", name="columns")
         button.form-control(type="submit",class="button") Recherche/<em>Search</em>
     |
-    h2 GraphiQL
+    h2 GraphiQL and Voyager
     p GraphiQL is an interactive environment to make GraphQL
         | requests to the database.
-    div(class="button")
-        a(href="/graphiql") Check it out.
-    div(class="button")
-        a(href="/voyager") Check it out.
+    p GraphQL Voyager is an application that displays the GraphQL schema as an actual graph.
+    a(class="button button-small",href="/graphiql") GraphiQL
+    a(class="button button-small",href="/voyager") Voyager
     |
     p Currently logged in as: #{userName}.
     form(action="/logout", method="post")
-- 
GitLab