Skip to content
Snippets Groups Projects
Commit d337e548 authored by HENRIQUES Valentin's avatar HENRIQUES Valentin
Browse files

Création authentification

parent 3b28432a
Branches
No related tags found
No related merge requests found
.env 0 → 100644
import dotenv from 'dotenv';
dotenv.config();
JWT_SECRET=13456789azertyuiopmlkjhgfdsqwxcvbn;
\ No newline at end of file
No preview for this file type
......@@ -19,6 +19,12 @@ import monkeyInsert from './src/routes/modifierRoute/insertMonkey.js';
import speciesInsert from './src/routes/modifierRoute/insertSpecies.js';
import monkeyUpdate from './src/routes/modifierRoute/updateMonkey.js';
import speciesUpdate from './src/routes/modifierRoute/updateSpecies.js';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcrypt';
import authSignup from './src/routes/auth/authSignup.js';
import authLogin from './src/routes/auth/authLogin.js';
import authMiddleware from './src/routes/auth/authMiddleware.js';
async function createDb() {
if(fs.existsSync('./db/database.db') == false){
const db = await open({
......@@ -45,25 +51,6 @@ async function main() {
var DbFactory = new DAODbFactory(db);
DbFactory.createMonkeyDAO();
DbFactory.createSpeciesDAO();
// var allMonkeys=await DbFactory.MonkeyDbDAO.findAll();
// console.log("ALL MONKEYS");
// console.log(allMonkeys);
// var allSpecies=await DbFactory.SpeciesDbDAO.findAll();
// console.log("ALL SPECIES");
// console.log(allSpecies);
// var amonkey= new monkey('test',1);
// await DbFactory.MonkeyDbDAO.insert(amonkey);
// allMonkeys=await DbFactory.MonkeyDbDAO.findAll();
// console.log("ALL MONKEYS 2");
// console.log(allMonkeys);
// var idMonkey=await DbFactory.MonkeyDbDAO.findById(6);
// console.log("ID MONKEY");
// console.log(idMonkey);
// DbFactory.MonkeyDbDAO.delete(amonkey);
// allMonkeys=await DbFactory.MonkeyDbDAO.findAll();
// console.log("ALL MONKEYS 3");
// console.log(allMonkeys);
// DbFactory.MonkeyDbDAO.deleteAll();
const allMonkeys=await DbFactory.MonkeyDbDAO.findAll();
const allSpecies=await DbFactory.SpeciesDbDAO.findAll();
console.log("ALL MONKEYS");
......@@ -76,7 +63,10 @@ const api=express();
const port=3001;
api.use(express.json());
api.use('/hello',helloRoute);
api.use('/auth/signup',authSignup);
api.use('/auth/login',authLogin);
api.use('/hello',authMiddleware,helloRoute);
api.use('/monkey/deleteAll',monkeyDeletteAll);
api.use('/monkey/deleteById',monkeyDeleteById);
api.use('/species/deleteAll',speciesDeleteAll);
......@@ -90,6 +80,7 @@ api.use('/species/insert',speciesInsert);
api.use('/monkey/update',monkeyUpdate);
api.use('/species/update',speciesUpdate);
api.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
......
......@@ -21,6 +21,16 @@ CREATE TABLE monkey (
FOREIGN KEY (speciesId) REFERENCES species(id)
);
CREATE TABLE user (
id INTEGER PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
-- Insertion des données dans la table 'user'
INSERT INTO user (id, username, password) VALUES
(1, 'admin', 'admin');
-- Insertion des données dans la table 'species'
INSERT INTO species (id, name, habitat, height, weight, diet) VALUES
(1, 'Chimpanzee', 'Tropical Rainforest', 1.7, 70, 'Omnivore'),
......
This diff is collapsed.
......@@ -11,7 +11,12 @@
"author": "V. Henriques",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.1.1",
"better-sqlite3": "^9.2.2",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"jose": "^5.1.3",
"jsonwebtoken": "^9.0.2",
"sqlite": "^5.1.1",
"sqlite3": "^5.1.6"
},
......
export default class User {
constructor(username, password) {
this.username = username;
this.password = password;
}
}
\ No newline at end of file
import express from 'express';
import bcrypt, { compare } from 'bcrypt';
import jwt from 'jsonwebtoken';
import sqlite from 'better-sqlite3';
import dotenv from 'dotenv';
dotenv.config();
const router = express.Router();
router.post('/', async (req, res) => {
try {
const { username, password } = req.body;
// Ouvrez la base de données
const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe
let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
if (!user) {
return res.status(400).json({ msg: 'Cet utilisateur n\'existe pas' });
}
// Vérifiez le mot de passe
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(400).json({ msg: 'Mot de passe incorrect' });
}
// Créez et renvoyez un token JWT
const payload = {
user: {
id: user.id
}
};
jwt.sign(
payload,
process.env.JWT_SECRET, // Assurez-vous d'avoir défini cette variable d'environnement
{ expiresIn: 3600 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Erreur du serveur');
}
});
export default router;
import jwt from 'jsonwebtoken';
import sqlite from 'better-sqlite3';
const authMiddleware = (req, res, next) => {
// Récupérez le token du header de la requête
const token = req.header('x-auth-token');
// Vérifiez si le token n'existe pas
if (!token) {
return res.status(401).json({ msg: 'Aucun token, autorisation refusée' });
}
// Vérifiez le token
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
// Ouvrez la base de données
const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe
let user = db.prepare('SELECT * FROM user WHERE id = ?').get(decoded.user.id);
if (!user) {
return res.status(401).json({ msg: 'Token non valide' });
}
req.user = decoded.user;
next();
} catch (err) {
res.status(401).json({ msg: 'Token non valide' });
}
};
export default authMiddleware;
import express from 'express';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import sqlite from 'better-sqlite3';
import dotenv from 'dotenv';
dotenv.config();
const router = express.Router();
router.post('/', async (req, res) => {
try {
const { username, password } = req.body;
// Ouvrez la base de données
const db = new sqlite('./db/database.db');
// Vérifiez si l'utilisateur existe déjà
let user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
if (user) {
return res.status(400).json({ msg: 'Cet utilisateur existe déjà' });
}
// Hachez le mot de passe
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
// Créez un nouvel utilisateur
db.prepare('INSERT INTO user (username, password) VALUES (?, ?)').run(username, hashedPassword);
// Récupérez l'utilisateur de la base de données
user = db.prepare('SELECT * FROM user WHERE username = ?').get(username);
// Créez et renvoyez un token JWT
const payload = {
user: {
id: user.id
}
};
jwt.sign(
payload,
process.env.JWT_SECRET, // Assurez-vous d'avoir défini cette variable d'environnement
{ expiresIn: 3600 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Erreur du serveur');
}
});
export default router;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment