format via prettier

This commit is contained in:
Dawid Dziurla
2025-06-14 23:03:31 +02:00
parent c2fddd52ad
commit cb3a0635bb
2 changed files with 108 additions and 75 deletions

4
.prettierrc Normal file
View File

@ -0,0 +1,4 @@
{
"tabWidth": 4,
"useTabs": false
}

177
main.js
View File

@ -1,130 +1,152 @@
const nodemailer = require("nodemailer") const nodemailer = require("nodemailer");
const core = require("@actions/core") const core = require("@actions/core");
const glob = require("@actions/glob") const glob = require("@actions/glob");
const fs = require("fs") const fs = require("fs");
const showdown = require("showdown") const showdown = require("showdown");
const path = require("path") const path = require("path");
function getText(textOrFile, convertMarkdown) { function getText(textOrFile, convertMarkdown) {
let text = textOrFile let text = textOrFile;
// Read text from file // Read text from file
if (textOrFile.startsWith("file://")) { if (textOrFile.startsWith("file://")) {
const file = textOrFile.replace("file://", "") const file = textOrFile.replace("file://", "");
text = fs.readFileSync(file, "utf8") text = fs.readFileSync(file, "utf8");
} }
// Convert Markdown to HTML // Convert Markdown to HTML
if (convertMarkdown) { if (convertMarkdown) {
const converter = new showdown.Converter({tables: true}) const converter = new showdown.Converter({ tables: true });
text = converter.makeHtml(text) text = converter.makeHtml(text);
} }
return text return text;
} }
function getFrom(from, username) { function getFrom(from, username) {
if (from.match(/.+ <.+@.+>/)) { if (from.match(/.+ <.+@.+>/)) {
return from return from;
} }
return `"${from}" <${username}>` return `"${from}" <${username}>`;
} }
async function getAttachments(attachments) { async function getAttachments(attachments) {
const globber = await glob.create(attachments.split(',').join('\n')) const globber = await glob.create(attachments.split(",").join("\n"));
const files = await globber.glob() const files = await globber.glob();
return files.map(f => ({ filename: path.basename(f), path: f, cid: f.replace(/^.*[\\\/]/, '')})) return files.map((f) => ({
filename: path.basename(f),
path: f,
cid: f.replace(/^.*[\\\/]/, ""),
}));
} }
function sleep(ms) { function sleep(ms) {
return new Promise((resolve) => { return new Promise((resolve) => {
setTimeout(resolve, ms); setTimeout(resolve, ms);
}); });
} }
async function main() { async function main() {
try { try {
let serverAddress = core.getInput("server_address") let serverAddress = core.getInput("server_address");
let serverPort = core.getInput("server_port") let serverPort = core.getInput("server_port");
let secure = core.getInput("secure") let secure = core.getInput("secure");
let username = core.getInput("username") let username = core.getInput("username");
let password = core.getInput("password") let password = core.getInput("password");
if (!secure) { if (!secure) {
secure = serverPort === "465" ? "true" : "false" secure = serverPort === "465" ? "true" : "false";
} }
const connectionUrl = core.getInput("connection_url") const connectionUrl = core.getInput("connection_url");
if (connectionUrl) { if (connectionUrl) {
const url = new URL(connectionUrl) const url = new URL(connectionUrl);
switch (url.protocol) { switch (url.protocol) {
default: default:
throw new Error(`Unsupported connection protocol '${url.protocol}'`) throw new Error(
`Unsupported connection protocol '${url.protocol}'`
);
case "smtp:": case "smtp:":
serverPort = "25" serverPort = "25";
secure = "false" secure = "false";
break break;
case "smtp+starttls:": case "smtp+starttls:":
serverPort = "465" serverPort = "465";
secure = "true" secure = "true";
break break;
} }
if (url.hostname) { if (url.hostname) {
serverAddress = url.hostname serverAddress = url.hostname;
} }
if (url.port) { if (url.port) {
serverPort = url.port serverPort = url.port;
} }
if (url.username) { if (url.username) {
username = unescape(url.username) username = unescape(url.username);
} }
if (url.password) { if (url.password) {
password = unescape(url.password) password = unescape(url.password);
} }
} }
const subject = core.getInput("subject", { required: true }) const subject = core.getInput("subject", { required: true });
const from = core.getInput("from", { required: true }) const from = core.getInput("from", { required: true });
const to = core.getInput("to", { required: false }) const to = core.getInput("to", { required: false });
const body = core.getInput("body", { required: false }) const body = core.getInput("body", { required: false });
const htmlBody = core.getInput("html_body", { required: false }) const htmlBody = core.getInput("html_body", { required: false });
const cc = core.getInput("cc", { required: false }) const cc = core.getInput("cc", { required: false });
const bcc = core.getInput("bcc", { required: false }) const bcc = core.getInput("bcc", { required: false });
const replyTo = core.getInput("reply_to", { required: false }) const replyTo = core.getInput("reply_to", { required: false });
const inReplyTo = core.getInput("in_reply_to", { required: false }) const inReplyTo = core.getInput("in_reply_to", { required: false });
const attachments = core.getInput("attachments", { required: false }) const attachments = core.getInput("attachments", { required: false });
const convertMarkdown = core.getInput("convert_markdown", { required: false }) const convertMarkdown = core.getInput("convert_markdown", {
const ignoreCert = core.getInput("ignore_cert", { required: false }) required: false,
const priority = core.getInput("priority", { required: false }) });
const nodemailerlog = core.getInput("nodemailerlog", { required: false }) const ignoreCert = core.getInput("ignore_cert", { required: false });
const nodemailerdebug = core.getInput("nodemailerdebug", { required: false }) const priority = core.getInput("priority", { required: false });
const envelopeFrom = core.getInput("envelope_from", { required: false }) const nodemailerlog = core.getInput("nodemailerlog", {
const envelopeTo = core.getInput("envelope_to", { required: false }) required: false,
});
const nodemailerdebug = core.getInput("nodemailerdebug", {
required: false,
});
const envelopeFrom = core.getInput("envelope_from", {
required: false,
});
const envelopeTo = core.getInput("envelope_to", { required: false });
// if neither to, cc or bcc is provided, throw error // if neither to, cc or bcc is provided, throw error
if (!to && !cc && !bcc) { if (!to && !cc && !bcc) {
throw new Error("At least one of 'to', 'cc' or 'bcc' must be specified") throw new Error(
"At least one of 'to', 'cc' or 'bcc' must be specified"
);
} }
if (!serverAddress) { if (!serverAddress) {
throw new Error("Server address must be specified") throw new Error("Server address must be specified");
} }
const transport = nodemailer.createTransport({ const transport = nodemailer.createTransport({
host: serverAddress, host: serverAddress,
auth: username && password ? { auth:
user: username, username && password
pass: password ? {
} : undefined, user: username,
pass: password,
}
: undefined,
port: serverPort, port: serverPort,
secure: secure === "true", secure: secure === "true",
tls: ignoreCert == "true" ? { tls:
rejectUnauthorized: false ignoreCert == "true"
} : undefined, ? {
rejectUnauthorized: false,
}
: undefined,
logger: nodemailerdebug == "true" ? true : nodemailerlog, logger: nodemailerdebug == "true" ? true : nodemailerlog,
debug: nodemailerdebug, debug: nodemailerdebug,
}) });
var i = 1; var i = 1;
while (true) { while (true) {
@ -139,22 +161,29 @@ async function main() {
inReplyTo: inReplyTo ? inReplyTo : undefined, inReplyTo: inReplyTo ? inReplyTo : undefined,
references: inReplyTo ? inReplyTo : undefined, references: inReplyTo ? inReplyTo : undefined,
text: body ? getText(body, false) : undefined, text: body ? getText(body, false) : undefined,
html: htmlBody ? getText(htmlBody, convertMarkdown) : undefined, html: htmlBody
? getText(htmlBody, convertMarkdown)
: undefined,
priority: priority ? priority : undefined, priority: priority ? priority : undefined,
attachments: attachments ? (await getAttachments(attachments)) : undefined, attachments: attachments
envelope: (envelopeFrom || envelopeTo) ? { ? await getAttachments(attachments)
from: envelopeFrom ? envelopeFrom : undefined, : undefined,
to: envelopeTo ? envelopeTo : undefined envelope:
} : undefined envelopeFrom || envelopeTo
? {
from: envelopeFrom ? envelopeFrom : undefined,
to: envelopeTo ? envelopeTo : undefined,
}
: undefined,
}); });
break; break;
} catch (error) { } catch (error) {
if (!error.message.includes("Try again later,")) { if (!error.message.includes("Try again later,")) {
core.setFailed(error.message) core.setFailed(error.message);
break; break;
} }
if (i > 10) { if (i > 10) {
core.setFailed(error.message) core.setFailed(error.message);
break; break;
} }
console.log("Received: " + error.message); console.log("Received: " + error.message);
@ -168,8 +197,8 @@ async function main() {
} }
} }
} catch (error) { } catch (error) {
core.setFailed(error.message) core.setFailed(error.message);
} }
} }
main() main();