Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
server.js 3.01 KiB
/** 
 * @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';

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: true
}));

/**
 * @description Configuration authentification
 */
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.
 */
server.disable('x-powered-by');
// setting up view engine for pug
let viewpath = path.resolve('./','src','views');
server.set('views', viewpath);
server.set('view engine', 'pug');

// favicon: capital sigma symbol
server.use(favicon(path.resolve('./','assets','favicon.ico')));
server.use('/assets',express.static(path.resolve('./','assets')));

// Morgan is middleware for logging requests
server.use(morgan('dev'));

const defaultUser = require('../ldap_connexion_config.json');

// Charge le middleware express pour GraphQL
server.use('/graphql', bodyParser.json(), cors(),
    graphqlExpress(req => {
        let uid;
        let password;
        
        try {
            uid = req.session.passport.user.uid;
            password = "mythe";
        } catch (err) {
            uid = defaultUser.dn.split("=")[1].split(",")[0];
            console.log(uid);
            password = defaultUser.passwd;
        }

        console.log("Accessing GraphQL as:",uid);

        return {
            schema : schema,
            context : {user : {uid : uid, password : password}}
        };
    }));

// GraphiQL est une console interactive pour faire des requêtes au schéma GraphQL
server.use('/graphiql', graphiqlExpress({endpointURL: '/graphql'}));

// GraphQL voyager
server.use('/voyager', graphqlVoyager({ endpointUrl: '/graphql' }));

// connect-flash is middleware for flashing messages
server.use(flash());

export default server;