diff --git a/backend/routes/routesToucan.js b/backend/routes/routesToucan.js index cb39113c872ccdec7e84b4191ed6b37ba15a4664..9e9905741f6f72f9f98d3a162b01ca49d34facc0 100644 --- a/backend/routes/routesToucan.js +++ b/backend/routes/routesToucan.js @@ -5,6 +5,7 @@ var { celebrate } = require("celebrate"); var { newToucan, validId, validLimit } = require("../utils/schema"); var env = require("../.env"); +var isLogged = require("../utils/authentification"); var upload = require("../utils/fileSaver"); var Toucan = require("../models/modelToucan"); var router = express.Router(); @@ -19,13 +20,14 @@ router.route("/toucans") if (err) { res.send(err); } else { - res/*.header("Access-Control-Allow-Origin","*")*/.json(toucans); + res.json(toucans); } }); }) // Une route pour créer un toucan .post( + isLogged, upload.fields([{name:"toucan", maxCount:1 }, {name:"cover", maxCount:1 }]), celebrate({body:newToucan}), function(req,res) { @@ -83,38 +85,41 @@ router.route("/img/:id") }); // Supprime le toucan avec l'id donné router.route("/delete/:id") - .post(celebrate({params: validId}), function(req,res) { - Toucan.deleteOne({_id:req.params.id}, - function(err) { - if (err) { - res.send(500).send(err); - } else { // Si on a supprimée l'entrée, on supprime le pdf - var pdfPath = path.format({ - dir: env.savedExtensions[1].path, - name: req.params.id, - ext: ".pdf" - }); - fs.unlink(pdfPath, (err) => { - if (err) { - res.status(500).send(err); - } else { // Si on a supprimé le pdf on supprime l'image - var imgPath = path.join(env.savedExtensions[0].path,"/",req.params.id); - env.savedExtensions[0].extensions.forEach(ext => { - if (fs.existsSync(imgPath+ext)){ - imgPath = imgPath+ext; - fs.unlink(imgPath, (err) => { - if (err) { - res.status(500).send(err); - } else { - res.send("Toucan supprimé"); - } - }); - } - }); - } - }); - } - }); - }); + .post( + isLogged, + celebrate({params: validId}), + function(req,res) { + Toucan.deleteOne({_id:req.params.id}, + function(err) { + if (err) { + res.send(500).send(err); + } else { // Si on a supprimée l'entrée, on supprime le pdf + var pdfPath = path.format({ + dir: env.savedExtensions[1].path, + name: req.params.id, + ext: ".pdf" + }); + fs.unlink(pdfPath, (err) => { + if (err) { + res.status(500).send(err); + } else { // Si on a supprimé le pdf on supprime l'image + var imgPath = path.join(env.savedExtensions[0].path,"/",req.params.id); + env.savedExtensions[0].extensions.forEach(ext => { + if (fs.existsSync(imgPath+ext)){ + imgPath = imgPath+ext; + fs.unlink(imgPath, (err) => { + if (err) { + res.status(500).send(err); + } else { + res.send("Toucan supprimé"); + } + }); + } + }); + } + }); + } + }); + }); module.exports = router; \ No newline at end of file diff --git a/backend/utils/authentification.js b/backend/utils/authentification.js new file mode 100644 index 0000000000000000000000000000000000000000..a14c845a50ba4d8a971c4eb9f458031122548c35 --- /dev/null +++ b/backend/utils/authentification.js @@ -0,0 +1,25 @@ +var jwt = require("jsonwebtoken"); +var env = require("../.env"); + +/** + * Un middleware qui vérifie que l'utilisateur ayant envoyé + * la requete soit bien authentifié. + */ + +function isLogged(req, res, next) { + const token = req.headers.token; + if (!token) { + res.status(401).end("Vous n'êtes pas authentifié"); + } + try { + if(jwt.verify(token,env.tokenSecret)) { // Si le token n'est pas compromis + next(); + } else { + res.status(400).end("Une erreur s'est produite lors de l'authentification"); + } + } catch (err) { + res.status(400).end("Une erreur s'est produite lors de l'authentification"); + } +} + +module.exports = isLogged; \ No newline at end of file diff --git a/front/src/view/FormToucan.js b/front/src/view/FormToucan.js index 0a22fe808b93a6bbba56b8d7f768df706c696928..3d961a1f4f491d2c39518033c65361a484d5277a 100644 --- a/front/src/view/FormToucan.js +++ b/front/src/view/FormToucan.js @@ -60,27 +60,24 @@ class FormToucan extends Component { form.append("title",title) form.append("toucan",toucan) form.append("cover",cover) - fetch(`${env.backURL}/toucan/toucans`,{ - method: 'POST', - body: form + method: 'POST', + headers:{token: localStorage.getItem("token")}, + body: form }) .then((response) => { if (response.ok) { // Si la réponse est bonne on reload tout simplement window.location.reload() } else { - try { - response.json().then((json)=>{ - if(json.errmsg.split(" ")[0]==="E11000"){ // L'erreur la plus probable - this.setState({responseMessage:"La date sélectionnée existe déjà"}) - } else { - this.setState({responseMessage:json.errmsg}) - } - }); - } catch { - response.text().then(text => this.setState({responseMessage:text})) - - }}; + response.json() + .then((json)=>{ + if(json.errmsg.split(" ")[0]==="E11000"){ // L'erreur la plus probable + this.setState({responseMessage:"La date sélectionnée existe déjà"}) + } else { + this.setState({responseMessage:json.errmsg}) + } + }) + }; } ) .catch((err)=> this.setState({responseMessage:err})) } diff --git a/front/src/view/showToucan/ModalSuppression.js b/front/src/view/showToucan/ModalSuppression.js index 90a27c7373ab679a0fa0b6bd62d42c47b0425d8a..81823ea19462f718c919367d319d0abfaab4af61 100644 --- a/front/src/view/showToucan/ModalSuppression.js +++ b/front/src/view/showToucan/ModalSuppression.js @@ -1,13 +1,23 @@ import React, {Component} from 'react' -import {Modal, Button, Image} from 'semantic-ui-react' +import {Modal, Button, Image,Message} from 'semantic-ui-react' import env from '../../.env' class ModalSupression extends Component { + state = {error:''}; + deleteToucan(id) { fetch(`${env.backURL}/toucan/delete/${id}`,{ - method: "Post" + method: "Post", + headers:{token: localStorage.getItem("token")} + }) + .then((response) => { + if (response.ok) { + window.location.reload() + } else { + response.text() + .then((error) => this.setState({error:error})) + } }) - .then(() => window.location.reload()) .catch(err => console.log(err)) } @@ -24,6 +34,7 @@ class ModalSupression extends Component { <Button positive onClick={()=>this.props.closeModal()}> Laisser le Toucan là où il est</Button> <Button negative onClick={()=>this.deleteToucan(this.props.toucanId)}>Supprimer le Toucan</Button> </Modal.Actions> + {this.state.error && <Message negative content={this.state.error}/>} </Modal> ) }