actually make it work

This commit is contained in:
yigid balaban 2024-08-07 10:10:32 +03:00
parent 571f2a88cd
commit 5e58349d0b
Signed by: fyb
GPG Key ID: E21FEB2C244CB7EB
4 changed files with 21 additions and 4 deletions

View File

@ -2,5 +2,5 @@ EMAIL="user@example.org"
EMAIL_PASSWORD="..."
EMAIL_HOST="smtp.example.org"
EMAIL_PORT=587
ENVIRONMENT="TEST"
ENVIRONMENT="TEST" # expects: TEST, TEST-MAIL, PROD
ALLOWED_IPS="1.1.1.1"

View File

@ -4,7 +4,7 @@ const rateLimit = require("express-rate-limit");
const nodemailer = require("nodemailer");
const morgan = require("morgan");
const app = express();
require("dotenv").config();
const ENV = process.env.ENVIRONMENT || "TEST";
const SENDER_EMAIL = process.env.EMAIL;
const SENDER_PASS = process.env.EMAIL_PASSWORD;
@ -13,6 +13,7 @@ const SERV_PORT = process.env.EMAIL_PORT;
const allowedIPs = process.env.ALLOWED_IPS.split(",");
const app = express();
app.enable("trust proxy");
app.disable("x-powered-by");
app.use(express.json());
@ -32,6 +33,8 @@ app.use("/", rootLimiter);
// Middleware function to check IP address
const ipFilter = (req, res, next) => {
if (ENV === "TEST" || ENV === "TEST-MAIL") next();
const clientIp = req.ip;
if (allowedIPs.includes(clientIp)) {
@ -55,6 +58,7 @@ const transporter = nodemailer.createTransport({
const mailRouteLimiter = rateLimit({
windowMs: 1 * 60 * 1000,
max: 1,
message: "Please wait at least 1 minute before sending another request!",
});
app.post("/api/mail", ipFilter, mailRouteLimiter, (req, res) => {
@ -62,7 +66,7 @@ app.post("/api/mail", ipFilter, mailRouteLimiter, (req, res) => {
const mail = {
from: `"Arbeit Mail Hizmeti" <${SENDER_EMAIL}>`,
recipient,
to: recipient,
replyTo: "noreply@arbeit.studio",
subject,
text,
@ -80,7 +84,10 @@ app.post("/api/mail", ipFilter, mailRouteLimiter, (req, res) => {
.status(500)
.json({ success: false, message: "Mail could not be sent!" });
}
} else res.status(200).json(mail);
} else {
console.log(mail);
if (ENV === "TEST-MAIL") transporter.sendMail(mail);
}
});
app.get("/api/hello", (req, res) => {

View File

@ -1,5 +1,6 @@
{
"dependencies": {
"dotenv": "^16.4.5",
"express": "^4.19.2",
"express-rate-limit": "^7.4.0",
"helmet": "^7.1.0",

9
pnpm-lock.yaml generated
View File

@ -8,6 +8,9 @@ importers:
.:
dependencies:
dotenv:
specifier: ^16.4.5
version: 16.4.5
express:
specifier: ^4.19.2
version: 4.19.2
@ -84,6 +87,10 @@ packages:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
dotenv@16.4.5:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@ -369,6 +376,8 @@ snapshots:
destroy@1.2.0: {}
dotenv@16.4.5: {}
ee-first@1.1.1: {}
encodeurl@1.0.2: {}