Commit 57e02899 authored by Damien's avatar Damien
Browse files

Add oauth for the front

parent 8e0ec185
......@@ -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
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
......@@ -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}))
}
......
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 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>
)
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment