diff --git a/README.md b/README.md
index eb25109..0a85e0c 100644
--- a/README.md
+++ b/README.md
@@ -61,9 +61,42 @@ yarn
## Configuration
Add environment variables with a .env. Example:
-```env
-SITE_TITLE="Christmas Zone"
+```sh
+## Core Settings
+# Where to store databases, can be a CouchDB compatible server or directory.
+DB_PREFIX=dbs/
+# Where to send someone if they need to log in
+DEFAULT_FAILURE_REDIRECT=/login
+# Port to listen on
PORT=80
+# Expose the internal PouchDB with CouchDB API and Fauxton browser. Mostly used for debugging. Leave empty to disable.
+DB_EXPOSE_PORT=
+# Proxy to send item data requests to. Leave emtpy to disable.
+PROXY_SERVER=
+# Secret string to store session cookies with. Automatically generated if not provided.
+SECRET=
+# How long a user is logged in (milliseconds). Defaults to one week.
+SESSION_MAX_AGE=604800000
+# The name of the site in the
and navigation bar
+SITE_TITLE=Christmas Community
+# Used when shared to home screen
+SHORT_TITLE=Christmas
+# The root path for forms, CSS, and a small amount of JS. Useful when proxying.
+ROOT_PATH=/
+# Where to trust the X-Forwarded-For header from. Defaults to "loopback". Useful for proxying to docker.
+TRUST_PROXY=loopback
+
+## Wishlist Settings
+# Set to true to not allow users to have their own lists. You may want this for a birthday or wedding.
+SINGLE_LIST=false
+# Set to false to allow viewing wishlists without logging in
+LISTS_PUBLIC=false
+# Defaults to true. Set to false for legacy cards view.
+TABLE=true
+# Convert Amazon links to Amazon Smile links. A percentage of the profit goes to a charity of buyer's choice. Defaults to true.
+SMILE=true
+# Allow Markdown in item notes. Does not work with TABLE=false. Defaults to false.
+MARKDOWN=false
```
## Startup
diff --git a/config/index.js b/config/index.js
index fe0c2c3..5f69cd5 100644
--- a/config/index.js
+++ b/config/index.js
@@ -1,7 +1,5 @@
require('dotenv').config()
-const yesNo = require('yes-no')
-
module.exports = {
dbPrefix: process.env.DB_PREFIX || 'dbs/',
defaultFailureRedirect: process.env.DEFAULT_FAILURE_REDIRECT || '/login',
@@ -14,6 +12,5 @@ module.exports = {
shortTitle: process.env.SHORT_TITLE || 'Christmas',
wishlist: require('./wishlist'),
base: (process.env.ROOT_PATH || '/').endsWith('/') ? (process.env.ROOT_PATH || '/') : `${process.env.ROOT_PATH}/`,
- trustProxy: process.env.TRUST_PROXY === 'true' ? true : process.env.TRUST_PROXY || 'loopback',
- markdown: yesNo.parse(process.env.MARKDOWN || false)
+ trustProxy: process.env.TRUST_PROXY === 'true' ? true : process.env.TRUST_PROXY || 'loopback'
}
diff --git a/config/wishlist/index.js b/config/wishlist/index.js
index 88cf57a..eacfff1 100644
--- a/config/wishlist/index.js
+++ b/config/wishlist/index.js
@@ -1,5 +1,11 @@
+const { parse: yesNo } = require('yes-no')
+
module.exports = {
+ singleList: yesNo(process.env.SINGLE_LIST || false),
+ public: yesNo(process.env.LISTS_PUBLIC || false),
+ table: yesNo(process.env.TABLE || true),
+ smile: yesNo(process.env.SMILE || true),
note: {
- rows: Number(process.env.WISHLIST_NOTE_ROWS) || 5
+ markdown: yesNo(process.env.MARKDOWN || false)
}
}
diff --git a/middlewares/publicRoute.js b/middlewares/publicRoute.js
index b77b899..59b8943 100644
--- a/middlewares/publicRoute.js
+++ b/middlewares/publicRoute.js
@@ -1,6 +1,6 @@
const verifyAuth = require('./verifyAuth')
-const publicMiddleware = () => process.env.LISTS_PUBLIC === 'true'
+const publicMiddleware = () => global._CC.config.wishlist.public
? (req, res, next) => {
if (!req.user) req.user = { _id: 'Unknown' }
next()
diff --git a/routes/wishlist/index.js b/routes/wishlist/index.js
index 8b3a735..481c6dc 100644
--- a/routes/wishlist/index.js
+++ b/routes/wishlist/index.js
@@ -25,7 +25,7 @@ const totals = wishlist => {
const ValidURL = (string) => { // Ty SO
try {
const url = new URL(string)
- if (process.env.SMILE !== 'false') {
+ if (global._CC.config.wishlist.smile) {
if (url.hostname === 'www.amazon.com') url.hostname = 'smile.amazon.com'
}
if (url) return url
@@ -39,7 +39,7 @@ module.exports = (db) => {
router.get('/', publicRoute(), async (req, res) => {
const docs = await db.allDocs({ include_docs: true })
- if (process.env.SINGLE_LIST === 'true') {
+ if (global._CC.config.wishlist.singleList) {
for (const row of docs.rows) {
if (row.doc.admin) return res.redirect(`/wishlist/${row.doc._id}`)
}
@@ -50,7 +50,7 @@ module.exports = (db) => {
router.get('/:user', publicRoute(), async (req, res) => {
try {
const dbUser = await db.get(req.params.user)
- if (process.env.SINGLE_LIST === 'true') {
+ if (global._CC.config.wishlist.singleList) {
if (!dbUser.admin) {
const docs = await db.allDocs({ include_docs: true })
for (const row of docs.rows) {
@@ -63,7 +63,7 @@ module.exports = (db) => {
const lastCanSeeValue = wishlistReverse.find(element => (element.addedBy === req.params.user))
const lastCanSee = dbUser.wishlist.indexOf(lastCanSeeValue)
for (const item of dbUser.wishlist) {
- if (global._CC.config.markdown) item.note = DOMPurify.sanitize(marked(item.note))
+ if (global._CC.config.wishlist.note.markdown) item.note = DOMPurify.sanitize(marked(item.note))
}
res.render('wishlist', {
title: `Wishlist - ${dbUser._id}`,
diff --git a/views/wishlist.pug b/views/wishlist.pug
index 6c7f743..f375fa6 100644
--- a/views/wishlist.pug
+++ b/views/wishlist.pug
@@ -13,7 +13,7 @@ block title
block content
script(type='data/user_id')= req.user._id
- if process.env.TABLE !== 'false'
+ if global._CC.config.wishlist.table
.box
table.table.has-mobile-cards
thead
@@ -45,7 +45,7 @@ block content
)= (item.name ? item.name : item.url)
else
td.ugc(data-label='Name')= item.name
- if _CC.config.markdown
+ if _CC.config.wishlist.note.markdown
td.ugc(data-label='Note')!= item.note
else
td.ugc(data-label='Note')= item.note
@@ -220,7 +220,7 @@ block print
span.is-block Added by: #{item.addedBy}
if item.note
.box
- if _CC.config.markdown
+ if _CC.config.wishlist.note.markdown
span.is-block.ugc!= item.note
else
span.is-block.ugc= item.note
\ No newline at end of file