diff options
| author | Raphael Kabo <mail@raphaelkabo.com> | 2023-05-13 19:19:37 +0100 | 
|---|---|---|
| committer | Raphael Kabo <mail@raphaelkabo.com> | 2023-05-13 19:19:37 +0100 | 
| commit | 45ecdf59f8b0c4090041ce86aad2e5f606253f0d (patch) | |
| tree | 77d1f3ea9acd0b23040f15bc757e9ba39c47af26 /src | |
| parent | f1a5a9b9a0f8357e25e3b2c8d72d745093bda9c3 (diff) | |
Migrate config library to TOML
Diffstat (limited to 'src')
| -rw-r--r-- | src/config/api-example.js | 8 | ||||
| -rw-r--r-- | src/config/database-docker.js | 3 | ||||
| -rw-r--r-- | src/config/database-example.js | 3 | ||||
| -rw-r--r-- | src/config/domain-example.js | 13 | ||||
| -rw-r--r-- | src/config/gathio.service | 13 | ||||
| -rw-r--r-- | src/lib/config.ts | 56 | 
6 files changed, 56 insertions, 40 deletions
diff --git a/src/config/api-example.js b/src/config/api-example.js deleted file mode 100644 index 493b9d6..0000000 --- a/src/config/api-example.js +++ /dev/null @@ -1,8 +0,0 @@ -// Which of these fields are used depends on the 'mailService' config entry in config/domain.js -module.exports = { -  sendgrid: "", // If using SendGrid, the Sendgrid API key goes here -  smtpServer: "", // If using Nodemailer, your SMTP server hostname goes here -  smtpPort: "", // If using Nodemailer, your SMTP server port goes here -  smtpUsername: "", // If using Nodemailer, your SMTP server username goes here -  smtpPassword: "", // If using Nodemailer, your SMTP password goes here -}; diff --git a/src/config/database-docker.js b/src/config/database-docker.js deleted file mode 100644 index 96c987d..0000000 --- a/src/config/database-docker.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { -  url: "mongodb://mongo:27017/gathio", // For dockerised MongoDB connection -}; diff --git a/src/config/database-example.js b/src/config/database-example.js deleted file mode 100644 index ca7bdcc..0000000 --- a/src/config/database-example.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { -  url: "mongodb://localhost:27017/gathio", // For local MongoDB connection -}; diff --git a/src/config/domain-example.js b/src/config/domain-example.js deleted file mode 100644 index abac094..0000000 --- a/src/config/domain-example.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { -  // Your domain goes here. If there is a port it should be 'domain:port', but otherwise just 'domain' -  domain: "localhost:3000", -  port: "3000", -  email: "contact@example.com", -  mailService: "nodemailer", // Which mail service to use to send emails to attendees. Options are 'nodemailer' or 'sendgrid'. Configure settings for the mail service in config/api.js.z -  sitename: "gathio", -  isFederated: true, -  // If left blank, this defaults to https://yourdomain.com/images/gathio-email-logo.gif. Set a full URL here to change it to your own logo (or just change the file itself) -  logo_url: "", -  // Show a Ko-Fi box to donate money to Raphael Kabo (Gathio's creator) on the front page -  showKofi: false, -}; diff --git a/src/config/gathio.service b/src/config/gathio.service deleted file mode 100644 index 447d44f..0000000 --- a/src/config/gathio.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=GathIO -After=network.target - -[Service] -Type=simple -User=gathio -WorkingDirectory=/srv/gathio -ExecStart=/usr/bin/npm start -Restart=on-failure - -[Install] -WantedBy=multi-user.target diff --git a/src/lib/config.ts b/src/lib/config.ts new file mode 100644 index 0000000..d235145 --- /dev/null +++ b/src/lib/config.ts @@ -0,0 +1,56 @@ +import fs from "fs"; +import toml from "toml"; + +interface GathioConfig { +  general: { +    domain: string; +    port: string; +    email: string; +    site_name: string; +    is_federated: boolean; +    email_logo_url: string; +    show_kofi: boolean; +    mail_service: "nodemailer" | "sendgrid"; +  }; +  database: { +    mongodb_url: string; +  }; +  nodemailer?: { +    smtp_server: string; +    smtp_port: string; +    smtp_username: string; +    smtp_password: string; +  }; +  sendgrid?: { +    api_key: string; +  }; +} + +export const publicConfig = () => { +  const config = getConfig(); +  return { +    domain: config.general.domain, +    siteName: config.general.site_name, +    isFederated: config.general.is_federated, +    emailLogoUrl: config.general.email_logo_url, +    showKofi: config.general.show_kofi, +  }; +}; + +// Attempt to load our global config. Will stop the app if the config file +// cannot be read (there's no point trying to continue!) +export const getConfig = (): GathioConfig => { +  try { +    const config = toml.parse( +      fs.readFileSync("./config/config.toml", "utf-8") +    ) as GathioConfig; +    return config; +  } catch { +    console.error( +      "\x1b[31mConfiguration file not found! Have you renamed './config/config-example.toml' to './config/config.toml'?" +    ); +    process.exit(1); +  } +}; + +export default getConfig;  | 
