summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/FUNDING.yml3
-rw-r--r--.github/workflows/deploy.yaml23
-rw-r--r--Dockerfile2
-rw-r--r--README.md13
-rw-r--r--package.json4
-rw-r--r--src/lib/config.ts1
-rw-r--r--src/lib/email.ts80
-rwxr-xr-xsrc/routes.js44
-rwxr-xr-xviews/home.handlebars7
9 files changed, 68 insertions, 109 deletions
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..c0d6816
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: [lowercasename]
diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml
deleted file mode 100644
index 1d0330a..0000000
--- a/.github/workflows/deploy.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: CI / Deploy
-on:
- workflow_dispatch:
- push:
- branches:
- - main
-
-jobs:
- deploy:
- runs-on: ubuntu-latest
- steps:
- - name: Set up known_hosts file
- run: |
- mkdir -p ~/.ssh/ && touch ~/.ssh/known_hosts
- ssh-keyscan ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
-
- - uses: webfactory/ssh-agent@v0.9.1
- with:
- ssh-private-key: ${{ secrets.SSH_KEY }}
-
- - name: Run deploy script
- run: |
- ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd ${{ secrets.DEPLOY_PATH }} && ./deploy.sh'
diff --git a/Dockerfile b/Dockerfile
index 61947a8..0db75ce 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,4 +16,4 @@ FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=BUILD_IMAGE /app ./
-CMD ["node", "dist/start.js"]
+CMD ["npm", "run", "start"]
diff --git a/README.md b/README.md
index f30355a..91647d5 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# gathio
-| [![Build status](https://github.com/lowercasename/gathio/actions/workflows/ci.yaml/badge.svg)](https://github.com/lowercasename/gathio/actions/workflows/ci.yaml) | [![Build status](https://github.com/lowercasename/gathio/actions/workflows/deploy.yaml/badge.svg)](https://github.com/lowercasename/gathio/actions/workflows/deploy.yaml) |
-| ---- | ---- |
+[![Build status](https://github.com/lowercasename/gathio/actions/workflows/ci.yaml/badge.svg)](https://github.com/lowercasename/gathio/actions/workflows/ci.yaml)
A simple, federated, privacy-first event hosting platform.
@@ -10,3 +9,13 @@ You can use the flagship publicly hosted version [here](https://gath.io).
# Documentation
To learn more about how to use Gathio, or how to set up your own instance, vist our [documentation site](https://docs.gath.io). If the site isn't working, the source documentation files are in the [`docs/` directory](https://github.com/lowercasename/gathio/tree/main/docs).
+
+# Contributors
+
+These amazing people have helped build and support Gathio!
+
+<a href="https://github.com/lowercasename/gathio/graphs/contributors">
+ <img src="https://contrib.rocks/image?repo=lowercasename/gathio" />
+</a>
+
+Made with [contrib.rocks](https://contrib.rocks).
diff --git a/package.json b/package.json
index 06a67c9..82f8374 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "gathio",
- "version": "1.5.0",
+ "version": "1.5.2",
"description": "A simple, federated, privacy-first event hosting platform",
"main": "index.js",
"type": "module",
@@ -73,4 +73,4 @@
"nodemon": "^2.0.22",
"prettier": "^3.2.5"
}
-} \ No newline at end of file
+}
diff --git a/src/lib/config.ts b/src/lib/config.ts
index 406775d..4016c92 100644
--- a/src/lib/config.ts
+++ b/src/lib/config.ts
@@ -29,6 +29,7 @@ export interface GathioConfig {
mongodb_url: string;
};
nodemailer?: {
+ smtp_url?: string;
smtp_server: string;
smtp_port: string;
smtp_username: string;
diff --git a/src/lib/email.ts b/src/lib/email.ts
index 82dd48e..7b7a7a1 100644
--- a/src/lib/email.ts
+++ b/src/lib/email.ts
@@ -1,6 +1,6 @@
import { Request } from "express";
import sgMail from "@sendgrid/mail";
-import nodemailer from "nodemailer";
+import nodemailer, { Transporter } from "nodemailer";
import { getConfig } from "./config.js";
import SMTPTransport from "nodemailer/lib/smtp-transport/index.js";
import { exitWithError } from "./process.js";
@@ -37,32 +37,36 @@ export const initEmailService = async (): Promise<boolean> => {
console.log("Sendgrid is ready to send emails.");
return true;
case "nodemailer":
- if (
- !config.nodemailer?.smtp_server ||
- !config.nodemailer?.smtp_port
- ) {
- return exitWithError(
- "Nodemailer is configured as the email service, but not all required fields are provided. Please provide all required fields in the config file.",
- );
- }
- const nodemailerConfig = {
- host: config.nodemailer?.smtp_server,
- port: Number(config.nodemailer?.smtp_port) || 587,
- tls: {
- // do not fail on invalid certs
- rejectUnauthorized: false,
- },
- } as SMTPTransport.Options;
+ let nodemailerTransporter:Transporter|undefined = undefined;
+ if (config.nodemailer?.smtp_url) {
+ nodemailerTransporter = nodemailer.createTransport(config.nodemailer?.smtp_url);
+ } else {
+ if (
+ !config.nodemailer?.smtp_server ||
+ !config.nodemailer?.smtp_port
+ ) {
+ return exitWithError(
+ "Nodemailer is configured as the email service, but not all required fields are provided. Please provide all required fields in the config file.",
+ );
+ }
+ const nodemailerConfig = {
+ host: config.nodemailer?.smtp_server,
+ port: Number(config.nodemailer?.smtp_port) || 587,
+ tls: {
+ // do not fail on invalid certs
+ rejectUnauthorized: false,
+ },
+ } as SMTPTransport.Options;
- if (config.nodemailer?.smtp_username) {
- nodemailerConfig.auth = {
- user: config.nodemailer?.smtp_username,
- pass: config.nodemailer?.smtp_password
- };
+ if (config.nodemailer?.smtp_username) {
+ nodemailerConfig.auth = {
+ user: config.nodemailer?.smtp_username,
+ pass: config.nodemailer?.smtp_password
+ };
+ }
+ nodemailerTransporter = nodemailer.createTransport(nodemailerConfig);
}
- const nodemailerTransporter =
- nodemailer.createTransport(nodemailerConfig);
const nodemailerVerified = await nodemailerTransporter.verify();
if (nodemailerVerified) {
console.log("Nodemailer is ready to send emails.");
@@ -110,20 +114,24 @@ export const sendEmail = async (
}
case "nodemailer":
try {
- const nodemailerConfig = {
- host: config.nodemailer?.smtp_server,
- port: Number(config.nodemailer?.smtp_port) || 587,
- } as SMTPTransport.Options;
+ let nodemailerTransporter:Transporter|undefined = undefined;
+ if (config.nodemailer?.smtp_url) {
+ nodemailerTransporter = nodemailer.createTransport(config.nodemailer?.smtp_url);
+ } else {
+ const nodemailerConfig = {
+ host: config.nodemailer?.smtp_server,
+ port: Number(config.nodemailer?.smtp_port) || 587,
+ } as SMTPTransport.Options;
- if (config.nodemailer?.smtp_username) {
- nodemailerConfig.auth = {
- user: config.nodemailer?.smtp_username,
- pass: config.nodemailer?.smtp_password
- };
- }
+ if (config.nodemailer?.smtp_username) {
+ nodemailerConfig.auth = {
+ user: config.nodemailer?.smtp_username,
+ pass: config.nodemailer?.smtp_password
+ };
+ }
- const nodemailerTransporter =
- nodemailer.createTransport(nodemailerConfig);
+ nodemailerTransporter = nodemailer.createTransport(nodemailerConfig);
+ }
await nodemailerTransporter.sendMail({
envelope: {
from: config.general.email,
diff --git a/src/routes.js b/src/routes.js
index b85452f..3a6d8a4 100755
--- a/src/routes.js
+++ b/src/routes.js
@@ -25,6 +25,7 @@ import path from "path";
import { activityPubContentType } from "./lib/activitypub.js";
import { hashString } from "./util/generator.js";
import i18next from "i18next";
+import { initEmailService } from "./lib/email.js";
const config = getConfig();
const domain = config.general.domain;
@@ -44,46 +45,9 @@ const nanoid = customAlphabet(
const router = express.Router();
let sendEmails = false;
-let nodemailerTransporter;
-if (config.general.mail_service) {
- switch (config.general.mail_service) {
- case "sendgrid":
- sgMail.setApiKey(config.sendgrid?.api_key);
- console.log("Sendgrid is ready to send emails.");
- sendEmails = true;
- break;
- case "nodemailer":
- const nodemailerConfig = {
- host: config.nodemailer?.smtp_server,
- port: Number(config.nodemailer?.smtp_port) || 587,
- };
-
- if (config.nodemailer?.smtp_username) {
- nodemailerConfig.auth = {
- user: config.nodemailer?.smtp_username,
- pass: config.nodemailer?.smtp_password
- };
- }
-
- nodemailerTransporter = nodemailer.createTransport(nodemailerConfig);
-
- nodemailerTransporter.verify((error, success) => {
- if (error) {
- console.log(error);
- } else {
- console.log(
- "Nodemailer SMTP server is ready to send emails.",
- );
- sendEmails = true;
- }
- });
- break;
- default:
- console.error(
- "You have not configured this Gathio instance to send emails! This means that event creators will not receive emails when their events are created, which means they may end up locked out of editing events. Consider setting up an email service.",
- );
- }
-}
+initEmailService().then((emailService) => {
+ sendEmails = emailService
+});
router.use(fileUpload());
diff --git a/views/home.handlebars b/views/home.handlebars
index 21eec0f..cc1ae00 100755
--- a/views/home.handlebars
+++ b/views/home.handlebars
@@ -46,12 +46,9 @@
<p>{{{t "views.home.osdesc" }}}</p>
{{#if showKofi}}
- <div class="card border-secondary mt-5 mb-3 mx-auto" style="min-width:300px;max-width:50%;">
- <div class="card-body text-secondary">
+ <div class="card border-success mt-5 mb-3 mx-auto" style="min-width:300px;max-width:50%;">
+ <div class="card-body">
<p>{{{t "views.home.kofidesc" }}}</p>
- <script type='text/javascript' src='https://ko-fi.com/widgets/widget_2.js'></script>
- <script
- type='text/javascript'>kofiwidget2.init('{{t "views.home.kofi" }}', '#46b798', 'Q5Q2O7T5'); kofiwidget2.draw();</script>
</div>
</div>
{{/if}}