diff --git a/src/routing/admin.router.ts b/src/adminview/admin.router.ts similarity index 92% rename from src/routing/admin.router.ts rename to src/adminview/admin.router.ts index c77b422d2e60d041836e30494b7d75b2674007cc..6e98df37c905d0eb79326fbde5f3835cde5a169b 100644 --- a/src/routing/admin.router.ts +++ b/src/adminview/admin.router.ts @@ -13,6 +13,14 @@ import passport from 'passport'; import flash from 'connect-flash'; import { ensureLoggedIn } from 'connect-ensure-login'; +import favicon from 'serve-favicon'; + +app.use(favicon(path.resolve('./', 'assets', 'favicon.ico'))); +// specifies path to static assets. ......je comprends pas ce que c'est. TODO +app.use('/assets', express.static(path.resolve('./', 'assets'))); + +// router: an Express router. https://expressjs.com/en/4x/api.html#router +// = a "sub-middleware stack", a “mini-application" inside the main application const router = Router(); router.use(flash()); diff --git a/src/app.ts b/src/app.ts index ec374e4a2df6b26266c534c0f6833f4ced6bc1f2..df227bf522e1832d79d2c617152034c5ec25ad18 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,11 +1,12 @@ /** * @file Initialise et configure le serveur Express sur lequel tourne le back. * - * La configuration inclut tout le _middleware_ définissant les API et les services - * nécessaire utilisés, comme `express-session`, GraphiQL, GraphQL Voyager. + * Inclut les middlewares des packages utilisés: apollo-server, passportjs, morgan... + * et définit le middleware de notre API. + * Pour comprendre ce que fait chaque package, se référer à leur page sur https://www.npmjs.com. * - * @todo changer cette description... ^ - * @todo qu'arrive-t-il aux requetes avec un cookie expire? elles ne sont traitees ni par passport.session() ni par passport.authenticate('ldapauth')... + * On peut considérer que les app.use (et app.get et app.post) sont pattern-matchés et + * exécutés séquentiellement. http://expressjs.com/en/guide/using-middleware.html * * @author manifold, kadabra */ @@ -13,47 +14,46 @@ import express from 'express'; import bodyParser from 'body-parser'; // packages pour graphql import { express as graphqlVoyager } from 'graphql-voyager/middleware'; -// replacement of express-graphql, which hasn't been updated in 6 months -import { ApolloServer } from 'apollo-server-express'; //hawkspar->manifold VSCode râle ici pr moi -// typeDefs and resolvers -import schema from './graphql/schema'; -// packages pour adminview -import { ensureLoggedIn } from 'connect-ensure-login'; -import flash from 'connect-flash'; -import router from './routing/admin.router'; +import { ApolloServer } from 'apollo-server-express'; +import schema from './graphql/schema'; // definition du schéma et des resolvers +// l'interface admin du back (adminview) +import router from './adminview/admin.router'; // packages pour l'authentification import passport from 'passport'; import session from 'express-session'; -import cookieParser from 'cookie-parser'; //hawkspar->manifold VSCode râle ici pr moi +import cookieParser from 'cookie-parser'; import cors from 'cors'; -// packages divers -import favicon from 'serve-favicon'; +// HTTP request logger import morgan from 'morgan'; // packages pour pouvoir importer depuis des fichiers de config import path from 'path'; -import {ldapConfig, credentialsLdapConfig} from './ldap/config'; - +// config des paramètres de connexion au LDAP +import { ldapConfig, credentialsLdapConfig } from './ldap/config'; const { dn, passwd } = credentialsLdapConfig; -// "The app object conventionally denotes the Express application" -// see https://expressjs.com/en/4x/api.html#app -const app = express(); - -// Parse incoming HTTP request bodies, available under the req.body property. cf www.npmjs.com/package/body-parser +// app: denotes the Express application +const app = express(); +// parse incoming HTTP request bodies, available under the req.body property app.use(bodyParser.json()); //parses bodies of media type "application/json" app.use(bodyParser.urlencoded({ //parses bodies of media type "application/x-www-form-urlencoded" - extended: true //use qs library (quoi que ca veuille dire o.O) + extended: true //use qs library (see https://www.npmjs.com/package/body-parser#bodyparserurlencodedoptions) })); -//parses Cookie header and populate req.cookies with an object keyed by the cookie names. was necessary for express-session before its v1.5.0. on peut probablement l'enlever desormais. +// parse Cookie header and populate req.cookies with an object keyed by the cookie names app.use(cookieParser()); - -// cache le fait que l'application tourne sous Express dans le header HTTP. +// ne *pas* inclure de header HTTP publicisant que l'application tourne sous Express app.disable('x-powered-by'); +// setup morgan (HTTP request logger middleware) app.use(morgan('dev')); -app.use(favicon(path.resolve('./', 'assets', 'favicon.ico'))); -// specifies path to static assets. ......je comprends pas ce que c'est. TODO -app.use('/assets', express.static(path.resolve('./', 'assets'))); + +/** + * @desc SETUP DE ADMINVIEW + */ +// setting up view engine for pug, for adminview +console.log("Express app is running at", __dirname); +let viewpath = path.resolve(__dirname, 'views'); +app.set('views', viewpath); +app.set('view engine', 'pug'); /** * @desc AUTHENTIFICATION POUR LES REQUETES POSSEDANT UN COOKIE ET PROVENANT D'UN UTILISATEUR DEJA AUTHENTIFIE @@ -74,11 +74,6 @@ app.use('/assets', express.static(path.resolve('./', 'assets'))); * it is important to configure this right!!! please check out https://www.npmjs.com/package/express-session * and make sure you understand the way session is stored. (en vrai c'est vraiment important...) */ -app.use(session({ - secret: ldapConfig.sessionSecret, - resave: true, - saveUninitialized: false, -})); app.use(passport.initialize()); @@ -97,14 +92,6 @@ app.use(passport.session(), (req, res, next)=>{ // connect-flash is middleware for flashing messages, used in adminview app.use(flash()); -/** - * @desc SETUP DE ADMINVIEW - */ -// setting up view engine for pug, for adminview -console.log("Running at", __dirname); -let viewpath = path.resolve(__dirname, 'views'); -app.set('views', viewpath); -app.set('view engine', 'pug');