summaryrefslogtreecommitdiff
path: root/app/config.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/config.js')
-rw-r--r--app/config.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/app/config.js b/app/config.js
new file mode 100644
index 0000000..6a66027
--- /dev/null
+++ b/app/config.js
@@ -0,0 +1,36 @@
+"use strict";
+
+function deepFreeze(obj) {
+ for (const name of Reflect.ownKeys(obj)) {
+ const value = obj[name];
+ if ((value && typeof value === "object") ||
+ typeof value === "function") deepFreeze(value);
+ } return Object.freeze(obj);
+}
+
+Math.clamp ||= ((x,l,h) => Math.max(l,Math.min(x,h)));
+const PORT = Math.clamp(+process.env.PORT||8080, 1, 65535);
+const HOST = process.env.HOST||"0.0.0.0";
+
+module.exports = deepFreeze({
+ PORT: Math.clamp(+process.env.PORT||8080, 1, 65535),
+ HOST: process.env.HOST||"0.0.0.0",
+ DOMAIN: "localhost",
+ SECURE: false, // i.e. served over https
+
+ auth: {
+ TOKEN_RENEW_AGE: 15*60, // 15 mins
+ TOKEN_MAX_AGE: 30*86400, // 30 days
+ TOKEN_LENGTH: 24, // bytes
+ SESSION_ID_LENGTH: 12,
+ USERNAME_MAX_LENGTH: 128,
+ PASSWORD_MIN_LENGTH: 8,
+ PASSWORD_MAX_LENGTH: 512, // Avoid DDOS
+ RATE_LIMIT_MAX_LEVEL: 16,
+ RATE_LIMIT_MAX_WAITING: 512,
+ fingerprintIP: req =>
+ //req.headers["cf-connecting-ip"] ||
+ //req.headers["x-forwarded-for"] ||
+ req.socket.remoteAddress,
+ },
+});