diff --git a/README.md b/README.md index dfc5bb9..bfc29e6 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,9 @@ Vous pouvez, si vous le souhaitez héberger l'application sur votre propre serve ### Prérequis -Il existe 2 méthodes d'installation, soit via docker soit en mode standalone. Peu importe la méthode il vous faudra un compte sur [https://formspree.io/](https://formspree.io/) afin d'avoir une page nous-contacter fonctionnelle. +Il existe 2 méthodes d'installation, soit via docker soit en mode standalone. + +Peu importe la méthode il vous faudra un compte sur [https://formspree.io/](https://formspree.io/) afin d'avoir une page nous-contacter fonctionnelle ou configurer le SMTP tel que défini dans la section [variables d'environnements](#env-file). Pour la méthode docker il ne vous faudra rien de plus que `docker` et `docker-compose`. @@ -227,6 +229,13 @@ S3_BUCKET # Nom du bucket (musictopus par défaut, à changer impérativement si JOBS_HEADER_KEY # Nom du header utilisé pour l'identification des tâches cron (musictopus par défaut) JOBS_HEADER_VALUE # Valeur de la clé (ooYee9xok7eigo2shiePohyoGh1eepew par défaut) REGISTRATION_OPEN # true/false en fonction de si vous souhaitez activer ou non l'inscription à votre instance (true par défaut) +MAIL_METHOD # permet de définir la façon dont les mails de la page contact sont envoyés (formspree ou smtp) +MAIL_HOST # Adresse du server mail (dams le cas ou MAIL_METHOD est défini sur smtp) +MAIL_PORT # Port d'écoute du serveur smtp (dams le cas ou MAIL_METHOD est défini sur smtp) +MAIL_USER # Adresse mail du compte permettant d'envoyer les mails (dams le cas ou MAIL_METHOD est défini sur smtp) +MAIL_PASSWORD # Mot de passe du compte email (dams le cas ou MAIL_METHOD est défini sur smtp) +MAIL_TO # Adresse mail du contact qui recevra les messages de la page "nous contacter" (dams le cas ou MAIL_METHOD est défini sur smtp) + ``` ## Contributeurs diff --git a/docker-compose.yml.dev b/docker-compose.yml.dev index ca86d9e..b85397e 100644 --- a/docker-compose.yml.dev +++ b/docker-compose.yml.dev @@ -37,6 +37,12 @@ services: JOBS_HEADER_KEY: ${JOBS_HEADER_KEY} JOBS_HEADER_VALUE: ${JOBS_HEADER_VALUE} REGISTRATION_OPEN: ${REGISTRATION_OPEN} + MAIL_METHOD: ${MAIL_METHOD} + MAIL_HOST: ${MAIL_HOST} + MAIL_PORT: ${MAIL_PORT} + MAIL_USER: ${MAIL_USER} + MAIL_PASSWORD: ${MAIL_PASSWORD} + MAIL_TO: ${MAIL_TO} networks: - musictopus musictopus-db: diff --git a/package.json b/package.json index 49c965d..fe4cacd 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "knacss": "^8.0.4", "mongoose": "^6.2.1", "mongoose-unique-validator": "^3.0.0", + "nodemailer": "^6.7.8", "npm-run-all": "^4.1.5", "passport": "^0.5.2", "passport-custom": "^1.1.1", diff --git a/src/app.js b/src/app.js index 85650e8..7c40a27 100644 --- a/src/app.js +++ b/src/app.js @@ -23,6 +23,7 @@ import importJobsRouter from "./routes/jobs"; import importAlbumRouterApiV1 from "./routes/api/v1/albums"; import importSearchRouterApiV1 from "./routes/api/v1/search"; import importMeRouterApiV1 from "./routes/api/v1/me"; +import importContactRouterApiV1 from "./routes/api/v1/contact"; passportConfig(passport); @@ -91,6 +92,7 @@ app.use("/jobs", importJobsRouter); app.use("/api/v1/albums", importAlbumRouterApiV1); app.use("/api/v1/search", importSearchRouterApiV1); app.use("/api/v1/me", importMeRouterApiV1); +app.use("/api/v1/contact", importContactRouterApiV1); // Handle 404 app.use((req, res) => { diff --git a/src/config/index.js b/src/config/index.js index 7906240..fa02df5 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -19,4 +19,14 @@ module.exports = { process.env.JOBS_HEADER_VALUE || "ooYee9xok7eigo2shiePohyoGh1eepew", registrationOpen: (process.env.REGISTRATION_OPEN || "true").toLowerCase() === "true", + mailMethod: process.env.MAIL_METHOD || "formspree", + smtpConfig: { + host: process.env.MAIL_HOST, + port: process.env.MAIL_PORT, + auth: { + user: process.env.MAIL_USER, + pass: process.env.MAIL_PASSWORD, + }, + }, + mailTo: process.env.MAIL_TO, }; diff --git a/src/routes/api/v1/contact.js b/src/routes/api/v1/contact.js new file mode 100644 index 0000000..f4a3265 --- /dev/null +++ b/src/routes/api/v1/contact.js @@ -0,0 +1,50 @@ +import express from "express"; +import nodemailer from "nodemailer"; + +import { sendResponse } from "../../../libs/format"; + +import { mailMethod, smtpConfig, mailTo, siteName } from "../../../config"; +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; + + if (!email || !message) { + throw new ErrorEvent( + 406, + "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 }); + } + + throw new ErrorEvent(500, "Méthode non configurée"); + } catch (err) { + return next(err); + } +}); + +export default router; diff --git a/views/pages/collection.ejs b/views/pages/collection.ejs index d7f4114..a558cd7 100644 --- a/views/pages/collection.ejs +++ b/views/pages/collection.ejs @@ -185,7 +185,6 @@ const entries = urlParams.entries(); for(const entry of entries) { - console.log(`${entry[0]}: ${entry[1]}`); switch(entry[0]) { case 'artists_sort': this.artist = entry[1]; diff --git a/views/pages/mon-compte/ma-collection/index.ejs b/views/pages/mon-compte/ma-collection/index.ejs index b54d728..9ee59fc 100644 --- a/views/pages/mon-compte/ma-collection/index.ejs +++ b/views/pages/mon-compte/ma-collection/index.ejs @@ -239,7 +239,6 @@ const entries = urlParams.entries(); for(const entry of entries) { - console.log(`${entry[0]}: ${entry[1]}`); switch(entry[0]) { case 'artists_sort': this.artist = entry[1]; diff --git a/views/pages/nous-contacter.ejs b/views/pages/nous-contacter.ejs index d35455e..223f2a7 100644 --- a/views/pages/nous-contacter.ejs +++ b/views/pages/nous-contacter.ejs @@ -1,22 +1,70 @@ -
+

Nous contacter

-
+ id="contact" method="POST" action="https://formspree.io/f/<%= config.formspreeId %>" <% } %>>
- +
- +
- +
- +
-
\ No newline at end of file +
+ +<% if (config.mailMethod === 'smtp' ) { %> + +<% } %> \ No newline at end of file