[object Object]

← back to Nationalrealestate

auth: support multiple Basic-Auth users (add Daniel), keep admin + env override

2d8dfbed7c6e591a88b92a581c5c1f217dc16021 · 2026-07-23 14:42:17 -0700 · Steve Abrams

Files touched

Diff

commit 2d8dfbed7c6e591a88b92a581c5c1f217dc16021
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 23 14:42:17 2026 -0700

    auth: support multiple Basic-Auth users (add Daniel), keep admin + env override
---
 src/server/index.ts | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/server/index.ts b/src/server/index.ts
index a4fbd82..2a2b19b 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -22,15 +22,16 @@ app.use(express.json({ limit: '256kb' }));
 
 app.get('/healthz', (_req, res) => res.type('text').send('ok'));
 
-const AUTH_USER = process.env.USRE_USER || 'admin';
-const AUTH_PASS = process.env.USRE_PASS || 'DW2024!';
+// Whole-site Basic Auth — the default admin login, named stakeholder logins, and any
+// extra comma-separated user:pass pairs via BASIC_AUTH_EXTRA. Accepts a SET of creds
+// (was single-user) so more than one person can be granted access.
+const AUTH_PAIRS = [
+  `${process.env.USRE_USER || 'admin'}:${process.env.USRE_PASS || 'DW2024!'}`,
+  'Daniel:Dandeana1992',
+].concat((process.env.BASIC_AUTH_EXTRA || '').split(',').map((s) => s.trim()).filter(Boolean));
+const ACCEPTED = new Set(AUTH_PAIRS.map((p) => 'Basic ' + Buffer.from(p).toString('base64')));
 app.use((req, res, next) => {
-  const hdr = req.headers.authorization || '';
-  const [scheme, encoded] = hdr.split(' ');
-  if (scheme === 'Basic' && encoded) {
-    const [u, ...rest] = Buffer.from(encoded, 'base64').toString().split(':');
-    if (u === AUTH_USER && rest.join(':') === AUTH_PASS) return next();
-  }
+  if (ACCEPTED.has(req.headers.authorization || '')) return next();
   res.set('WWW-Authenticate', 'Basic realm="USRealEstate", charset="UTF-8"');
   return res.status(401).send('Authentication required');
 });

← dc6baf0 chore: harden sublease.ts (enum allowlists on status/lease_t  ·  back to Nationalrealestate  ·  auth: add Boomer login (rentfree911) 8f27ada →