Forked from an inaccessible project.
-
Wilson JALLET authoredWilson JALLET authored
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;