From 308556c7c95bb6211aceddaf90dfd149512828d7 Mon Sep 17 00:00:00 2001 From: Guillaume Grossetie Date: Wed, 17 Mar 2021 09:25:23 +0100 Subject: [PATCH] Ajout d'une page /error et ajout de logs (debug) --- front/gatsby/src/components/Error.jsx | 21 +++++++++++++ front/gatsby/src/index.jsx | 4 +++ graphql/app.js | 44 ++++++++++++++++++--------- 3 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 front/gatsby/src/components/Error.jsx diff --git a/front/gatsby/src/components/Error.jsx b/front/gatsby/src/components/Error.jsx new file mode 100644 index 000000000..96a6e14fc --- /dev/null +++ b/front/gatsby/src/components/Error.jsx @@ -0,0 +1,21 @@ +import React from 'react' +import { useLocation } from 'react-router-dom' +import App from '../layouts/App' + +import styles from '../components/Write/write.module.scss' + +export default () => { + const urlSearchParams = new URLSearchParams(window.location.search) + const message = urlSearchParams.get('message') || '' + return ( + +
+
+

Error

+ +

Something wrong happened: {message}.

+
+
+
+ ) +} diff --git a/front/gatsby/src/index.jsx b/front/gatsby/src/index.jsx index 3205a5883..39be58c6f 100644 --- a/front/gatsby/src/index.jsx +++ b/front/gatsby/src/index.jsx @@ -12,6 +12,7 @@ import { getApplicationConfig } from './helpers/applicationConfig' import Register from './components/Register' import PrivateRoute from './components/PrivateRoute' import NotFound from './components/404' +import Error from './components/Error' import Button from './components/Button' import Field from './components/Field' import { Check, Copy, Search } from 'react-feather' @@ -131,6 +132,9 @@ render( + + + diff --git a/graphql/app.js b/graphql/app.js index 4f7f1696d..1e6822139 100644 --- a/graphql/app.js +++ b/graphql/app.js @@ -3,7 +3,7 @@ const jwt = require('jsonwebtoken') const express = require('express') const bodyParser = require('body-parser') const cookieParser = require('cookie-parser') -const {graphqlHTTP} = require('express-graphql') +const { graphqlHTTP } = require('express-graphql') const mongoose = require('mongoose') const cors = require('cors') @@ -64,7 +64,6 @@ if (sameSiteCookies === 'none') { console.warn('Cookies are configured with `sameSite: none`.') } - const corsOptions = { optionsSuccessStatus: 200, credentials: true, @@ -84,7 +83,7 @@ passport.use('zotero', new OAuthStrategy({ callbackURL: zoteroAuthCallbackUrl, sessionKey: 'oauth_token' }, - function(zoteroToken, tokenSecret, profile, done) { + function (zoteroToken, tokenSecret, profile, done) { return done(null, { zoteroToken }) } )) @@ -105,7 +104,7 @@ passport.use('oidc', new OidcStrategy({ passport.use(new LocalStrategy({ session: false }, function (username, password, done) { - graphQlResolvers.verifCreds({username, password}) + graphQlResolvers.verifCreds({ username, password }) .then(userPassword => done(null, userPassword)) .catch(e => done(e, false)) } @@ -145,8 +144,7 @@ app.use(function (req, res, next) { try { req.user = jwt.verify(jwtToken, jwtSecret) req.isAuth = true - } - catch (error) { + } catch (error) { return next(error) } } @@ -170,8 +168,7 @@ app.get( if (req.user) { res.redirect(req.headers.referer) } else { - console.log(`GET /login/openid - request.headers: ${req.headers}`) - console.log(`set origin on session: ${req.headers.referer}`) + console.log(`GET /login/openid - req.headers.referer: ${req.headers.referer}`) req.session.origin = req.headers.referer next() } @@ -221,8 +218,7 @@ app.use('/authorization-code/zotero/callback', 'Content-Type': 'text/html' }) res.end(``) - } - catch (error) { + } catch (error) { console.error('error', error) res.statusCode = 401 res.redirect(req.session.origin) @@ -234,8 +230,25 @@ app.use('/authorization-code/zotero/callback', }) app.use('/authorization-code/callback', - passport.authenticate('oidc', { failureRedirect: '/error' }), async (req, res) => { - console.log(`/authorization-code/zotero/callback - origin in session? ${req.session.origin}`) + (req, res, next) => { + return passport.authenticate('oidc', { + failureRedirect: '/error', + failureFlash: true + }, (err, user, info) => { + console.log('/authorization-code/callback - callback', err, user, info) + if (!user) { + console.error('Unable to authenticate', info.message) + res.redirect(`/error?message=${info.message}`) + } else if (err) { + console.error('error', err) + res.redirect(`/error?message=${info.message}`) + } else { + next() + } + })(req, res, next) + }, + async (req, res) => { + console.log(`/authorization-code/callback - req.session.origin: ${req.session.origin}`) const { email, given_name, family_name, name: displayName } = req.user._json let user = await User.findOne({ email }) @@ -272,7 +285,8 @@ app.use('/authorization-code/callback', }) res.redirect(req.session.origin) - }) + } +) app.get('/logout', (req, res) => { req.logout() @@ -305,9 +319,9 @@ app.post('/login', }) res.statusCode = 200 - res.json({password: userPassword, users: userPassword.users, token}) + res.json({ password: userPassword, users: userPassword.users, token }) }, - function onFailure (error, req, res, _) { + function onFailure(error, req, res, _) { console.error('error', error) res.statusCode = 401 res.json({ error })