diff --git a/package.json b/package.json
index fe4cacd..2ee4492 100644
--- a/package.json
+++ b/package.json
@@ -67,6 +67,7 @@
"passport-local": "^1.0.0",
"rimraf": "^3.0.2",
"sass": "^1.49.7",
+ "svg-captcha": "^1.4.0",
"uuid": "^8.3.2",
"vue": "^3.2.31"
},
diff --git a/src/middleware/Albums.js b/src/middleware/Albums.js
index 5363c2c..3ca4558 100644
--- a/src/middleware/Albums.js
+++ b/src/middleware/Albums.js
@@ -197,7 +197,11 @@ class Albums extends Pages {
});
if (!album) {
- throw new ErrorEvent(404, "Impossible de trouver cet album");
+ throw new ErrorEvent(
+ 404,
+ "Mise à jour",
+ "Impossible de trouver cet album"
+ );
}
const values = await getAlbumDetails(album.discogsId);
@@ -221,7 +225,11 @@ class Albums extends Pages {
return true;
}
- throw new ErrorEvent(404, "Impossible de trouver cet album");
+ throw new ErrorEvent(
+ 404,
+ "Suppression",
+ "Impossible de trouver cet album"
+ );
}
/**
diff --git a/src/routes/api/v1/contact.js b/src/routes/api/v1/contact.js
index f4a3265..4ecce22 100644
--- a/src/routes/api/v1/contact.js
+++ b/src/routes/api/v1/contact.js
@@ -1,5 +1,6 @@
import express from "express";
import nodemailer from "nodemailer";
+import svgCaptcha from "svg-captcha";
import { sendResponse } from "../../../libs/format";
@@ -9,42 +10,68 @@ import ErrorEvent from "../../../libs/error";
// eslint-disable-next-line new-cap
const router = express.Router();
-router.route("/").post(async (req, res, next) => {
- try {
- if (mailMethod === "smtp") {
- const { email, name, message } = req.body;
+router
+ .route("/")
+ .get(async (req, res, next) => {
+ try {
+ const captcha = svgCaptcha.create({
+ size: 4,
+ noise: 2,
+ color: true,
+ });
+ req.session.captcha = captcha.text;
- if (!email || !message) {
- throw new ErrorEvent(
- 406,
- "Le formulaire n'est pas correctement saisi"
- );
+ res.type("svg");
+ return res.status(200).send(captcha.data);
+ } catch (err) {
+ return next(err);
+ }
+ })
+ .post(async (req, res, next) => {
+ try {
+ if (mailMethod === "smtp") {
+ const { email, name, message, captcha } = req.body;
+
+ if (!captcha || captcha !== req.session.captcha) {
+ throw new ErrorEvent(
+ 406,
+ "Captcha",
+ "Le captcha n'est pas valide"
+ );
+ }
+
+ if (!email || !message) {
+ throw new ErrorEvent(
+ 406,
+ "Erreur de saisie",
+ "Le formulaire n'est pas correctement saisi"
+ );
+ }
+
+ const transporter = nodemailer.createTransport(smtpConfig);
+
+ const text = `Bonjour,
+ Vous venez de recevoir un nouveau message de ${name} (${email}) :
+
+ ${message}
+ `;
+
+ const data = await transporter.sendMail({
+ from: smtpConfig.auth.user,
+ to: mailTo,
+ subject: `${siteName} : Nouveau message`,
+ text,
+ });
+
+ const { messageId, response } = data;
+
+ return sendResponse(req, res, { messageId, response });
}
- const transporter = nodemailer.createTransport(smtpConfig);
-
- const text = `Bonjour,
-Vous venez de recevoir un nouveau message de ${name} (${email}) :
-
-${message}
- `;
-
- const data = await transporter.sendMail({
- from: smtpConfig.auth.user,
- to: mailTo,
- subject: `${siteName} : Nouveau message`,
- text,
- });
-
- const { messageId, response } = data;
-
- return sendResponse(req, res, { messageId, response });
+ throw new ErrorEvent(500, "Routeur", "Méthode non configurée");
+ } catch (err) {
+ return next(err);
}
-
- throw new ErrorEvent(500, "Méthode non configurée");
- } catch (err) {
- return next(err);
- }
-});
+ });
export default router;
diff --git a/views/pages/nous-contacter.ejs b/views/pages/nous-contacter.ejs
index 223f2a7..276b6f4 100644
--- a/views/pages/nous-contacter.ejs
+++ b/views/pages/nous-contacter.ejs
@@ -17,6 +17,14 @@
+ <% if (config.mailMethod !== 'formspree' ) { %>
+
+