diff --git a/app/app.js b/app/app.js index ed0a67edabb7d8b6445f08785c8c7c6c113c6209..9cda4b0dff4cf192813fa90e6c671954c8c49619 100644 --- a/app/app.js +++ b/app/app.js @@ -6,13 +6,13 @@ const http = require('http'); const path = require('path'); const bodyParser = require('body-parser'); -const { generateSimulatedHash } = require('./utils'); +const {generateSimulatedHash, sendHashToSlave} = require('./utils'); const app = express(); app.use(express.json()); app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.urlencoded({extended: true})); // le client Redis const client = redis.createClient({ @@ -37,15 +37,26 @@ connectRedis(); const server = http.createServer(app); // Création du serveur WebSocket en attachant au serveur HTTP -const wss = new WebSocket.Server({ server }); +const wss = new WebSocket.Server({server}); // Gestionnaire d'ouverture de la connexion WebSocket wss.on('connection', (ws) => { console.log('Connexion WebSocket avec un client établie'); // Gestion des messages WebSocket - ws.on('message', (message) => { - console.log('Message reçu du client:', message); + ws.on('message', async (message) => { + console.log('Message reçu du client:', message.toString('utf-8')); + const decodedMessage = message.toString('utf-8'); + + // Vérifiez si le message commence par "found " + if (decodedMessage.startsWith('found ')) { + // Extrait le hash MD5 de la partie "found " du message + const md5Hash = decodedMessage.substring(6, 38); + const text = decodedMessage.substring(39); + + // Stocke le hash MD5 dans Redis + await client.set(md5Hash, text); + } }); }); @@ -53,7 +64,7 @@ app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'index.html')); }); -app.post('/generateHash', (req, res) => { +app.post('/generateHash', async (req, res) => { const difficulty = req.body.complexity; if (!difficulty) { @@ -61,11 +72,17 @@ app.post('/generateHash', (req, res) => { } const hash = generateSimulatedHash(difficulty); - wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - client.send(hash); - } - }); + const searchToRedis = await client.get(hash); + + if (searchToRedis === null) { + wss.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + sendHashToSlave(hash, client); + } + }); + } else { + console.log('Le mot de passe a été trouvé dans la base de données Redis' , searchToRedis); + } res.redirect('/'); }); @@ -80,41 +97,25 @@ app.post('/generateHashOfPassword', async (req, res) => { const hash = crypto.createHash('md5').update(password).digest('hex'); - // on stocke le hash dans Redis avec la chaîne originale comme clé - // await client.set(text, hash); - - // Envoi du texte au service esclave via WebSocket - wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - client.send(hash); - } - }); + const searchToRedis = await client.get(hash); + + if (searchToRedis === null) { + // Envoi du texte au service esclave via WebSocket + wss.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + sendHashToSlave(hash, client); + } + }); + }else { + console.log('Le mot de passe a été trouvé dans la base de données Redis', searchToRedis); + } res.redirect('/'); } catch (err) { - res.status(500).json({ error: 'Erreur du serveur' }); + res.status(500).json({error: 'Erreur du serveur'}); } }); -app.get('/getHash/:text', async (req, res) => { - try { - const text = req.params.text; - - if (!text) { - return res.status(400).json({error: 'Missing data in the request.'}); - } - - //récupérer le hash de Redis - const hash = await client.get(text); - if (hash === null) { - return res.status(404).json({ error: 'Texte non trouvé' }); - } - - res.json({ text: text, hash: hash }); - } catch (err) { - res.status(500).json({ error: 'Erreur du serveur' }); - } -}); const PORT = 3000; server.listen(PORT, () => { diff --git a/app/utils.js b/app/utils.js index caf77b5d85d775cb964339e122e76ff4d09d7339..64808da7ac5ac89203d76c7e08c339a05d6c5bba 100644 --- a/app/utils.js +++ b/app/utils.js @@ -1,20 +1,26 @@ const crypto = require('crypto'); + function generateSimulatedHash(difficulty) { let data; if (difficulty === 'gentil') { - data = crypto.randomBytes(16).toString('hex'); // Mode gentil (faible complexité) + data = crypto.randomBytes(1).toString('hex'); // Mode gentil (faible complexité) } else if (difficulty === 'normal') { - data = crypto.randomBytes(500).toString('hex'); // Mode normal (moyenne complexité) + data = crypto.randomBytes(3).toString('hex'); // Mode normal (moyenne complexité) } else if (difficulty === 'agressif') { - data = crypto.randomBytes(1000).toString('hex'); // Mode agressif (haute complexité) + data = crypto.randomBytes(5).toString('hex'); // Mode agressif (haute complexité) } - console.log(data); + console.log(`Data généré: ${data}`); const hash = crypto.createHash('md5').update(data).digest('hex'); return hash; } +function sendHashToSlave(hash, client) { + client.send("search " + hash + " a 9999999999"); +} + module.exports = { generateSimulatedHash, + sendHashToSlave }; \ No newline at end of file