diff --git a/Doc/commande.txt b/Doc/commande.txt index 5e46291..7c54e87 100644 --- a/Doc/commande.txt +++ b/Doc/commande.txt @@ -6,6 +6,7 @@ npm install --save mysql npm install --save express npm install -g nodemon npm install --save-dev nodemon +npm install crypto-js npm install --save axios diff --git a/server-api/api.js b/server-api/api.js index 2d08db5..be7d761 100644 --- a/server-api/api.js +++ b/server-api/api.js @@ -3,6 +3,22 @@ const express = require('express'); const cors=require("cors"); const bodyparser = require('body-parser'); + +const nodemailer = require('nodemailer'); +const CryptoJS = require('crypto-js'); + + +// Créer un transporteur de mail +let transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 587, +// secure: true, // utiliser SSL + auth: { + user: 'stageodinnonoffi@gmail.com', + pass: 'pjjlofjkpnfpwkiz' + } +}); + const db = mysql.createConnection({ host: 'lfbn-cle-1-568-58.w92-157.abo.wanadoo.fr', user: 'crmuser', @@ -257,13 +273,37 @@ app.post('/User/Add', (req, res) => { let form = req.body; console.log(form); + + let rand_pass = ""; + const carac="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&*#-+@!$%?/()[]{}0123456789&*#-+@!$%?/()[]{}"; + for(var i=0;i<10;i++) + { + rand_pass += carac[Math.floor(Math.random()*carac.length)]; + } - const sql = `INSERT INTO users(lastname, firstname, idrole, login, password, phone, mail) VALUES ('${form.lastname}', '${form.firstname}', '${form.idrole}', '${form.login}', '${form.password}', '${form.phone}', '${form.mail}')`; + const sql = `INSERT INTO users(lastname, firstname, idrole, login, password, phone, mail) VALUES ('${form.lastname}', '${form.firstname}', '${form.idrole}', '${form.login}', '${CryptoJS.SHA256(rand_pass).toString(CryptoJS.enc.Hex)}', '${form.phone}', '${form.mail}')`; db.query(sql , (err, result) => { if (err) throw err; console.log(result); res.send('Post added...' + result.insertId); }); + + let mailOptions = { + from: '"JTT CRM" ', + to: form.mail, + subject: "Connexion a JTTCRM", + text: "Voici ton mot de passe : " + rand_pass, + }; + + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + console.log(error); + } else { + console.log('Email sent with mdp: ' + info.response); + } + }); + + }); app.put('/User/Update/:id', (req, res) => { @@ -402,4 +442,27 @@ app.get('/Event/:iduser', (req, res) => { console.log(result); res.send(result); }); +}); + +app.post('/Mail/Avertir', (req, res) => { + // Définir les options du mail + let form = req.body; + console.log(form) + let mailOptions = { + from: '"JTT CRM" ', + to: 'Jeremy.DUCOURTHIALE@etu.uca.fr', + subject: form.objet, + text: form.raison + }; + + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + console.log(error); + res.send(false) + } else { + console.log('Email sent: ' + info.response); + res.send(true) + } + }); + }); \ No newline at end of file diff --git a/server-api/package-lock.json b/server-api/package-lock.json index e6a9738..8cddeac 100644 --- a/server-api/package-lock.json +++ b/server-api/package-lock.json @@ -18,6 +18,7 @@ "corps": "^0.1.0", "cors": "^2.8.5", "crypto-js": "^4.1.1", + "crypto-js": "^4.1.1", "express": "^4.18.2", "fullcalendar": "^5.11.3", "googleapis": "^105.0.0", @@ -1408,6 +1409,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, + "node_modules/cryptojs": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/cryptojs/-/cryptojs-2.5.3.tgz", + "integrity": "sha512-+rdPl1UCxE8s3R94NNn+zMKOiI4MJ7dyh3X0c5uBL3btDr4zQ6acd7f9mY7Wb5MrccZEi2Rrha3OEtLcc5XXog==", + "engines": { + "node": "*" + } + }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -3987,6 +3996,11 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, + "cryptojs": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/cryptojs/-/cryptojs-2.5.3.tgz", + "integrity": "sha512-+rdPl1UCxE8s3R94NNn+zMKOiI4MJ7dyh3X0c5uBL3btDr4zQ6acd7f9mY7Wb5MrccZEi2Rrha3OEtLcc5XXog==" + }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", diff --git a/src/App.js b/src/App.js index d84a7b5..f47d42c 100644 --- a/src/App.js +++ b/src/App.js @@ -13,6 +13,7 @@ import Calendrier from './pages/Calendrier'; import Repertoire from './pages/Repertoire'; import Parametres from './pages/Parametres'; import Chargement from './pages/Chargement'; +import MailPourAdmin from './pages/MailPourAdmin'; import AddContact from './components/Contact/AddContact' import { Component } from 'fullcalendar'; import RestartPassword from './pages/RestartPassword'; @@ -41,6 +42,7 @@ const App = () => { } /> } /> } /> + } /> } /> diff --git a/src/pages/Admin_create.js b/src/pages/Admin_create.js index 39f0bec..0bb2e76 100644 --- a/src/pages/Admin_create.js +++ b/src/pages/Admin_create.js @@ -44,7 +44,6 @@ function Admin_create() { } else { setLoginError(false); - values.password = CryptoJS.SHA256(values.password).toString(CryptoJS.enc.Hex); api.post('/User/Add', values).then (function(response) { console.log(response.data); @@ -71,7 +70,6 @@ function Admin_create() {

Email :

Rôle :

Identifiant :

-

Mot de passe :

@@ -90,7 +88,6 @@ function Admin_create() { ))} -

{loginError === true?"L'identifiant existe déja":''}

diff --git a/src/pages/MailPourAdmin.js b/src/pages/MailPourAdmin.js new file mode 100644 index 0000000..c44542e --- /dev/null +++ b/src/pages/MailPourAdmin.js @@ -0,0 +1,99 @@ +import React, {useState} from 'react'; +import NavigationDashboard from '../components/NavigationDashboard'; +import axios from 'axios'; +import Session from 'react-session-api'; +import { useNavigate } from 'react-router-dom'; + +const api = axios.create({ + baseURL: 'http://localhost:8080' + }) + +const MailPourAdmin = () => { + const [mailError, setMailError] = useState(false); + const [objetError, setObjetError] = useState(false); + const [descriptionError, setDescriptionError] = useState(false); + const [theme, setTheme] = useState("light"); + const navigate = useNavigate(); + + if (localStorage.getItem('theme') && localStorage.getItem("theme") !== '' && localStorage.getItem("theme") !== theme) { + setTheme(localStorage.getItem("theme")) + } + + function sendMail(e) { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const values = Object.fromEntries(formData.entries()); + + console.log(values); + if (values.objet === '') { + setObjetError(true) + } else { + setObjetError(false) + } + if (values.raison === '') { + setDescriptionError(true) + } else { + setDescriptionError(false) + } + if (values.objet === '' || values.raison === '') { + return + } + values.objet = values.objet + "[user id : " + Session.get("idUser") + "]" + + + api.post('/Mail/Avertir',values).then (function(response) { + if (response.data) { + navigate('/dashboard') + } + else { + setMailError(true) + // e.reset(); + } + }); + + + } + + return ( + + + + +
+
+

Avertir un administrateur

+
+ +
+
+
+ +
+
+
+

Objet

+ +
+
+

Raison

+