[object Object]

← back to Astek Landing

auto-save: 2026-07-02T06:11:23 (1 files) — server.js

cc88a35a12a439f06bd05a5840ef6c6ae53e097d · 2026-07-02 06:11:23 -0700 · Steve Abrams

Files touched

Diff

commit cc88a35a12a439f06bd05a5840ef6c6ae53e097d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 2 06:11:23 2026 -0700

    auto-save: 2026-07-02T06:11:23 (1 files) — server.js
---
 server.js | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/server.js b/server.js
index 75de3e5..9381ce9 100644
--- a/server.js
+++ b/server.js
@@ -10,6 +10,21 @@ const PORT = process.env.PORT || 0; // 0 = OS-assigned free port
 const DATA = path.join(__dirname, 'data', 'products.json');
 
 const app = express();
+
+// HTTP Basic Auth — internal-only gate (username + password). Override via
+// BASIC_AUTH="user:pass"; defaults to the DW standard admin / DW2024!.
+const [AUTH_USER, AUTH_PASS] = (process.env.BASIC_AUTH || 'admin:DW2024!').split(':');
+app.use((req, res, next) => {
+  const hdr = req.headers.authorization || '';
+  const [scheme, b64] = hdr.split(' ');
+  if (scheme === 'Basic' && b64) {
+    const [u, p] = Buffer.from(b64, 'base64').toString('utf8').split(':');
+    if (u === AUTH_USER && p === AUTH_PASS) return next();
+  }
+  res.set('WWW-Authenticate', 'Basic realm="Astek — Designer Wallcoverings (internal)"');
+  return res.status(401).send('Authentication required.');
+});
+
 app.use(express.json({ limit: '256kb' }));
 
 let SNAP = { products: [], facets: { total: 0, books: [], series: [], colors: [] } };

← 392ee7a add .deploy.conf (gated deploy target)  ·  back to Astek Landing  ·  Add HTTP Basic Auth gate (username+password) — internal-only 5ece5ee →